Модуль локального сбора логов (Fluentbit)
На этой странице
Модуль собирает, агрегирует и анализирует журналы логов приложений. Использует за основу Fluentbit. По умолчанию предустановлен multiline parser для языков: go, java, python, ruby.
Если необходимо добавить собственный формат, перейдите в Кластер/Установленные сервисы. Найдите Модуль локального сбора логов.
В блоке Спецификация сервиса допишите extraObjects, содержащий необходимые манифесты.
Например:
extraObjects:
- apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterFilter
metadata:
name: my-parser
labels:
fluentbit.fluent.io/enabled: "true"
spec:
match: "*"
filters:
- parser:
keyName: log
parser: my-regex
- apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterParser
metadata:
name: my-regex
labels:
fluentbit.fluent.io/enabled: "true"
spec:
regex:
timeKey: time
timeFormat: "%d/%b/%Y:%H:%M:%S %z"
types: "code:integer size:integer"
regex: '^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*" "(?<agent>[^\"]*)")?$'
Если модуль не отображается, перейдите в Сервисы и репозитории/Доступные чарты, найдите чарт “shturval-log-operator” и нажмите “Установить”.
Интеграция с SIEM
Для интеграции с SIEM необходимо из консоли подключиться к кластеру, для которого необходимо выполнить интеграцию. Для этого используйте скачивание kubeconfig из интерфейса кластера.
После подключения к консоли необходимо создать следующие кастомные ресурсы в API-группе fluentbit.fluent.io:
Добавление метадаты в фильтр:
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterFilter
metadata:
labels:
fluentbit.fluent.io/component: logging
fluentbit.fluent.io/enabled: "true"
name: syslog-add-metadata
spec:
filters:
- recordModifier:
alias: syslog-add-metadata
records:
- hostname ${NODE_NAME}
- product shturval
matchRegex: syslog.*
Добавление в фильтр мультилайн парсера логов:
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterFilter
metadata:
labels:
fluentbit.fluent.io/component: logging
fluentbit.fluent.io/enabled: "true"
name: syslog-multiline
spec:
filters:
- multiline:
keyContent: log
parser: go, java, python, ruby
match: syslog-.*
Ввод кубовых логов:
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterInput
metadata:
labels:
fluentbit.fluent.io/component: logging
fluentbit.fluent.io/enabled: "true"
k8slens-edit-resource-version: v1alpha2
name: syslog-kube
spec:
tail:
db: /fluent-bit/tail/pos-test.db
dbSync: Normal
memBufLimit: 100MB
multilineParser: cri, docker
path: /var/log/containers/*_shturval-backend_*.log
readFromHead: false
refreshIntervalSeconds: 10
skipLongLines: true
storageType: memory
tag: syslog-kube.*
Ввод логов событий безопасности:
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterInput
metadata:
labels:
fluentbit.fluent.io/component: logging
fluentbit.fluent.io/enabled: "true"
k8slens-edit-resource-version: v1alpha2
name: syslog-kube-api-audit
spec:
tail:
db: /fluent-bit/tail/kube-api-audit-syslog.db
dbSync: Normal
memBufLimit: 50MB
path: /var/log/kube-api-audit/audit.log
refreshIntervalSeconds: 10
skipLongLines: true
tag: syslog-kaudit
Вывод кубовых логов:
В хост необходимо прописать IP-адрес хоста, в port необходимо прописать значение порта
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterOutput
metadata:
labels:
fluentbit.fluent.io/component: logging
fluentbit.fluent.io/enabled: "true"
k8slens-edit-resource-version: v1alpha2
name: syslog-kube
spec:
matchRegex: syslog-kube.*
syslog:
host: XX.XX.XX.XX
mode: TCP
port: YYY
syslogAppnameKey: product
syslogHostnameKey: hostname
syslogMessageKey: log
Вывод кубовых логов событий безопасности:
В хост необходимо прописать IP-адрес хоста, в port необходимо прописать значение порта
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterOutput
metadata:
labels:
fluentbit.fluent.io/component: logging
fluentbit.fluent.io/enabled: "true"
k8slens-edit-resource-version: v1alpha2
name: syslog-kube-api-audit
spec:
matchRegex: syslog-kaudit
syslog:
host: XX.XX.XX.XX
mode: TCP
port: YYY
syslogAppnameKey: product
syslogHostnameKey: hostname
syslogMessageKey: log
С дополнительной информацией можно ознакомиться на официальном сайте. В текущем релизе используется Fluentbit версии 2.2.2, версия FluentBit Operator 2.8.0
Перенаправление логов
Fluent Operator поддерживает следующие пользовательские ресурсы (Kubernetes Custom Resources):
Kind | Group | Version |
---|---|---|
ClusterFilter | fluentbit.fluent.io | v1alpha2 |
ClusterFluentBitConfig | fluentbit.fluent.io | v1alpha2 |
ClusterInput | fluentbit.fluent.io | v1alpha2 |
ClusterOutput | fluentbit.fluent.io | v1alpha2 |
ClusterParser | fluentbit.fluent.io | v1alpha2 |
Collector | fluentbit.fluent.io | v1alpha2 |
FluentBit | fluentbit.fluent.io | v1alpha2 |
Для настройки перенаправления логов выполните следующие действия:
В каждом кластере в неймспейсе logging необходимо создать секрет с логином и паролем для доступа к серверу.
Это можно сделать с помощью применения манифеста в cli:
apiVersion: v1
kind: Secret
metadata:
name: fluent-bit-output-es
type: Opaque
stringData:
username: имя_пользователя
password: пароль1234
Либо в интерфейсе платформы. Перейдите на страницу Кластер/Название кластера/Неймспейсы/logging/Хранилище/Secrets.
Создайте секрет с типом Opaque. В блоке Ключи создайте два ключа, где
- Первый ключ: username, значение: имя_пользователя
- Второй ключ: password, значение: пароль1234
Замените значения имя_пользователя и пароль1234 на валидные значения.
Перейдите в раздел Кластеры/Название Кластера/Системные сервисы/Установленные системные сервисы.
Найдите системный сервис: Модуль локального сбора логов.
В блоке спецификация системного сервиса укажите имя и порт сервера, а также имя кластера в качестве значения logstashPrefix:
fluentbit:
output:
es:
enable: true
host: хост
port: 9200
logstashFormat: false
index: значение_индекса
httpUser:
valueFrom:
secretKeyRef:
key: fluent-bit-output-es
name: username
optional: true
httpPassword:
valueFrom:
secretKeyRef:
key: fluent-bit-output-es
name: password
optional: true
suppressTypeName: true
tls:
verify: false
traceError: true
Для перенаправления логов в syslog создайте манифест в формате yaml:
apiVersion: fluentbit.fluent.io/v1alpha2
kind: ClusterOutput
metadata:
annotations:
meta.helm.sh/release-name: shturval-log-operator
meta.helm.sh/release-namespace: logging
labels:
app.kubernetes.io/managed-by: Helm
fluentbit.fluent.io/component: logging
fluentbit.fluent.io/enabled: "true"
name: syslog
spec:
match: *
syslog:
host: "ip_используемого_siem"
port: 514
mode: udp
Примените манифест с помощью команды в интерфейсе командной строки:
kubectl apply -f /путь_к_манифесту/название_манифеста.yaml