elk-安装配置使用-进阶篇logstash高级配置

logstash上篇已经说过了是用于在elk系统中是充当一个管道的作用,用来将filebeat中的数据传输到elasticsearch中。

其实logstash还可以做一件事,设置elasticsearch的index、targer、field(索引、目标、字段),你可以做一个简单的理解索引是数据库,目标是表,字段就是字段咯,那么设置这些有什么用呢?

1.搜索日志的时候可以用了做查询条;2.可以用kibana做分析图表。

搜索日志的时候可以用了做查询条

可以用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可以很方便的调试

grok语法调试工具

这一天有个日志文件的分享需求,解析日志文件中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

猜你喜欢

转载自blog.csdn.net/lovelyesz/article/details/86591322
今日推荐