monitoring_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:
- Скопируйте раздел
defaults/main.yml
из Node Exporter в тот же файл и измените все терминыnexporter
на ваши, например,someexporter
. - Скопируйте раздел
templates/monitoring-docker-compose.yml.j2
из Node Exporter и также переименуйте и адаптируйте под свои нужды. - Адаптируйте
meta/main.yml
: добавьте тег, измените описание, если это необходимо. - Обновите
README.md
.
Модуль Promtail для нового приложения
Чтобы добавить совместимость для приложения, которое еще не поддерживается, сделайте следующее:
- Объявите его в
monitoring_promtail_modules_available
. Путь к логам зависит от приложения, название шаблона вы определяете здесь. - Скопируйте
templates/promtail-config-apps/odoo-role.j2
в тот же каталог, но под именемnew-app.j2
. - Отредактируйте шаблон в соответствии с вашим приложением. Проверьте официальную документацию.
- Вы можете протестировать регулярные выражения на 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