Добрый день! Кластер Elasticsearch запущен из docker-compose. Посоветуйте, возможно ли собирать логи кластера и логи audit logging из контейнеров с помощью Filebeat? Или стоит пробрасывать логи наружу и собирать традиционным способом?
У меня немного похожая конфигурация.
Только логи собираю не с кластера ElasticSearch, а с контейнеров web-apps (часть контейнеров - apache, часть - nginx).
Вот так запущен filebeat на каждом хосте:
version: '3.4'
services:
webserver:
image: docker.elastic.co/beats/filebeat:7.10.0
container_name: filebeat
volumes:
- /etc/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- /var/lib/filebeat:/usr/share/filebeat/data:rw
restart: unless-stopped
user: root
command: filebeat -e -strict.perms=false
network_mode: bridge
/var/lib/filebeat:/usr/share/filebeat/data
- это чтобы не терялись файлы registry
А вот такой конфиг filebeat.yml
:
filebeat.autodiscover:
providers:
- type: docker
templates:
- condition:
contains:
docker.container.name: "nginx-"
config:
- module: nginx
access:
input:
type: container
paths:
- /var/lib/docker/containers/${data.docker.container.id}/*.log
stream: stdout
fields.host.name: ub20azure
fields_under_root: true
error:
input:
type: container
paths:
- /var/lib/docker/containers/${data.docker.container.id}/*.log
stream: stderr
fields.host.name: ub20azure
fields_under_root: true
- condition:
contains:
docker.container.name: "apache-"
config:
- module: apache
access:
input:
type: container
paths:
- /var/lib/docker/containers/${data.docker.container.id}/*.log
stream: stdout
fields.host.name: ub20azure
fields_under_root: true
error:
input:
type: container
paths:
- /var/lib/docker/containers/${data.docker.container.id}/*.log
stream: stderr
fields.host.name: ub20azure
fields_under_root: true
- condition:
equals:
docker.container.name: "nginx-proxy"
config:
- type: container
include_lines: ['.*\[error\].*']
exclude_lines: ['.*xmlrpc.php.*']
paths:
- /var/lib/docker/containers/${data.docker.container.id}/*.log
fields.host.name: ub20azure
fields_under_root: true
#============================= Elastic Cloud ==================================
cloud.id: ******
cloud.auth: ******
#================================ Processors =====================================
# Configure processors to enhance or manipulate events generated by the beat.
processors:
- add_locale: ~
host.name
приходится устанавливать "вручную" в конфиге, потому что без этой строчки, host.name будет некое эфемерное ID докер-контейнера, которое будет изменяться каждый при пересоздании контейнера. Поэтому:
fields.host.name: ub20azure
Сегодня наткнулся подсказку в Github:
Если контейнер с filebeat запускать с network_mode: host
(или --net=host
в коммандной строке),
то host.name будет приходить с хостовой системы, и тогда fields.host.name
и fields_under_root
не нужны.
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.