这次把kibana3升级到kibana4,现在我们底层部门的日志都用elk方案了(logstash elasticsearch kibana) 说实话,一开始用kibana4的时候,差点屁了,跟kibana3不同的路数,以前熟悉的前端的操作,在kibana4里都是行不通的,用我们产经经理仕华的话来书,这你妈很said .
这里还是需要标记下我的原文的链接,我怕以后文章被转来转去都没影了….
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输出的文章…
你有些跑题了吧
没有吧。。。。