Как стать автором
Обновить
938.86
OTUS
Цифровые навыки от ведущих экспертов

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

Время на прочтение2 мин
Количество просмотров3.5K
Автор оригинала: Anas Anjaria

Как-то раз я решил задействовать 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. Регистрация доступна для всех желающих на странице курса.

Теги:
Хабы:
Всего голосов 6: ↑5 и ↓1+4
Комментарии3

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS