
Как-то раз я решил задействовать ansible (очень популярный инструмент управления конфигурациями) в системе, развернутой в продакшене. Когда дело доходит до систем, развернутых в продакшене, нам очень важно знать, какие конфигурации применились успешно, а какие нет.
Некоторое время поискав решение на просторах сети, я так и не смог найти простой способ отслеживать неудачное выполнение. Поэтому я придумал следующее решение.
Базовый рабочий процесс решения
Сохранение вывода плейбука в специальный файл (на каждом хосте) с помощью log_plays.
Передача логов в elasticsearch с помощью filebeat.
Наконец, визуализация информации с помощью 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 и добавить наблюдателей, чтобы информировать команду о сбоях.

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