用了這個logstash擴展python
https://github.com/PeterPaulH/logstash-influxdb/blob/master/src/influxdb.rbgit
把這個文件放到 logstash-1.4.2/lib/logstash/outputsgithub
看一下午logstash的文檔,終於解決了本身的需求api
用python描述就是這樣的日誌
開發要求統計日誌中各類類型的數量blog
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配置文件以下flux
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這個啓動報錯,無奈手動啓動的rem
/usr/bin/influxdb -pidfile /tmp/influxdb.pid -config config.toml文檔
看一下udp端口是否啓動了
netstat -anup|grep influxdb udp 0 0 :::4444 :::* 27512/influxdb
完工