用了这个logstash扩展
https://github.com/PeterPaulH/logstash-influxdb/blob/master/src/influxdb.rb
把这个文件放到 logstash-1.4.2/lib/logstash/outputs
看一下午logstash的文档,终于解决了自己的需求
用python描述就是这样的
开发要求统计日志中各种类型的数量
while True: line = f.readline() try: if ‘"type":"text","receiver_id"‘ in line: type = ‘directmessage‘ elif ‘"subtype":"unfollow"‘ in line: type = ‘unfollow‘ elif ‘"subtype":"follow"‘ in line: type = ‘follow‘ elif ‘"subtype":"status"‘ in line: type = ‘weibo‘ elif ‘"subtype":"comment"‘ in line: type = ‘comment‘ else: type = None if type: data = [ {"name":"pingpong_processor", "columns" : ["type"], "points" : [[type]] } ]
logstash配置文件如下
input { stdin {} } filter { if ‘"type":"text"‘ in [message] { mutate { add_field => { "type" => "directmessage" } remove_field => [ "message", "search" , "@version" ] } } else if ‘"subtype":"unfollow"‘ in [message] { mutate { add_field => { "type" => "unfollow" } remove_field => [ "message", "search" , "@version" ] } } else if ‘"subtype":"follow"‘ in [message] { mutate { add_field => { "type" => "follow" } remove_field => [ "message", "search" , "@version" ] } } else if ‘"subtype":"status"‘ in [message] { mutate { add_field => { "type" => "weibo" } remove_field => [ "message", "search" , "@version" ] } } else if ‘"subtype":"comment"‘ in [message] { mutate { add_field => { "type" => "comment" } remove_field => [ "message", "search" , "@version" ] } } else { drop {} } } output { influxdb { host => "10.75.28.180" port => 4444 name => ["pingpong_processor"] columns => ["type", "host"] points => [ "%{type}", "c", "%{host}", "c" ] } stdout {} }
别忘记把influxdb的配置也修改下,因为默认upd协议是没有打开的
# Configure the udp api [input_plugins.udp] enabled = true port = 4444 database = "pingpong_processor"
我用的influxdb版本是 influxdb-0.8.2-1.x86_64,用/etc/init.d/influxdb这个启动报错,无奈手动启动的
/usr/bin/influxdb -pidfile /tmp/influxdb.pid -config config.toml
看一下udp端口是否启动了
netstat -anup|grep influxdb udp 0 0 :::4444 :::* 27512/influxdb
完工