这次把kibana3升级到kibana4,现在我们底层部门的日志都用elk方案了(logstash elasticsearch kibana)   说实话,一开始用kibana4的时候,差点屁了,跟kibana3不同的路数,以前熟悉的前端的操作,在kibana4里都是行不通的,用我们产经经理仕华的话来书,这你妈很said .  

这里还是需要标记下我的原文的链接,我怕以后文章被转来转去都没影了….

http://xiaorui.cc

http://xiaorui.cc/?p=1272

kibana4现在是正式版了,在群里看到新浪也已经用了kibana4。 听饶陈琳说 4还是很不错的…  但对于我们来说,最大的功能是他支持metric聚合,别问我啥是metric…   

大家都知道kibana是个前端的应用,在4里面加强了不少语句,比如聚合….   有了metric的功能,我们就可以用graphite、influxdb那样,做数据的聚合,可以得到count max min average sum的功能…. 


这个时候还需要什么?  我们先拿求平均值说话, 既然做针对数据的平均值,那么你提供的数据就要是数字,而不是string字符串。。。

首先我们先看下我的logstash agent的配置文件,我们首先要用grok把整条的日志拆解下,然后就是把拆解的数字转换成float,也就是数字类型。   

input {

#文章的原文,http://xiaorui.cc/?p=1272
    file {
                type => “producer”
                path => “/data/buzzMaster/spider.log”
        }
}
filter  {
    grok    {
#        match => [“message”,”\[(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\]\s(?<level>\w*) (?<source>\w*)\s\”Crawl\surl:(?<url>(.*)) (?<httpcode>[0-9]{2,3})\stakes (?<
costbuzz>\d.\d\d).*”]
        match => [“message”,”\[(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\]\s(?<level>\w*) (?<source>\w*)\s\”Crawl\surl:(?<url>(.*)) (?<httpcode>[0-9]{2,3})\stakes %{NUMBER:buzzcost:float}.*”]
        }
    }
output  {
    redis   {
               host => “123.123.123.123″
               port => 6388
               data_type =>”list”
               key => “buzz_count”
    }
    stdout { codec => rubydebug}
}

下面是标准输出的日志,我们注意到httpcode和buzzcost看起来都是数字,httpcode其实是字符串,有引号的。  buzzcost就是数字。  这个很重要,如果你的字段里面没有数字类型的,那么你在kibana4的各种用field字段来计算平均值等。   还有一定要注意,你一个字段以前是字符串,后期就算推送的是数字,这样在elk里面是有问题的,在es里面我倒是没有测试过。

{
       ”message” => “[2015-04-15 15:16:20,057] INFO spider \”Crawl url:http://bbs.yule.com.cn/searcher.php?keyword=%C5%B7%C0%B3%D1%C5&type=thread&threadrange=1&username=&starttime=&endtime=&fid=&sortby=postdate&page=1 200 takes 5.497 seconds, refer:, depth:2\”",
      “@version” => “1″,
    “@timestamp” => “2015-04-15T15:16:20.482Z”,
          “type” => “producer”,
          “host” => “bj-buzz-docker01″,
          “path” => “/data/buzzMaster/spider.log”,
      “datetime” => “2015-04-15 15:16:20,057″,
         ”level” => “INFO”,
        “source” => “spider”,
           ”url” => “http://bbs.yule.com.cn/searcher.php?keyword=%C5%B7%C0%B3%D1%C5&type=thread&threadrange=1&username=&starttime=&endtime=&fid=&sortby=postdate&page=1″,
      “httpcode” => “200″,
      “costbuzz” => 5.49
}
{
       ”message” => “[2015-04-15 15:16:20,108] INFO spider \”Crawl url:http://sh.58.com/sou/pn1/?key=moony&cmcskey=moony&final=1&jump=2&specialtype=gls&sourcetype=4 200 takes 0.345 seconds, refer:, depth:2\”",
      “@version” => “1″,
    “@timestamp” => “2015-04-15T15:16:20.482Z”,
          “type” => “producer”,
          “host” => “bj-buzz-docker01″,
          “path” => “/data/buzzMaster/spider.log”,
      “datetime” => “2015-04-15 15:16:20,108″,
         ”level” => “INFO”,
        “source” => “spider”,
           ”url” => “http://sh.58.com/sou/pn1/?key=moony&cmcskey=moony&final=1&jump=2&specialtype=gls&sourcetype=4″,
      “httpcode” => “200″,
      “costbuzz” => 0.34
}

另外提一下,logstash本身也是可以做metrics服务的数据源的,他还是可以拆解字符串,得到数字,然后加上timestamp 。  主流的metric监控他都是支持的,graphite、influxbd、opentsdb 甚至可以配合statsd做预先的数据汇聚 聚合,用来达到rrdtool的效果。 


output { 
 statsd { 
    type => “web”
    increment => “apache.response.%{response}”
    count => [ "apache.bytes", "%{bytes}" ]
  }
}

output {
   ganglia{
    metric => “apache.bytes”
    value => “%{bytes}”
  }
}

output {
   graphite{
    metrics => [ 
      “apache.bytes”, “%{bytes}” 
    ]
  }
}

output {
   opentsdb{
    metrics => [ 
      “apache.bytes”, “%{bytes}” 
    ]
  }
}

有个logstash输出到graphite的文章, 写得不错…   另外调用了command组件,来实现类似监控的东西,调用命令sar、uptime啥的。 这人用的有些邪乎,感觉不干正经事,有兴趣的朋友可以look look !

https://developer.rackspace.com/blog/using-logstash-to-push-metrics-to-graphite/

有时间我会写一篇,logstash做metric输出的文章…         




对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

纠结Kibana4的时区timezone配置问题

今天聊聊,我是如何被Kibana时区timezone问题搞得没脾气的… 前段时间跟大家聊过,我们开始使用metrices + kibana + elasticesarch集群的组合构...

阅读全文

通过elasticsearch批量创建kibana的visualize图表及dashboard

      最近系统因为几处连锁的bug造成数据的缺失,有个几百万条有效数据吧。 这边基于metric的报警还完善,自己写得关于量级判断还没...

阅读全文

实现kibana4中多条数据自定义组合并计算整数平均值

这两天有个哥们在问我kibana4的问题,主要是围绕kibana4如何实现像graphite那样metric平均值,也就是聚合实现….    在老版的kibana中,应...

阅读全文