logstash上篇已经说过了是用于在elk系统中是充当一个管道的作用,用来将filebeat中的数据传输到elasticsearch中。
其实logstash还可以做一件事,设置elasticsearch的index、targer、field(索引、目标、字段),你可以做一个简单的理解索引是数据库,目标是表,字段就是字段咯,那么设置这些有什么用呢?
1.搜索日志的时候可以用了做查询条;2.可以用kibana做分析图表。
修改配置logstash的文件
filter {
if [message] =~ "Hibernate:*" {
drop { }
}
if "response" in [message] {
grok {
match => {"message" => "%{TIMESTAMP_ISO8601} %{LOGLEVEL} %{NUMBER} --- \[%{DATA}\] %{GREEDYDATA}: client\[%{DATA:device}\] response: {PATH=%{UNIXPATH:uri}, HTTP_METHOD=%{WORD}}, use time: %{NUMBER:usetime_0:int}ms"}
}
}
if ":url:http:" in [message] {
grok {
match => {"message" => "%{TIMESTAMP_ISO8601} %{LOGLEVEL} %{NUMBER} --- \[%{DATA}\] %{GREEDYDATA}: 资金存管接口-\[%{DATA:requestid}\]-响应:url:http://%{URIHOST:urihost}%{URIPATH:uripath} , result:%{GREEDYDATA:param}, 耗时:%{NUMBER:usetime:int}ms"
}
}
}
json {
source => "param"
target => "param_json"
}
if [param] {
ruby {
code => "
kv=event.get('param_json')
kv.each do |k,v|
if k != 'data'
event.set(k,v)
end
end"
remove_field => ["param_json","param"]
remove_tag => ["param_json","param"]
}
}
}
filter中有很多插件,也有自己的语法
logstash中有很多默认的field,message是日志文件的内容
grok是用来设置日志格式来提取field,利用%{XXXX:a}这种语法
“XXXX”是一套封装好的匹配格式参考:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
”a“就是自定义的字段名称(注意不要与默认的字段名称重复),还可以在”a“后加上”:int“这个是设置字段格式(默认的是string),官网上说只支持int和float两种。
kibana中有一个功能叫Grok Debugger可以很方便的调试
这一天有个日志文件的分享需求,解析日志文件中json中的某个公参字段,其他的字段就很随意了,没有任何价值了
json配置source设置需要解析的字段名称,target是别名
ruby是一种一直高级语言,作为logstash插件可以更加灵活的过滤操作日志文件
ruby {
code => "
kv=event.get('param_json')
kv.each do |k,v|
if k != 'data'
event.set(k,v)
end
end"
remove_field => ["param_json","param"]
remove_tag => ["param_json","param"]
}
event是logstash中的内置对象,set(“字段名称”,"值"),其中的值一般情况都是另一个字段的别名,不用担心会出现两个不同名字的相同内容的字段,使用每个插件中都有的remove_field就可以去掉。
作为高级语言if for 语句是必不可少的,因此你可以灵活的个性的操作你所需要的字段。
总结
在从没听过elk到能够熟练的使用kibana制作统计图表,我花了将近一个月时间(天资愚钝+工作繁忙),其中走了不少的弯路,作为一名开发对linux系统的不熟悉成了最大的瓶颈,期间不止一次的想放弃,最后还是兴趣和好奇驱使着我克服了这些。
其实elk中还有很多其他公司开发的一些好用的插件可以使用(开源的优势),比如elasticAlert可以实时监控并发送邮件进行报警,后来elastic又出来了一种插件watcher,不过得安装listen