Logstash 是一个可以传输和处理你的日志、事务或其他数据的功能强大的工具,可与各种部署集成。 它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据。
工作原理
Logstash 事件处理有三个阶段:inputs -> filters -> outputs。
Logstash 是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。
设置
logstash.yml 设置项说明参考:https://www.elastic.co/guide/en/logstash/7.17/logstash-settings-file.html
配置
logstash 启动时需要指定配置文件,按照配置文件中的参数去覆盖默认设置文件(logstash.yml)中的设置。示例配置文件:logstash-sample.conf
配置文件结构
Logstash 主要有三个工作阶段 input 、filter、output。而 logstash 配置文件文件结构也与之相对应:
input {}
filter {}
output {}
每个部分都包含一个或多个插件的配置选项。如果指定了多个过滤器,则会按照它们在配置文件中的显示顺序应用它们。
值类型
一个插件可以要求设置的值是一个特定的类型,比如布尔值,列表或哈希值。以下值类型受支持。
Array
users => [ {id => 1, name => aaa}, {id => 2, name => bbb} ]
Lists
path => [ "/data/logs/demo", "/data/logs/*.log" ]
Boolean
ssl_enable => true
Bytes
my_bytes => "1113" # 1113 bytes
my_bytes => "10MiB" # 10485760 bytes
my_bytes => "100kib" # 102400 bytes
my_bytes => "180 mb" # 180000000 bytes
Codec
codec => "json"
Hash
match => {
"field1" => "value1"
"field2" => "value2"
...
}
Number
port => 33
插件配置
Input
必要元素,负责从数据源采集数据。
常用的输入为:
- file:从文件系统的文件中读取,类似于 tail -f 命令
- syslog:在514端口上监听系统日志消息,并根据RFC3164标准进行解析
- redis:从redis service中读取
- beats:从filebeat中读取
更多详情请见:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
Filters
可选元素,数据中间处理,对数据进行操作,将数据修改为指定的格式或内容。
常用的过滤器为:
- grok:解析任意文本数据,grok 是 logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。
- mutate:对字段进行转换。例如对字段进行删除、替换、修改、重命名等。
- drop:丢弃一部分events不进行处理。
- clone:拷贝 event,这个过程中也可以添加或移除字段。
- geoip:添加地理信息(为前台kibana图形化展示使用)
更多详情请见:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
官方提供的grok表达式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
grok在线调试:https://grokdebug.herokuapp.com/
Outputs
outputs 是 logstash 处理管道的最末端的必要元素组件,主要是将数据传输到目的地。
常见的 outputs 为:
- elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。
- file:将event数据保存到文件中。
- graphite:将event数据发送到图形化组件中,一个很流行的开源存储图形化展示的组件。
更多详情请见:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
codec
codecs 是基于数据流的过滤器,它可以作为 input,output 的一部分配置。Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。
常用 codec 插件:
- json:以JSON格式对数据进行编码或解码。
- multiline:将多行文本事件(如java异常和堆栈跟踪消息)合并为单个事件。
更多详情请见:https://www.elastic.co/guide/en/logstash/current/codec-plugins.html