VK Cloud logo
Обновлена8 сентября 2023 г. в 12:10

Сбор логов с нод с docker-runtime и crio-runtime с помощью Fluent Bit

Для унификации сбора логов с нод с docker-runtime и crio-runtime следует воспользоваться Fluent Bit (легковесная и более производительная альтернатива fluentd).

Файл настройки values.yaml

В качестве values.yaml для Helm стоит использовать файл по ссылке ниже — в нем уже настроены необходимые фильтры и парсеры.

Файл values.yaml.

В приложенном values.yaml необходимо поправить параметры для [OUTPUT] — в примере для хранения логов используется PostgreSQL с двумя таблицами в одной базе:

  • Таблица fluentbit_21_host — для хранения логов хостовых сервисов (kublet.service, docker.service, crio.service).
  • Таблица fluentbit_21_kube — хранит логи непосредственно логи подов.

Аналогичным способом логи можно сохранять, например, в ElasticSearch. Полный список поддерживаемых типов хранилищ можно посмотреть по ссылке.

Разделение сделано намерено, чтобы показать возможность использования разных таблиц в базе данных (индексов в Elasticsearch).

Установка Fluent Bit с помощью Helm 3

Перед установкой Fluent Bit внесите изменения в ограничение (constraint) для Gatekeeper. Эти изменения позволят читать логи с нод:

  1. Создайте файл fluentbit_patch.yaml в кластере и наполните его содержимым:

    1spec: 
    2  match: 
    3    kinds: 
    4      - apiGroups: 
    5      - ""
    6    kinds: 
    7      - Pod
    8    parameters: 
    9      allowedHostPaths: 
    10        - pathPrefix: /k8spsp
    11          readOnly: true
    12        - pathPrefix: /var/log
    13          readOnly: true
    14        - pathPrefix: /var/log/containers
    15          readOnly: true
  2. Примените изменения, выполнив команду:

    kubectl patch k8spsphostfilesystem.constraints.gatekeeper.sh/psp-host-filesystem --patch-file fluentbit_patch.yaml --type merge

Установить Fluent Bit с файлом настройки можно следующими командами:

1helm repo add fluent https://fluent.github.io/helm-charts
2helm install fluent-bit fluent/fluent-bit --values values.yaml

Больше информации об установке Fluent Bit вы можете найти в официальной документации Fluent Bit.

Примеры логов

Логи докера:

1{
2	"ts": 1638261063.088225,
3	"msg": "ignoring event\" module=libcontainerd namespace=moby topic=/tasks/delete type=\"*events.TaskDelete",
4	"time": "2021-11-30T08:31:03.088224558Z",
5	"level": "info"
6}

Логи CRI-O:

1{
2	"id": "415aaaf7-8105-4b95-a435-b6fa6994c68d",
3	"ts": 1638229757.742216,
4	"msg": "Checking image status: registry.infra.mail.ru:5010/pause:3.0",
5	"name": "/runtime.v1alpha2.ImageService/ImageStatus",
6	"time": "2021-11-29 23:49:17.742215883Z",
7	"level": "info"
8}

Лог пода, независимо от рантайма:

1{
2	"ts": 1638282885.830729,
3	"log": "[2021/11/30 14:34:45] [ info] [engine] started (pid=1)\n",
4	"time": "2021-11-30T14:34:45.830729304Z",
5	"stream": "stderr",
6	"kubernetes": {
7		"host": "runtime-613-v19-default-group-0",
8		"labels": {
9			"app.kubernetes.io/name": "fluent-bit",
10			"pod-template-generation": "10",
11			"controller-revision-hash": "686bff7448",
12			"app.kubernetes.io/instance": "fluent-bit"
13		},
14		"pod_id": "516d9ae1-671c-4c2e-bfbd-f469de3eceb6",
15		"pod_name": "fluent-bit-tbnfb",
16		"docker_id": "e0961103bfd584c5a7ba960bbd60aae3544d1cf0d9c1658b90eaae2fb7a83c50",
17		"annotations": {
18			"checksum/config": "6de425db2bca3061e94e50f648dfa35e9c9f77788f1755df389c303a7124359d",
19			"checksum/luascripts": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
20		},
21		"container_name": "fluent-bit",
22		"namespace_name": "default",
23		"container_image": "fluent/fluent-bit:1.8.10"
24	}
25}

Различные парсеры, доступные из коробки, можно посмотреть в GitHub-репозитории.