实时收集Storm日志到ELK集群
- - 编程语言 - ITeye博客我们的storm实时流计算项目已经上线几个月了,由于各种原因迟迟没有进行监控,每次出现问题都要登录好几台机器,然后使用sed,shell,awk,vi等各种命令来查询原因,效率非常低下,而且有些统计是没法做的,所以很有必要对storm本身相关的日志以及我们运行在storm上面的任务的日志做一个统一的日志收集,分析,查询,统计平台.
{ "order": 0, "template": "jstorm*", "settings": { "index": { "number_of_replicas": "0", "number_of_shards": "3" } }, "mappings": { "_default_": { "dynamic_templates": [ { "level": { "mapping": { "index": "not_analyzed", "type": "string" }, "match": "level", "match_mapping_type": "string" } }, { "message": { "mapping": { "index": "analyzed", "type": "string" }, "match": "message", "match_mapping_type": "string" } }, { "date_fields": { "mapping": { "doc_values": true, "type": "date" }, "match_mapping_type": "date" } }, { "string_fields": { "mapping": { "index": "not_analyzed", "type": "string" }, "match": "*", "match_mapping_type": "string" } } ], "_all": { "enabled": false } } }, "aliases": {} }
input{ file{ #初始化全量导入 start_position => "beginning" #统一的storm的日志目录 path=> ["/data/logs/jstorm/**/*.log"] #排除的路径 exclude =>["*gc*","*log_monitor*"] #指定文件偏移量存储的文件 sincedb_path => "./sincedb" #配置多行数据收集(针对异常) codec => multiline { #类似两个info之间的所有数据是一行数据 pattern => "^\[%{LOGLEVEL:loglevel}" #true代表是两个loglevel之间的数据 #false代表两个异常之间的数据,跟上面的相反 negate=> true #后一条的数据前面所有的,都属于这整条数据 what => "previous" } } } filter { #使用gork直接获取日志级别和时间 grok { match =>{"message"=>"%{LOGLEVEL:loglevel}\s*%{TIMESTAMP_ISO8601:time} "} } # 转化日志时间为收集的时间,并移除无用的字段 date{ match => ["time","yyyy-MM-dd HH:mm:ss.SSS","yyyy-MM-dd HH:mm:ss","ISO8601"] remove_field => [ "time","@version" ] } # 这个地方可以对一些数据做过滤 # if [loglevel] == "DEBUG" { # drop { } # } } #输出到es的配置 output{ elasticsearch{ #设置索引名 index => "jstorm_pro%{+YYYY-MM}" hosts=> ["192.168.8.5:9200","192.168.8.6:9200","192.168.8.7:9200"] #关闭logstash自动管理模块 manage_template => false #指定模板名为jstrom template_name => "jstorm" #设置flush的数量 flush_size => 3000 } # 调试控制台输出 # stdout { codec => rubydebug } }
启动脚本:start_jstorm.sh nohup bin/logstash -f config/jstorm.conf &> jstorm_logstash.log & echo $! >jstorm_logstash_pid& 关闭脚本:stop_jstorm.sh kill -9 `cat jstorm_logstash_pid`