Logstash通过管道完成数据的采集与处理,管道配置中包含input、output和filter(可选)插件,input和output用来配置输入和输出数据源、filter用来对数据进行过滤或预处理。本文为您介绍阿里云Logstash管道配置文件的详细说明。
本文内容参考了Logstash官方文档,最新内容请参见Structure of a Config File。
您可以通过配置文件管理方式修改Logstash的配置文件,完成数据的采集与处理。详细信息,请参见通过配置文件管理管道。
配置文件结构
Logstash的管道配置文件对每种类型的插件都提供了一个单独的配置部分,用于处理管道事件。
input {
...
}
filter {
...
}
output {
...
}
每个配置部分可以包含一个或多个插件。例如,指定多个filter插件,Logstash会按照它们在配置文件中出现的顺序进行处理。
重要
- 如果管道配置中有类似last_run_metadata_path的参数,您需要将其设置为Logstash服务的文件路径。目前阿里云Logstash后端开放了
/ssd/1/<Logstash实例ID>/logstash/data/
路径供您测试使用,且该目录下的数据不会被删除,因此在使用时,请确保磁盘有充足的使用空间。指定参数路径后,Logstash会在对应路径下自动生成文件,但不支持查看文件内容。 - 为了提升安全性,如果在配置管道时使用了JDBC驱动,需要在jdbc_connection_string参数后面添加
allowLoadLocalInfile=false&autoDeserialize=false
,否则当您在添加Logstash配置文件的时候,调度系统会抛出校验失败的提示,例如jdbc_connection_string => "jdbc:mysql://xxx.drds.aliyuncs.com:3306/<数据库名称>?allowLoadLocalInfile=false&autoDeserialize=false"
。
插件配置
插件的配置包括插件名称,以及名称中包含的一组插件配置属性。例如,以下input部分包含了两个beats插件,每个beats插件中都配置了port和host属性。
input {
beats {
port => 8000
host => "118.11.xx.xx"
}
beats {
port => 8001
host => "192.168.xx.xx"
}
}
值类型
配置插件时,您可以设置插件的值类型,例如布尔值、列表、哈希等。插件支持的值类型如下。
数组
目前不推荐使用此类型,而建议使用标准类型(例如String),使用插件定义
:list => true
属性,以便更好地进行类型检查。数组类型目前被用于处理不需要类型检查的哈希表或混合类型列表,示例如下。 users => [ {id => 1, name => bob}, {id => 2, name => jane} ]
列表
列表本身不具备类型特征,但其所包含的属性具有类型特征,这样就可以键入检查多个值。您可以通过列表的形式,在声明参数时指定启用检查
:list => true
,示例如下。 path => [ "/var/log/messages", "/var/log/*.log" ]
uris => [ "http://elastic.co", "http://example.net" ]
以上示例,将path配置为一个列表,该列表中包含2个字符串。uris也为一个列表,如果所包含的URL无效,会导致事件处理失败。
布尔类型
布尔类型的值必须为true或者false,且不需要引号标注,示例如下。
ssl_enable => true
字节类型
字节类型的字段,代表有效字节单位的字符串字段。这是在插件选项中,声明特定大小的便捷方法。字节类型支持十进制(k M G T P E Z Y)和二进制(Ki Mi Gi Ti Pi Ei Zi Yi)。二进制单位为base-1024,十进制单位为base-1000。该字段不区分大小写,并且支持值和单位之间的空格。如果未指定单位,则整数字符串表示字节数。示例如下。
my_bytes => "1113" # 1113 bytes
my_bytes => "10MiB" # 10485760 bytes
my_bytes => "100kib" # 102400 bytes
my_bytes => "180 mb" # 180000000 bytes
编解码器
编解码器是对数据进行编码或者解码后的目标数据类型,在输入和输出插件中都可以使用。输入编解码器提供了在数据输入之前对其进行解码的功能。输出编解码器,提供了在数据输出之前对其进行编码的功能。使用输入或输出编解码器后,您不需要在Logstash管道中单独使用过滤器。
您可以参考官方提供的编译解释器插件文档,查找可用的编解码器。示例如下。
codec => "json"
哈希
哈希格式是指定键值对的集合,例如"field1" => "value1"
。
重要 多个键值对使用空格进行分隔,而不是逗号。
示例如下。
match => {
"field1" => "value1"
"field2" => "value2"
...
}
# 单独一行,多个键值对使用空格进行分隔,而不是逗号。
match => { "field1" => "value1" "field2" => "value2" }
数值
必须是有效的数值(浮点数或整数)。示例如下。
port => 33
密码
密码是一个没有记录或打印的单值字符串。示例如下。
my_password => "password"
URI
URI可以是任何内容,例如完整的URL或者简单的标识符(如foobar)。如果URI中包含类似
http://user:paas@example.net
的密码,那么密码部分不会被记录或打印。示例如下。 my_uri => "http://foo:bar@example.net"
路径
路径是代表有效操作系统路径的字符串。示例如下。
my_path => "/tmp/logstash"
字符串
字符串必须是单个字符序列,且必须用双引号或单引号括起来。
转义序列
默认情况下,Logstash不启用转义序列。如果您希望在带引号的字符串使用转义序列,需要在logstash.yml中设置
config.support_escapes: true
。设置后,字符串(双精度和单精度)将会按照下表进行转义。转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\r | 回车 | 013 |
\n | 换行 | 010 |
\t | 跳到下一个Tab位置 | 009 |
\\ | 反斜杠 | 092 |
\" | 双引号 | 034 |
\' | 单引号 | 039 |
示例如下。
name => 'It\'s a beautiful day'
注释
注释以
#
开头,不需要在行首。示例如下。# 这是一条注释。
input { # 您也可以在行内添加注释。
# ...
}