Logstash配置使用参数详解
Logstash配置使用参数详解
Alexlogstash配置参数
- logstash条件判断参数
- ==(等于), !=(不等于), <(小于), >(大于), <=(小于等于), >=(大于等于)
- =
(匹配正则), !(不匹配正则) - in(包含), not in(不包含)
- and(与), or(或), nand(非与), xor(非或)
- ()(复合表达式), !()(对复合表达式结果取反)
命令行参数
- -f/–config :
1
制定配置文件运行
- -t/–configtest :
1
测试,用来测试logstash读取的conf文件是否能够正确的解析
- -l/–log :
1
默认输出日志到标准错误,在生产环境中你可以通过 >bin/logstash -l logs/logstash.log 命令来统一存储日志
- -w/–pipeline-workers :
1
允许filter和output的pipeline线程数量,默认是CPU核数
- -b/–pipeline-batch-size :
1
每个 Logstash pipeline 线程,在执行具体的 filter 和 output 函数之前,最多能累积的日志条数。默认是 125 条。越大性能越好,同样也会消耗越多的 JVM 内存。
- -u/–pipeline-batch-delay :
1
每个 Logstash pipeline 线程,在打包批量日志的时候,最多等待几毫秒。默认是 5 ms。
- -P/–pluginpath :
1
可以写自己的插件,然后用 bin/logstash –pluginpath /path/to/own/plugins 加载它们
- –verbose :
1
输出一定的调试日志
- –debug:
1
输出更多的调试日志,在logstash 5.0 开始,提供了logstash.yaml配置文件,可以将命令行的所有参数都通过YAML文件方式设置
input/filter/output
input
- Logstash 使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化。这个库支持 glob 展开文件路径,而且会记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。所以,不要担心 logstash 会漏过你的数据。sincedb 文件中记录了每个被监听的文件的 inode, major number, minor number 和 pos。
- 读取文件(File)
1
2
3
4
5
6
7input {
file {
path => ["/var/log/*.log", "/var/log/message"]
type => "system"
start_position => "beginning"
}
} - 相关配置:
有一些比较有用的配置项,可以用来指定 FileWatch 库的行为:
● discover_interval
logstash 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒。
● exclude
不想被监听的文件可以排除出去,这里跟 path 一样支持 glob 展开。
● close_older
一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是 3600 秒,即一小时。
● ignore_older
在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是 86400 秒,即一天。
● sincedb_path
如果你不想用默认的 $HOME/.sincedb(Windows 平台上在 C:\Windows\System32\config\systemprofile.sincedb),可以通过这个配置定义 sincedb 文件到其他位置。
● sincedb_write_interval
logstash 每隔多久写一次 sincedb 文件,默认是 15 秒。
● stat_interval
logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。
● start_position
logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 “beginning”,logstash 进程就从头开始读取,类似 less +F 的形式运行。
标准输入(stdin)
输出插件 output
- 输出到elasticsearch
1
2
3
4
5
6
7
8
9
10
11output {
elasticsearch {
hosts => ["192.168.0.2:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
flush_size => 20000
idle_flush_time => 10
sniffing => true
template_overwrite => true
}
} - 批量发送
1
在过去的版本中,主要由本插件的 flush_size 和 idle_flush_time 两个参数共同控制 Logstash 向 Elasticsearch 发送批量数据的行为。以上面示例来说:Logstash 会努力攒到 20000 条数据一次性发送出去,但是如果 10 秒钟内也没攒够 20000 条,Logstash 还是会以当前攒到的数据量发一次。默认情况下,flush_size 是 500 条,idle_flush_time 是 1 秒。这也是很多人改大了 flush_size 也没能提高写入 ES 性能的原因——Logstash 还是 1 秒钟发送一次。从 5.0 开始,这个行为有了另一个前提:flush_size 的大小不能超过 Logstash 运行时的命令行参数设置的 batch_size,否则将以 batch_size 为批量发送的大小。
- 索引名
1
2写入的 ES 索引的名称,这里可以使用变量。为了更贴合日志场景,Logstash 提供了 %{+YYYY.MM.dd} 这种写法。在语法解析的时候,看到以 + 号开头的,就会自动认为后面是时间格式,尝试用时间格式来解析后续字符串。所以,之前处理过程中不要给自定义字段取个加号开头的名字……
此外,注意索引名中不能有大写字母,否则 ES 在日志中会报 InvalidIndexNameException,但是 Logstash 不会报错,这个错误比较隐晦,也容易掉进这个坑中。 - 轮询
1
Logstash 1.4.2 在 transport 和 http 协议的情况下是固定连接指定 host 发送数据。从 1.5.0 开始,host 可以设置数组,它会从节点列表中选取不同的节点发送数据,达到 Round-Robin 负载均衡的效果。
- stdout 输出
1
2
3
4
5
6output {
stdout {
codec => rubydebug
workers => 2
}
} - 输出到文件中
1
2
3
4
5
6
7output {
file {
path => "/path/to/%{+yyyy}/%{+MM}/%{+dd}/%{host}.log.gz"
message_format => "%{message}"
gzip => true
}
} - 输出到hdfs
- 参考地址