我正在使用最新版本的 ELK Stack,并在不同的服务器上安装了 Filebeat。我使用不同的 filebeat 模块来发送日志。考虑到每个模块处理日志文件的路径配置。我如何根据要添加的日志类型或日志源来添加自定义字段或标签作为元数据,然后使用 kibana 进行过滤?
在访问 glassfish 中的应用程序服务器时,它创建了一个包含配置的输入:来自 /etc/filebeat/filebeat.yml 的路径、字段、标签,并且它可以工作。我理解,启用模块时,不需要在 filebeat.yml 的输入中包含日志的路径
但是,如果我使用不同的模块(系统、mysql、postgres、apache、nginx 等)通过 filebeat 将记录发送到 logstash:我该如何以与配置时在 filebeat.yml 中相同的方式插入自定义字段或标签?记录路径中的条目?由于每个模块默认处理自己的配置,它甚至指示日志文件的路径。为此,我需要以某种方式有条件地检测我正在访问的注册表(apache、系统、mysql、access.log、error.log、ip / hostname、应用程序)以插入自定义字段,我可以稍后在 kibana 中使用这些字段进行过滤。
答案1
遇到了同样的问题,通过使用带有日志输入的模块摄取管道解决了它。
filebeat.inputs:
- type: log
paths:
- "/var/log/nginx/access.log*"
fields:
level: "INFO"
application: "nginx"
fields_under_root: true
pipeline: "filebeat-7.3.0-nginx-access-default"
当然,您需要从模块加载采集管道
答案2
您也可以修改 nginx 模块设置。
我有同样的需求,所以我修改了 nginx 模块配置。
它位于此文件夹下(例如 7.3.1 filebeat)
访问日志
./filebeat/module/nginx/access/config/nginx-access.yml
错误日志
./filebeat/module/nginx/error/config/nginx-access.yml
在 yml 配置文件中添加标签
type: log
paths:
{{ range $i, $path := .paths }}
- {{$path}}
{{ end }}
exclude_files: [".gz$"]
#### TAGS HERE!!!!
tags: ["nginx", "anythinguwant"]
processors:
- add_locale: ~
答案3
为了记录,以下内容对我有用(elk stack 版本 7.10.2,文件 /usr/share/filebeat/modules.d/nginx.yml):
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log*"]
input:
fields:
custom.event.application: "nginx"
custom.event.channel: "access"