6.2. 管道结构
Logstash 管道配置文件对于要添加到事件处理管道中的每种类型的插件都有一个单独的区块(section)。举个例子:
# 这里是注释,你可以使用注释来描述配置的各部分
input {
...
}
filter {
...
}
output {
...
}
每个区块(section)包含了一个或多个插件的配置项。如果你指定了多个过滤插件,它们将按照在配置文件中出现的顺序进行应用。如果你指定了多个输出插件,事件也会按照在配置文件中出现的顺序,连续地发送到各个目标。
小技巧:当你想将管道部署到本地机器之外时,使用
pipeline.id
设置将管道配置文件添加到logstash.yml
文件。当你打算部署多个管道时,请在pipelines.yml
文件中创建和配置管道。
插件配置
插件配置包含插件名,插件名后面紧跟一个插件设置相关的区块。举个例子:下面这个输入区块配置了两个文件输入插件:
input {
http {
port => 3333
tags => gateway
}
http {
port => 4444
tags => billing
}
}
在这个例子中,每个文件输入插件中都配置了两个配置项:port
和 tags
。
你可以配置的配置项取决于插件的类型。想了解关于每个插件的更多信息,可以参考 输入插件、输出插件、过滤插件 和 解码器插件。
值类型
插件可以要求设置的值必须为特定的类型,例如布尔、列表或者哈希。目前支持以下的值类型。
数组
这种类型现在大多不被推荐使用,为了更方便检查类型,我们通常使用像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
,列表指定了元素为字符串类型,并且每个元素都是由三个字符串组成。你也可以将 uris
参数配置为 URIs
类型的列表,这样任何无效的 URI 值传入都会导致验证失败。
布尔
布尔类型必须是 true
或者 false
的一种。注意 true
和 false
关键字不包含在引号中。
示例:
ssl_enable => true
字节
字节字段是一个字符串字段,代表了一个有效的字节单位。在你的插件选项中字节类型是声明指定字节大小的便捷方式。目前支持国际单位制(k M G T P E Z Y)和二进制单位(Ki Mi Gi Ti Pi Ei Zi Yi)。二进制是基于 1024 单位而国际单位制是基于 1000 单位的。这个字段是大小写不敏感的而且接受值和单位间存在空格。如果没有指定单位,整数字符串代表字节数量。
my_bytes => "1113" # 1113 字节
my_bytes => "10MiB" # 10485760 字节
my_bytes => "100kib" # 102400 字节
my_bytes => "180 mb" # 180000000 字节
译码器
译码器是用于表达数据的 Logstash 译码器名称。译码器可以用于输入和输出插件。
输入译码器可以很便捷地在数据在流入输入插件前对数据进行解码。而输出译码器可以在数据离开输出插件前很便捷地对数据进行编码。使用输入或输出译码器类型可以代替在 Logstash 管道中使用单独的过滤器。
codec => "json"
哈希
哈希类型是键值对的集合,格式为:"字段" => "值"
。注意多健值对条目通过空白符而非逗号分隔。
示例:
match => {
"field1" => "value1"
"field2" => "value2"
...
}
# 或者放在一行中,条目间没有逗号
match => { "field1" => "value1" "field2" => "value2" }
数字
数字类型必须是有效的数字值(浮点数或者整数)。
示例:
port => 33
密码
密码类型是一个单一的字符串,并且不能够被记录到日志或打印出来。
示例:
my_password => "password"
链接
链接类型可以是类似 http://elastic.co/
的完整链接,也可以是简单的类似 foobar
的标识符。如果链接中包含密码(例如:http://user:pass@example.net
),则链接中的密码部分不会被记录到日志或打印出来。
示例:
my_uri => "http://foo:bar@example.net"
路径
路径类型是一个代表有效的操作系统路径的字符串。
示例:
my_path => "/tmp/logstash"
字符串
字符串类型必须是单一的字符序列。注意字符串值必须包含在单引号或者双引号中。
转义序列
默认情况下,转移序列不启用。如果你想在引号包含的字符串中使用转义序列,你需要在 logstash.yml
文件中设置 config.support_escapes: true
选项。当设置为 true
时,引号包含的字符串(双引号或者单引号)将开启如下转换规则:
文本 | 结果 |
---|---|
\r | 回车符 (ASCII 13) |
\n | 换行符 (ASCII 10) |
\t | 制表符 (ASCII 9) |
\ | 反斜杠 (ASCII 92) |
" | 双引号 (ASCII 34) |
' | 单引号 (ASCII 39) |
示例:
name => "Hello world"
name => 'It\'s a beautiful day'
字段引用
字段引用类型是特殊的字符串值,用于表示事件中字段的路径,例如通过 @timestamp
或者 [@timestamp ]
引用顶级字段,或者通过 [client][ip]
的方式访问嵌套的字段。深入探讨字段引用 一文提供了有关字段引用结构的详细信息。当作为配置选项提供时,字段引用需要被引号包含并且必须按照与 String
相同的规则转义特殊字符。
注释
注释和 perl、ruby、python 等语言的注释格式相同。注释都是以一个 #
字符开头,并且不需要一定放在一行的起始位置。示例如下:
# 这是一行注释
input { # 注释也可以出现在行尾位置
# ...
}
推荐文章: