介绍
Logstash
是一个日志管理工具,它从各种来源收集数据,实时转换数据,并将其发送到所需的目标。它通常用作Elasticsearch的数据管道,Elasticsearch是一个开源分析和搜索引擎。
Filebeat
是一个轻量级的发货工具,用于转发和集中日志数据。安装为代理后,它监控您指定的日志文件或位置,收集日志事件,并将其转发进行索引,通常是发送到Elasticsearch或Logstash。
现在,Manticore 也支持将Logstash和Filebeat用作处理管道。这允许收集和转换的数据与发送给Elasticsearch的方式一样被发送到Manticore。目前,支持的Logstash版本 >= 7.6 和 Filebeat版本 >= 7.10。
让我们检查一个用于索引 dpkg.log
的Logstash配置文件的简单示例,dpkg.log
是Debian包管理器的标准日志文件。日志本身具有简单的结构,如下所示:
2023-05-31 10:42:55 status triggers-awaited ca-certificates-java:all 20190405ubuntu1.1
2023-05-31 10:42:55 trigproc libc-bin:amd64 2.31-0ubuntu9.9 <none>
2023-05-31 10:42:55 status half-configured libc-bin:amd64 2.31-0ubuntu9.9
2023-05-31 10:42:55 status installed libc-bin:amd64 2.31-0ubuntu9.9
2023-05-31 10:42:55 trigproc systemd:amd64 245.4-4ubuntu3.21 <none>
Logstash配置
这是一个Logstash配置的示例:
input {
file {
path => ["/var/log/dpkg.log"]
start_position => "beginning"
sincedb_path => "/dev/null"
mode => "read"
exit_after_read => "true"
file_completed_action => "log"
file_completed_log_path => "/dev/null"
}
}
output {
elasticsearch {
index => " dpkg_log"
hosts => ["http://localhost:9308"]
ilm_enabled => false
manage_template => false
}
}
请注意,在继续之前,需要解决一个关键的警告:Manticore 不支持Elasticsearch的日志模板管理和索引生命周期管理功能。由于这些功能在Logstash中默认启用,因此需要在配置中明确禁用。此外,output
配置部分中的 hosts
选项必须对应于Manticore的HTTP监听端口(默认是 localhost:9308
)。
Logstash结果
按照上述描述调整配置后,您可以运行Logstash,来自dpkg日志的数据将被传递到Manticore并正确索引。
这是创建的表的结果架构以及插入文档的示例:
mysql> DESCRIBE dpkg_log;
+------------------+--------+---------------------+
| Field | Type | Properties |
+------------------+--------+---------------------+
| id | bigint | |
| message | text | indexed stored |
| @version | text | indexed stored |
| @timestamp | text | indexed stored |
| path | text | indexed stored |
| host | text | indexed stored |
+------------------+--------+---------------------+
mysql> SELECT * FROM dpkg_log LIMIT 1\G
*************************** 1. row ***************************
id: 7280000849080746110
host: logstash-db848f65f-lnlf9
message: 2023-04-12 02:03:21 status unpacked libc-bin:amd64 2.31-0ubuntu9
path: /var/log/dpkg.log
@timestamp: 2023-06-16T09:23:57.405Z
@version: 1
Filebeat配置
收集原始数据的另一种方式是使用Filebeat代理。以下是与我们的示例dpkg日志配合使用的Filebeat配置:
filebeat.inputs:
- type: filestream
id: example
paths:
- /var/log/dpkg.log
output.elasticsearch:
hosts: ["http://localhost:9308"]
index: "dpkg_log"
allow_older_versions: true
setup.ilm:
enabled: false
setup.template:
name: "dpkg_log"
pattern: "dpkg_log"
适用于版本高于8.10的Filebeat配置
版本高于8.10的Filebeat默认启用输出压缩功能。这就是为什么必须将compression_level: 0
选项添加到配置文件中以提供与Manticore的兼容性:
filebeat.inputs:
- type: filestream
id: example
paths:
- /var/log/dpkg.log
output.elasticsearch:
hosts: ["http://localhost:9308"]
index: "dpkg_log"
allow_older_versions: true
compression_level: 0
setup.ilm:
enabled: false
setup.template:
name: "dpkg_log"
pattern: "dpkg_log"
Filebeat结果
当您使用此配置运行Filebeat时,日志数据将被发送到Manticore并正确索引。这是由Manticore创建的表的结果架构以及插入文档的示例:
mysql> DESCRIBE dpkg_log;
+------------------+--------+--------------------+
| Field | Type | Properties |
+------------------+--------+--------------------+
| id | bigint | |
| @timestamp | text | indexed stored |
| message | text | indexed stored |
| log | json | |
| input | json | |
| ecs | json | |
| host | json | |
| agent | json | |
+------------------+--------+--------------------+
mysql> SELECT * FROM dpkg_log LIMIT 1\G
*************************** 1. row ***************************
id: 7280000849080753116
@timestamp: 2023-06-16T09:27:38.792Z
message: 2023-04-12 02:06:08 status half-installed libhogweed5:amd64 3.5.1+really3.5.1-2
input: {"type":"filestream"}
ecs: {"version":"1.6.0"}
host: {"name":"logstash-db848f65f-lnlf9"}
agent: {"ephemeral_id":"587c2ebc-e7e2-4e27-b772-19c611115996","id":"2e3d985b-3610-4b8b-aa3b-2e45804edd2c","name":"logstash-db848f65f-lnlf9","type":"filebeat","version":"7.10.0","hostname":"logstash-db848f65f-lnlf9"}
log: {"offset":80,"file":{"path":"/var/log/dpkg.log"}}
结论
因此,您现在可以轻松地使用Manticore结合Logstash或Filebeat对日志数据进行索引。Manticore与Logstash和Filebeat的集成为轻松索引日志数据打开了新的机会。