Мониторинг работы Ansible Playbook

от автора

Как-то раз я решил задействовать ansible (очень популярный инструмент управления конфигурациями) в системе, развернутой в продакшене. Когда дело доходит до систем, развернутых в продакшене, нам очень важно знать, какие конфигурации применились успешно, а какие нет.

Некоторое время поискав решение на просторах сети, я так и не смог найти простой способ отслеживать неудачное выполнение. Поэтому я придумал следующее решение.

Базовый рабочий процесс решения

  1. Сохранение вывода плейбука в специальный файл (на каждом хосте) с помощью log_plays.

  2. Передача логов в elasticsearch с помощью filebeat.

  3. Наконец, визуализация информации с помощью kibana.

Базовая структура решения для мониторинга работы плейбука
Базовая структура решения для мониторинга работы плейбука

Реализация решения

Весь код можно найти здесь: monitor-ansible-playbook-executions

Ansible предоставляет нам колбек, который записывает вывод плейбука в специальный файл на каждом хосте с помощью следующей конфигурации:

-- ansible.cfg  [defaults]      stdout_callback = log_plays

Вывод в логах плейбука будет в следующем формате:

time - path-to-playbook - task-name - task-command - task-status - task-output  time - path-to-playbook - task-name - task-command - task-status - task-output

Затем эти логи парсит filebeat (с помощью обработчика dissect). Поскольку между двумя сообщениями есть пустая строка, мы будем выполнять условный парсинг.

processors:     - dissect:         when:           not:             equals:               message: ""         tokenizer: "%{time} - %{playbook_path} - %{task_name} - %{task_cmd} - %{task_status} - %{task_output}"         field: "message"         target_prefix: "ansible"

Обработчик script добавит в логи информацию о хостах:

- script:         lang: javascript         source: >           function process(event) {               var ansible_path = event.Get("log.file.path");               var host = ansible_path.split("/").pop();               event.Put('ansible.host', host)           }

Наконец, логи публикуются в elasticsearch.

output.elasticsearch:       enabled: true       hosts: ["elasticsearch-1:9200"]

Теперь можно визуализировать эту информацию с помощью kibana и добавить наблюдателей, чтобы информировать команду о сбоях.

Статус выполнения Ansible — успех или сбой
Статус выполнения Ansible — успех или сбой

Спасибо за внимание.


Уже завтра вечером в рамках онлайн-курса OTUS «Observability: мониторинг, логирование, трейсинг» состоится открытый урок «Организация мониторинга с помощью Grafana stack». На уроке рассмотрим следующие темы: установка, настройка Loki и Tempo. Визуализация логов и трейсов в Grafana. Регистрация доступна для всех желающих на странице курса.


ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/694470/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *