Slide 1

Slide 1 text

slurm.io + Читаем логи: elastalert

Slide 2

Slide 2 text

2 slurm.io TL;DR: зачем читать логи? пусть робот читает

Slide 3

Slide 3 text

3 slurm.io Зачем оно ? ● Часто смотрите в Kibana? ● Регулярно ловите похожие проблемы в логах? Elastalert это способ зафиксировать знания об этих проблемах и автоматизировать оповещения об их появлении

Slide 4

Slide 4 text

4 slurm.io Что такое Elastalert? ● Анализатор логов в ElasticSearch ● Алертилка в почту/телеграмм/и т. д. Сайт проекта Документация

Slide 5

Slide 5 text

5 slurm.io Установка Элементарно (и бесполезно): # helm install stable/elastalert Не так-то просто (установка/обновление): # helm upgrade --install -f values.yaml stable/ elastalert написав values.yaml с осмысленным правилами алертинга :-\

Slide 6

Slide 6 text

6 slurm.io Пишем values.yaml ● Полезно начать с дефолтных значений: helm inspect values stable/elastalert > values.yaml ● Стандартные секции для чарта: image (фиксируем версию), resources (requests.memory: 1Gi, limits.memory:2Gi) ● Общая конфигурация ES (секция elasticsearch): host/port/ useSsl/username/password/verifyCerts ● Правила и алерты (секция rules): правила в YAML, по файлу на правило. Можно указывать свой ES (см документацию). ● Далее до/переписываем правила в values.yaml и устанавливаем/обновляем той же командой helm-а

Slide 7

Slide 7 text

7 slurm.io Пример values.yaml revisionHistoryLimit: 5 runIntervalMins: 1 bufferTimeMins: 15 alertRetryLimitMins: 2880 realertIntervalMins: "" writebackIndex: elastalert_status image: repository: jertel/elastalert-docker tag: 0.1.35 pullPolicy: IfNotPresent resources: requests: memory: 1Gi limits: memory: 2Gi elasticsearch: host: "logging-es" port: 9200 useSsl: "False" username: "" password: "" verifyCerts: "True" rules: bgp_peer_down: |- --- owner: e.tereshkov name: BGP peer down description: "BGP peer down messages" index: logstash*%Y.%m.%d use_strftime_index: True type: any filter: - query: query_string: query: "bgp peer down" alert_text: "" alert: telegram telegram_bot_token: XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXX_XX telegram_room_id: "-YYYYYYYYYY" nodeSelector: {} tolerations: [] https://gitlab.slurm.io/slurm3/slurm/blob/m aster/practice/8.elastalert/values.yaml

Slide 8

Slide 8 text

8 slurm.io Логика работы ● Для каждого правила, сделать выборку из индекса index ES (используя filter), с последней точки ● Если надо, сохранить промежуточный результат в ES (индекс elastalert_status) ● Сохранить точку, до которой дочитали, в ES (elastalert_status) ● Если произошло срабатывание правила (rule), отправить алерт (alert) ● Повторить сначала

Slide 9

Slide 9 text

9 slurm.io Фильтры Их несколько видов, самый полезный - формат запроса Lucene filter: - query: query_string: query: "NOT kubernetes.namespace:kube-system" Т.е. всё то же самое, что вы пишете в Kibana Остальное в документации

Slide 10

Slide 10 text

10 slurm.io Правила Определяют, что считать проблемой. Их много видов, например: подробнее

Slide 11

Slide 11 text

11 slurm.io Примеры правил name: Logs_not_flows is_enabled: True type: flatline index: logstash*%Y.%m.%d use_strftime_index: True threshold: 1 timeframe: minutes: 5 filter: - query: query_string: query: "*" aggregation: minutes: 10 name: Strange_logs_spikes is_enabled: True type: spike index: logstash*%Y.%m.%d use_strftime_index: True spike_height: 4 spike_type: both threshold_ref: 100 threshold_cur: 100 query_key: kubernetes.container.name timeframe: minutes: 60 filter: - query: query_string: query: "NOT kubernetes.namespace:kube-system" aggregation: minutes: 10

Slide 12

Slide 12 text

12 slurm.io Алерты alert: telegram telegram_bot_token: XXXXXXXXX:XXXXXX_XX telegram_room_id: "-YYYYYYYY" alert: - email - debug smtp_host: smtp from_addr: [email protected] alert_subject: "K8S_{0}@{1}_WARNING" alert_subject_args: - name - kubernetes.container.name alert_text_type: exclude_fields alert_text: "Logs spike detected for container {0}/{1} at time: {2} (index:{3})" alert_text_args: - kubernetes.namespace - kubernetes.container.name - "@timestamp" - _index email: - "[email protected]" - "[email protected]" Много разных , пара примеров:

Slide 13

Slide 13 text

13 slurm.io Примеры оповещений Logs_not_flows An abnormally low number of events occurred around 2018-08-31 00:54 UTC. Between 2018-08-31 00:49 UTC and 2018- 08-31 00:54 UTC, there were less than 1 events. Strange_logs_spikes@myapp on k8s.slurm.io Logs spike detected for container stage/myapp at time: 2018-09- 28T16:53:46.433Z (index:filebeat-stage- 2018.09.28) An abnormal number (120) of events occurred around 2018-09-28 16:53 UTC. Preceding that time, there were only 497 events within 1:00:00

Slide 14

Slide 14 text

14 slurm.io Проблемы ● Нет сигнала "отбоя", elastalert не хранит состояние алертов ● Оповещение на каждое правило, много copy/paste ● Бывает неочевидна логика срабатывания ● Неочевидная документация (десятки параметров)

Slide 15

Slide 15 text

15 slurm.io Вопросы?