Все beats используют библиотеку libbeat, в которой есть механизм autodiscover для различных провайдеров.
Бит подключается к сокету докера и ждет событий create
, delete
от контейнеров.
Для каждого из событий он вычитывает описание контейнера и формирует набор значений,
которые можно использовать для динамического темплейтинга в конфигурационном файле.
host
port
docker.container.id
docker.container.image
docker.container.name
docker.container.labels
{
"host": "10.4.15.9",
"port": 6379,
"docker": {
"container": {
"id": "382184ecdb385cfd5d1f1a65f78911054c8511ae009635300ac28b4fc357ce51"
"name": "redis",
"image": "redis:3.2.11",
"labels": {
"io.kubernetes.pod.namespace": "default"
...
}
}
}
}
# When using containerd as runtime, a configuration like the following one
# can be used to monitor files in containers using autodiscover.
auditbeat.autodiscover:
providers:
- type: kubernetes
host: ${NODE_NAME}
templates:
- config:
- module: 'file_integrity'
paths:
- '/run/containerd/io.containerd.runtime.v1.linux/k8s.io/${data.kubernetes.container.id}/rootfs/bin'
- '/run/containerd/io.containerd.runtime.v1.linux/k8s.io/${data.kubernetes.container.id}/rootfs/etc'
scan_at_start: false
recursive: true
Контейнеры в ECS используют файловую систему overlayfs, которую нельзя напрямую
использовать в конфигурационном файле без предварительного резолва маппинга.
# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f41347ea415 docker.elastic.co/beats/packetbeat-oss:7.10.2 "/usr/local/bin/dock…" 19 hours ago Up 19 hours ecs-tuolumne-devops2-beats-10-packetbeat-9eb08ef7f587deace801
# docker inspect 5f41347ea415 | jq '.[].GraphDriver.Data'
{
"LowerDir": "/var/lib/docker/overlay2/44e7f5efff174a4248f2edcb687a50517e7a3c446eb513ad1c092509f9950a79-init/diff:/var/lib/docker/overlay2/36c25512b05d9d2a71d1cedff04fde88e12bdf6817cc64c995c5e2836af80ca5/diff:/var/lib/docker/overlay2/fcfbe3a67485508f61678d045aacb7dd6f62ca52fc284549e50597761972b350/diff:/var/lib/docker/overlay2/8118b7b62475c350896c8ae20edaf9d209720c991f93a1fe4bcc40664416e328/diff:/var/lib/docker/overlay2/6541a66868d6dc370835bc05e5882130e391b7c7b0727710348e8ea1cc83bf2b/diff:/var/lib/docker/overlay2/dcfbd175f579abbfd3ec63cdd7144bb8f20e5dfcf1f2fa73499f8c01baad1d23/diff:/var/lib/docker/overlay2/a4bd10056dc40d1cc54b690cf0f6f6c2a6350feda2f7e4d7beaf1eff16a024df/diff:/var/lib/docker/overlay2/f38cab79e5fd86ac0886f9e80ffdc83635521df66afaf979006579395c8712f1/diff:/var/lib/docker/overlay2/010bdcedb21f9a6b8498e6d70a6310d6b2325a854eb56eefc6dc3e934fcc4990/diff:/var/lib/docker/overlay2/d549fca530398dc9d3531d1da97f1074062d2ce542c1170b9efd937c3382f125/diff:/var/lib/docker/overlay2/0605b190d09361308fa341e2de0c8d8a918a0e8956ed9beed7963fb20d78a606/diff",
"MergedDir": "/var/lib/docker/overlay2/44e7f5efff174a4248f2edcb687a50517e7a3c446eb513ad1c092509f9950a79/merged",
"UpperDir": "/var/lib/docker/overlay2/44e7f5efff174a4248f2edcb687a50517e7a3c446eb513ad1c092509f9950a79/diff",
"WorkDir": "/var/lib/docker/overlay2/44e7f5efff174a4248f2edcb687a50517e7a3c446eb513ad1c092509f9950a79/work"
}
Нас интересует значение MergedDir
.
MergedDir: this is the result of the overlay filesystem. Docker effectively chroot's into this directory when running the container.
# ls -l /var/lib/docker/overlay2/44e7f5efff174a4248f2edcb687a50517e7a3c446eb513ad1c092509f9950a79/merged
total 12
-rw-r--r-- 1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx 1 root root 7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x 1 root root 43 Feb 11 03:10 dev
drwxr-xr-x 1 root root 81 Feb 11 20:14 etc
drwxr-xr-x 2 root root 6 Apr 11 2018 home
lrwxrwxrwx 1 root root 7 Nov 13 01:53 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 13 01:53 lib64 -> usr/lib64
drwxr-xr-x 1 root root 24 Jan 12 22:37 licenses
drwxr-xr-x 2 root root 6 Apr 11 2018 media
drwxr-xr-x 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x 2 root root 6 Apr 11 2018 opt
drwxr-xr-x 2 root root 6 Nov 13 01:53 proc
dr-xr-x--- 1 root root 27 Feb 11 20:11 root
drwxr-xr-x 1 root root 6 Feb 11 20:13 run
lrwxrwxrwx 1 root root 8 Nov 13 01:53 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 Apr 11 2018 srv
drwxr-xr-x 2 root root 6 Nov 13 01:53 sys
drwxrwxrwt 1 root root 6 Jan 12 21:56 tmp
drwxr-xr-x 1 root root 19 Nov 13 01:53 usr
drwxr-xr-x 1 root root 41 Nov 13 01:54 var
Расширить набор конфигурационных параметров дополнительнымdocker.container.fs
,
который будет содержать путь к MergedDir
.
auditbeat.autodiscover:
providers:
- type: docker
templates:
- condition:
contains:
docker.container.name: app
- config:
- module: 'file_integrity'
paths:
- '${data.kubernetes.container.fs}/rootfs/bin'
- '${data.kubernetes.container.fs}/rootfs/etc'
scan_at_start: false
recursive: true
- хранить модифицированный код битов
- собирать приложения вручную
- хранить образы в приватном репозитории
https://www.elastic.co/guide/en/beats/filebeat/current/configuration-autodiscover.html
https://github.com/elastic/beats/blob/master/libbeat
https://github.com/elastic/beats/blob/master/libbeat/autodiscover/providers/docker/docker.go
https://github.com/elastic/beats/blob/master/libbeat/common/docker/watcher.go