国内优秀的设计网站推荐,phpcms律师网站源码大气律师事务所模板,怎样在wordpress里面调出菜单,python基础教程第3版大家好#xff0c;我是蓝胖子#xff0c;之前在构建服务监控实践那个系列里#xff0c;有提到用logstash来做日志的收集#xff0c;但是对于logstash的配置文件语法没有做很详细的介绍#xff0c;今天就来详细聊聊logstash配置文件的语法。 很多时候一门新框架的配置都会有… 大家好我是蓝胖子之前在构建服务监控实践那个系列里有提到用logstash来做日志的收集但是对于logstash的配置文件语法没有做很详细的介绍今天就来详细聊聊logstash配置文件的语法。 很多时候一门新框架的配置都会有自己独有的配置文件格式是先简单了解配置文件语法结构能够让自己更加系统的掌控新框架的各项配置。
文件结构
先来看看logstash的配置文件结构配置文件分为3部分input输入filter过滤output输出。配置文件是以{} 来定义区段的。如下
input { }
filter { }
output { }顾名思义它们分别表示logstash的输入来源输入来源可以是文件filebeat等等。filter则是定义对输入源内容进行二次处理过滤提取等等。outpout则是将处理后的内容重新输出到其他组件比如elasticsearch或者通过http接口输出到自定义服务中。
插件
在每一个区段内可以引入logstash的插件插件的配置同样也是用{}包裹起来的。如下我在input区域内部定义了stdin和syslog插件。
input { stdin {} syslog {} }不过通常在filebeat和logstash搭配使用时通常是将logstash的输入来源定义为filebeat的插件,如下
input {beats {port 5044}
}而filebeat的配置文件中则是将输出源设置为logstash,如下是filebeat的部分配置文件示例
output.logstash: hosts: 192.168.0.2:5054不同的插件具体有哪些配置有哪些插件可以使用参考官方文档 https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html
语法规则
介绍了配置文件的结构后我们来看看配置文件的语法规则。
声明赋值变量
在配置文件中赋值一个变量使用的是符号像前面提到把输入源定义为filebeat时就将port变量赋值为5044了。 port 5044除了数值类型logstash还会有字符串布尔数组hash类型它们写法如下
字符串类型
host hostname布尔类型
debug true数组类型
match [datetime, UNIX, ISO8601]hash类型
options { key1 value1, key2 value2 }引用变量
声明赋值完变量后如何引用呢在logstash中是通过[]对变量进行引用如下,我声明了一个变量debug, 然后引用它。
filter {debug true
}
output {if [debug]true {...}
}如果是那种结构体类型比如json或者hash结构那么可以使用多重[]得到其值如下
output {options { key1 value1, key2 value2 }if [options][key1]2 {...}
}内插变量
logstash还支持内插变量如下我在使用elasticsearch插件时需要定义输出的索引名称这个名称是根据日志来源中不同的内容建立不同的索引名称。[fields][log_type]引用的则是出入来源中的变量名。
output {elasticsearch {hosts [http://elasticsearch:9200]index easymonitor-%{[fields][log_type]}-%{yyyy.MM.dd}}
}条件判断
其实在介绍变量引用的时候你应该已经看到if语句除此以外if else语句也是支持的。如下所示
if _grokparsefailure not in [tags] {...
} else if [status] !~ /^2\d\d/ and [url] /noc.gif {...
} else { ...
}logstash支持的判断表达式包括
比较大小: , !, , , , ·
正则: ~, !~
包含关系: in, not in
布尔表达式: and, or, nand, xor
对表达式取反操作: !表达式注意logstash是不支持 和 || 表示并且和或关系的应该用and 和or代替。
条件表达式定义多个输出源
使用条件表达式在条件表达式中定义不同的输出插件达到根据不同内容输出到不同组件的目的以下是配置案例通过判断日志的等级等级为error或者日志类型是es的日志时则输出到报警服务中。
output {elasticsearch {hosts [http://elasticsearch:9200]index easymonitor-%{[fields][log_type]}-%{yyyy.MM.dd}}if [loglevel] Error or [fields][log_sub_type]es {http {http_method posturl http://192.168.0.2:36060/alert_log}}
}总结
logstash的配置文件语法还算是很简单的灵活的使用条件表达式可以定义多个输出源想要掌握logstash更多的配置还是要去官网掌握一些插件的用法不过在看懂语法的基础上学习插件的用法就是水到渠成的事情了。