Вопрос или проблема
Я использую последнюю версию ELK Stack и у меня установлен Filebeat на разных серверах. Я использую различные модули Filebeat для отправки логов. Учитывая, что каждый модуль обрабатывает конфигурацию пути к лог-файлам, как мне добавить пользовательские поля или теги в качестве метаданных в зависимости от типа лога или источника лога, чтобы затем фильтровать их в Kibana?
В случае доступа к серверу приложений в GlassFish я создал вход, который включает конфигурацию: путь, поля, теги из /etc/filebeat/filebeat.yml, и это работает. Я понимаю, что при включении модулей не обязательно указывать путь логов в входах filebeat.yml.
Но если я использую другой модуль (system, mysql, postgres, apache, nginx и т. д.) для отправки записей в Logstash с помощью Filebeat, как мне вставить пользовательские поля или теги так же, как я делаю в filebeat.yml при конфигурации? Записи в пути логов? Поскольку каждый модуль обрабатывает свою собственную конфигурацию по умолчанию, где даже указывается путь к лог-файлам. Для этого мне нужно каким-то образом условно определить регистрацию (apache, system, mysql, access.log, error.log, ip / hostname, приложение), к которому я обращаюсь, чтобы вставить пользовательские поля, которые я смогу использовать для фильтрации позже в Kibana.
Я столкнулся с такой же проблемой, решил ее с помощью модулей и конвейера обработки с входом логов.
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"
Вам нужно загрузить конвейер обработки из модуля, конечно.
Также вы можете изменить настройки модуля nginx.
У меня были такие же требования, поэтому я изменил конфигурацию модуля nginx.
Он находится в этой папке (пример для filebeat 7.3.1)
access log
./filebeat/module/nginx/access/config/nginx-access.yml
error log
./filebeat/module/nginx/error/config/nginx-access.yml
добавьте теги в файл конфигурации yml
type: log
paths:
{{ range $i, $path := .paths }}
- {{$path}}
{{ end }}
exclude_files: [".gz$"]
#### ТЕГИ ЗДЕСЬ!!!!
tags: ["nginx", "anythinguwant"]
processors:
- add_locale: ~
Для справки, следующее работает для меня (версия 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"
Ответ или решение
Для добавления пользовательских полей или тегов в конфигурацию Filebeat с использованием модулей, чтобы различать источники логов, можно воспользоваться настройками, которые предоставляет Filebeat для каждого модуля. Ниже я опишу несколько подходов для решения данной задачи.
1. Использование Конфигурационных Файлов Модулей
Каждый модуль Filebeat имеет свою конфигурацию, которая находится в каталоге /usr/share/filebeat/modules.d/
. Вы можете внести изменения в соответствующий файл конфигурации модуля (например, nginx.yml
, mysql.yml
и т.д.) для добавления пользовательских полей или тегов.
Пример для модуля nginx:
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log*"]
input:
fields:
custom.event.application: "nginx"
custom.event.channel: "access"
error:
enabled: true
var.paths: ["/var/log/nginx/error.log*"]
input:
fields:
custom.event.application: "nginx"
custom.event.channel: "error"
В этом примере вы добавляете пользовательские поля custom.event.application
и custom.event.channel
для доступа и ошибок nginx. Эти поля будут доступны для фильтрации в Kibana.
2. Настройка Пользовательских Полей в filebeat.yml
Если вы хотите добавить пользовательские поля или теги для всех логов, вы можете использовать глобальную секцию fields
в файле filebeat.yml
. Это добавит указанные поля ко всем событиям, отправляемым Filebeat.
Пример:
fields:
env: "production"
application: "my-app"
filebeat.modules:
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log*"]
error:
enabled: true
var.paths: ["/var/log/nginx/error.log*"]
- module: mysql
enabled: true
# остальные настройки
Все события из nginx и mysql теперь будут содержать поля env
и application
.
3. Использование Процессоров
Filebeat также предоставляет возможность использовать процессоры для добавления полей или тегов до отправки логов в Logstash или Elasticsearch. Пример:
filebeat.modules:
- module: nginx
access:
enabled: true
var.paths: ["/var/log/nginx/access.log*"]
input:
processors:
- add_fields:
target: ''
fields:
custom.event.application: "nginx"
custom.event.channel: "access"
- module: mysql
enabled: true
input:
processors:
- add_fields:
target: ''
fields:
custom.event.application: "mysql"
Заключение
Для добавления пользовательских полей и тегов в модули Filebeat можно воспользоваться настройками модулей или использовать глобальные поля и процессоры. После внесения изменений важно перезагрузить Filebeat, чтобы изменения вступили в силу. Затем вы сможете фильтровать логи в Kibana на основе добавленных вами полей и тегов.
Убедитесь, что вы проверяете документацию Filebeat по мере обновления для получения самой последней информации о конфигурации и возможностях.