1. Input Plugin
1.1 从文件输入
从文件读取数据,如常见的日志文件。文件读取通常要解决几个问题:
No. | 问题 | 解决办法 |
---|---|---|
1 | 文件内容如何只被读取一次?即重启Logstash时,从上次读取的位置继续 | sincedb |
2 | 如何即时读取到文件的新内容 | 定时检查文件是否有更新 |
3 | 如何发现新文件并进行读取 | 定时检查是否有新文件生成 |
4 | 如何文件发生了归档(rotation)操作,是否影响当前的内容读取 | 不影响,被归档的文件内容可以继续被读取 |
1.1.1 logstash-input-file配置
配置:
配置项 | 说明 |
---|---|
path | 数组类型,用于知名读取的文件路径,基于glob匹配语法。 |
exclude | 数组类型,排除不想监听的文件规则,基于glob匹配语法 |
sincedb_path | 字符串类型,记录sinceddb文件路径,默认路径是当前用户的home文件夹 |
start_position | 字符串类型,可以配置为beginning/end,是否从头读取文件 |
stat_interval | 数值类型,单位为秒,定时检查文件是否有更新,默认是1秒 |
discover_interval | 数值类型,单位为秒,定时检查是否有新文件待读取,默认是15秒 |
ignore_older | 数值类型,单位为秒,扫描文件列表时,如果该文件上次更改时间超过设定的时长,则不做处理,但依然会监控是否有新内容,默认关闭 |
close_older | 数值类型,单位为秒,如果监听的文件在超过该设定时间内没有新内容,会被关闭文件句柄,释放资源,但依然会监控是否有新内容,默认3600秒,即1小时 |
1.1.2 path
例如:
/var/log/*.log
:匹配/var/log
目录下以.log
结尾的所有文件/var/log/**/*.log
:匹配/var/log
所有子目录下以.log
结尾的文件/var/log/{app1,app2,app3}/*.log
:匹配/var/log
目录下app1
,app2
,app3
子目录中以.log
结尾的文件
1.1.3 sincedb
通过logstash-input-file插件导入了一些本地日志文件时,logstash会通过一个名为sincedb的独立文件中来跟踪记录每个文件中的当前位置。这使得停止和重新启动Logstash成为可能,并让它在不丢失在停止Logstashwas时添加到文件中的行数的情况下继续运行。sincedb默认保存在当前用户的Home目录下。
在调试的时候,我们可能希望取消sincedb的记录功能,使文件每次都能从头开始读取。此时,我们可以这样来做:
input {
file {
path => ["文件路径"]
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
1.2 从HTTP输入
input {
http {
port => 端口号
}
}
1.3 从TCP输入
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 端口号
codec =<