Вопрос или проблема
Я пытаюсь использовать роль Prometheus: https://github.com/prometheus-community/ansible
Я создал плейбук – playbook.yaml, со следующим содержимым:
---
- hosts: prometheus-server
become: true
roles:
- role: prometheus.prometheus.prometheus
prometheus_version: "2.43.0"
prometheus_config_dir: "/sites/prometheus"
prometheus_web_listen_address: "0.0.0.0:9090"
prometheus_global: {"evaluation_interval": "1m5s", "scrape_interval": "1m", "scrape_timeout": "59s"}
prometheus_external_labels: {"environment": "env1"}
prometheus_alert_rules_files: ["/sites/prometheus/rules.d/rules.yml"]
prometheus_alertmanager_config:
- scheme: http
static_configs:
- targets:
- alertmanager-1.xxx:9093
Инвентарь в порядке:
all:
hosts:
prometheus-server:
ansible_host: x.x.x.x
vars:
ansible_user: ubuntu
ansible_ssh_private_key_file: ~/.ssh/id_rsa_test
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -i ~/.ssh/id_rsa [email protected]"'
Я изменил все эти значения, чтобы использовать rules.d:
В roles/prometheus/templates/prometheus.yml.j2:
{% if not prometheus_agent_mode and prometheus_alert_rules_files != [] %}
rule_files:
- {{ prometheus_config_dir }}/rules/*.rules
{% endif %}
В roles/prometheus/tasks/configure.yml
src: "{{ item }}"
dest: "{{ prometheus_config_dir }}/rules/"
owner: root
В ansible/roles/prometheus/meta/argument_specs.yml, ничего не нужно менять:
prometheus_alert_rules:
description:
- "Полный список правил оповещения, которые будут скопированы в C({{ prometheus_config_dir }}/rules/ansible_managed.rules)."
- "Правила оповещения также могут быть предоставлены другими файлами, находящимися в C({{ prometheus_config_dir }}/rules/), которые имеют расширение C(*.rules)"
- "Пожалуйста, смотрите значения по умолчанию в role defaults/main.yml"
type: "list"
elements: "dict"
При запуске плейбука он по-прежнему возвращает маршрут по умолчанию (даже если был изменен и сохранён).
Я также пытался вручную добавить другие задачи, которые не выполняются, в tasks:
Но ничего…
На моем сервере я вручную изменил значение и перезапустил prometheus, чтобы запустить плейбук и проверить, изменится ли оно снова на маршрут “rules” (чтобы увидеть, что плейбук работает).
Не уверен, что я могу сделать…
Ответ или решение
Для решения вашей проблемы с обновлением свойств в Ansible роли для Prometheus, рассмотрим несколько ключевых моментов и возможные действия.
Анализ проблемы
-
Версия роли: Убедитесь, что вы используете последнюю версию роли Prometheus. Иногда изменения в функционале могут привести к тому, что некоторые свойства не обновляются должным образом.
-
Параметры playbook: В вашем playbook.yaml все параметры выглядят корректно. Однако важно удостовериться, что передаваемые переменные обрабатываются правильно в шаблонах Jinja2 и задачах Ansible.
-
Изменения в шаблонах и задачах: Вы упомянули о том, что вы редактировали шаблон
prometheus.yml.j2
и задачи вconfigure.yml
. Убедитесь, что в шаблоне правильно выполняется логика обработки правил, а также что изменения вconfigure.yml
действительно применяются.
Рекомендации по решению
-
Проверка переменных: Проверьте, какие значения принимает переменная
prometheus_alert_rules_files
при выполнении playbook. Вы можете добавить задачу для отображения значений переменных, например:- debug: var: prometheus_alert_rules_files
-
Дебаггинг задачи: Добавьте дополнительные отладочные сообщения в вашей задаче по копированию правил, чтобы убедиться, что она выполняется, и что файлы корректно копируются.
-
Пути для правил: Убедитесь, что путь для ваших правил
/sites/prometheus/rules.d/rules.yml
действительно существует и доступен для записи. Необходимо также удостовериться, что файлы с расширением.rules
действительно находятся в нужном директории. -
Чистка кэша: Иногда Ansible может кэшировать данные. Попробуйте запустить playbook с флагом
--flush-cache
, чтобы сбросить кэш. -
Ручной тест: Вы уже пробовали ручные изменения для проверки – хороший подход. Вместо этого вы можете временно добавить задачу, которая просто перезаписывает конфигурацию с минимальными изменениями (например, добавив только одну строку), чтобы проверить, срабатывает ли обновление.
-
Перезапуск Prometheus: Убедитесь, что после изменений конфигурации Prometheus действительно перезапускается. Возможно, добавьте задачу в playbook для выполнения этой операции:
- name: Restart Prometheus systemd: name: prometheus state: restarted become: true
Заключение
Если все вышеперечисленные рекомендации не помогли, возможно, имеет смысл создать issue в репозитории GitHub роли Prometheus, описывая вашу ситуацию более подробно. Также посмотрите на обсуждения других пользователей; у кого-то может быть аналогичная проблема, и решение уже обсуждалось.
Не забывайте проверять логи Ansible на наличие ошибок или предупреждений, которые могут указывать на то, почему ваши изменения не вступают в силу. Удачи!