Не удается обновить свойства в Ansible роли для Prometheus.

Вопрос или проблема

Я пытаюсь использовать роль 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:

https://github.com/prometheus-community/ansible/tree/9fd1b0f52954b3f6e1338ef1466a0cb8fd30fd9f/roles/prometheus/tasks

Но ничего…

На моем сервере я вручную изменил значение и перезапустил prometheus, чтобы запустить плейбук и проверить, изменится ли оно снова на маршрут “rules” (чтобы увидеть, что плейбук работает).

Не уверен, что я могу сделать…

Ответ или решение

Для решения вашей проблемы с обновлением свойств в Ansible роли для Prometheus, рассмотрим несколько ключевых моментов и возможные действия.

Анализ проблемы

  1. Версия роли: Убедитесь, что вы используете последнюю версию роли Prometheus. Иногда изменения в функционале могут привести к тому, что некоторые свойства не обновляются должным образом.

  2. Параметры playbook: В вашем playbook.yaml все параметры выглядят корректно. Однако важно удостовериться, что передаваемые переменные обрабатываются правильно в шаблонах Jinja2 и задачах Ansible.

  3. Изменения в шаблонах и задачах: Вы упомянули о том, что вы редактировали шаблон prometheus.yml.j2 и задачи в configure.yml. Убедитесь, что в шаблоне правильно выполняется логика обработки правил, а также что изменения в configure.yml действительно применяются.

Рекомендации по решению

  1. Проверка переменных: Проверьте, какие значения принимает переменная prometheus_alert_rules_files при выполнении playbook. Вы можете добавить задачу для отображения значений переменных, например:

    - debug:
        var: prometheus_alert_rules_files
  2. Дебаггинг задачи: Добавьте дополнительные отладочные сообщения в вашей задаче по копированию правил, чтобы убедиться, что она выполняется, и что файлы корректно копируются.

  3. Пути для правил: Убедитесь, что путь для ваших правил /sites/prometheus/rules.d/rules.yml действительно существует и доступен для записи. Необходимо также удостовериться, что файлы с расширением .rules действительно находятся в нужном директории.

  4. Чистка кэша: Иногда Ansible может кэшировать данные. Попробуйте запустить playbook с флагом --flush-cache, чтобы сбросить кэш.

  5. Ручной тест: Вы уже пробовали ручные изменения для проверки – хороший подход. Вместо этого вы можете временно добавить задачу, которая просто перезаписывает конфигурацию с минимальными изменениями (например, добавив только одну строку), чтобы проверить, срабатывает ли обновление.

  6. Перезапуск Prometheus: Убедитесь, что после изменений конфигурации Prometheus действительно перезапускается. Возможно, добавьте задачу в playbook для выполнения этой операции:

    - name: Restart Prometheus
      systemd:
        name: prometheus
        state: restarted
      become: true

Заключение

Если все вышеперечисленные рекомендации не помогли, возможно, имеет смысл создать issue в репозитории GitHub роли Prometheus, описывая вашу ситуацию более подробно. Также посмотрите на обсуждения других пользователей; у кого-то может быть аналогичная проблема, и решение уже обсуждалось.

Не забывайте проверять логи Ansible на наличие ошибок или предупреждений, которые могут указывать на то, почему ваши изменения не вступают в силу. Удачи!

Оцените материал
Добавить комментарий

Капча загружается...