monitoring_role

Роль мониторинга Ansible Role

Роль Ansible для поддержки инструментов мониторинга экосистемы Grafana.

Использует Docker для установки экспортеров Prometheus и Loki:

  • nodeexporter: экспортер Prometheus, который собирает общие данные о состоянии хоста.
  • postgresexporter: экспортер Prometheus, который контролирует состояние сервера PostgreSQL.
  • promtail: основной экспортер для Loki, сервера логов, аналогичного Prometheus и совместимого с Grafana.

Эта роль поддерживает некоторые приложения с их стандартным форматом логирования:

Кроме того, она поддерживает пользовательский экспортер, который отображает активных пользователей в системе.

Использование этой роли

Открытые переменные

NodeExporter

# defaults/main.yaml
monitoring_nexporter_enabled: true
monitoring_nexporter_host: 127.0.0.1
monitoring_nexporter_port: 9100
monitoring_nexporter_docker_bind: "127.0.0.1:127.0.0.1:9100"
monitoring_nexporter_container_name: nexporter
monitoring_nexporter_image_version: latest

PostgresqlExporter

monitoring_postgres_exporter_enabled: true
monitoring_postgres_exporter_pg_user: "monitor_user"

Promtail

# defaults/main.yaml
monitoring_promtail_enabled: true
monitoring_promtail_host: 127.0.0.1
monitoring_promtail_port: 9080
monitoring_promtail_docker_bind: "127.0.0.1:127.0.0.1:9080"
monitoring_promtail_container_name: promtail
monitoring_promtail_image_version: latest

monitoring_promtail_modules_enabled:
  - "app2"

monitoring_promtail_modules_available:
  app1:
    log_path: "/var/log/app1/error.log"
    template: "app1.j2"
  app2:
    log_path: "/opt/app2/log/app2.log"
    template: "app2.j2"

monitoring_promtail_config_dir: "/etc/promtail"
monitoring_promtail_config_filename: "config.yml"

Активные пользователи

monitoring_users_enabled: true
monitoring_users_host: 127.0.0.1
monitoring_users_port: 9839
monitoring_users_endpoint: "/metrics"
monitoring_users_prefix: "what"
monitoring_users_with_timestamp: false
monitoring_users_scrape_interval: 5000

Секретные переменные

Promtail

monitoring_loki_user: "1234"
monitoring_loki_key: "eyJrIjoiM2VlZmM2NmQ4ZTQ4ZmE3MDRmZDBmMGE0YzNlNTE1MzRjZDdjNDY0N2YiLCJuIjoieW91ciBncmFmYW5hIGNsb3VkIGtleSIsImlkIjoxMjM0NTZ9"
monitoring_loki_hostname: "logs-somewhere.grafana.net"

PostgresqlExporter

monitoring_postgres_exporter_pg_password: "3%hyZ&toNZ#Xn74"
monitoring_postgres_exporter_pg_port: "3456"

Примеры плейбуков

Odoo с Promtail

# playbooks/odoo-promtail.yml
---
- name: Установить Odoo с мониторингом логов
  hosts: servers
  become: yes
  roles:
    - role: coopdevs.odoo_role
    - role: coopdevs.monitoring_role
      vars:
        monitoring_nexporter_enabled: false
        monitoring_promtail_enabled: true
        monitoring_promtail_modules_enabled: [ "odoo" ]
        monitoring_loki_user: "1234"
        monitoring_loki_key: "eyJrIjoiM2VlZmM2NmQ4ZTQ4ZmE3MDRmZDBmMGE0YzNlNTE1MzRjZDdjNDY0N2YiLCJuIjoieW91ciBncmFmYW5hIGNsb3VkIGtleSIsImlkIjoxMjM0NTZ9"
        monitoring_loki_hostname: "logs-somewhere.grafana.net"

PostgreSQL с системными метриками

# playbooks/postgres-nexporter.yml
---
- name: Установить сервер базы данных с открытыми системными метриками
  hosts: servers
  become: yes
  roles:
    - role: geerlingguy.postgresql
    - role: coopdevs.monitoring_role
      vars:
        monitoring_nexporter_enabled: true
        monitoring_promtail_enabled: false

Безопасность

Эта роль открывает через HTTP сервер множество данных, которые могут быть потенциально использованы злоумышленниками. По умолчанию она слушает на локальном адресе, который не доступен из интернета.

Однако, вероятно, вы захотите, чтобы внешний сервер Prometheus периодически запрашивал эти данные. Для этого, и для защиты данных, необходимо реализовать какую-то форму аутентификации от сервера Prometheus к хосту.

Одним из подходов является привязка экспортеров к localhost и настройка обратного прокси перед ними с базовой аутентификацией с использованием Nginx. Управление этой настройкой и связанные с ней ключи выходят за рамки данной роли.

Расширение

Экспортер Prometheus

Чтобы добавить новый экспортер Prometheus:

  1. Скопируйте раздел defaults/main.yml из Node Exporter в тот же файл и измените все термины nexporter на ваши, например, someexporter.
  2. Скопируйте раздел templates/monitoring-docker-compose.yml.j2 из Node Exporter и также переименуйте и адаптируйте под свои нужды.
  3. Адаптируйте meta/main.yml: добавьте тег, измените описание, если это необходимо.
  4. Обновите README.md.

Модуль Promtail для нового приложения

Чтобы добавить совместимость для приложения, которое еще не поддерживается, сделайте следующее:

  1. Объявите его в monitoring_promtail_modules_available. Путь к логам зависит от приложения, название шаблона вы определяете здесь.
  2. Скопируйте templates/promtail-config-apps/odoo-role.j2 в тот же каталог, но под именем new-app.j2.
  3. Отредактируйте шаблон в соответствии с вашим приложением. Проверьте официальную документацию.
  • Вы можете протестировать регулярные выражения на regexr в "серверном режиме" или на regex101.com. Включите комментарий с парой записей журнала для ясности, это поможет будущим читателям регулярных выражений.
  • Установите стадию labels, чтобы определить, какие метки экспортируются в Loki из собранных.
  • Установите стадию timestamp, чтобы временная метка строки лога совпадала с реальной, а не с моментом, когда promtail её собрал.
    • Включайте миллисекунды только если это возможно. Go понимает только точку '.' как десятичный разделитель. Если ваше приложение использует ',', это не работает. Посмотрите проблему Go #6189.
    • Включите временную зону либо через парсинг, как в backups-role.j2, либо вручную, как в odoo-role.j2.
  • По желанию вы можете включить стадию match, если хотите отсеять записи, которые не соответствуют вашему регулярному выражению.
О проекте

Install Prometheus and Loki exporters to monitor your project instances

Установить
ansible-galaxy install coopdevs/monitoring-role
Лицензия
Unknown
Загрузки
21831
Владелец
Coopdevs, Free and Open Source Software for Social and Solidarity Economy.