Оповещение контейнера AlertManager не возвращает имя хоста, на котором оно запущено

Я столкнулся с одной проблемой: я использую правило ниже в файле alert_rules.yml, когда я получаю предупреждение, оно не возвращает имя хоста, на котором работает контейнер. Как я могу вернуть имя хоста вместо идентификатора узла?

Я пробовал с container_label_com_docker_swarm_node_name вместо container_label_com_docker_swarm_node_id, но не работает.

Какие-либо предложения ?

- alert: task_high_memory_usage_1g
expr: sum(container_memory_rss{container_label_com_docker_swarm_task_name=~".+"})
  BY (container_label_com_docker_swarm_task_name, container_label_com_docker_swarm_node_id) > 1e+09
for: 1m
labels:
  severity: warning
annotations:
  description: '{{ $labels.container_label_com_docker_swarm_task_name }} on ''{{
    $labels.container_label_com_docker_swarm_node_id }}'' memory usage is {{ humanize
    $value}}.'
  summary: Memory alert for Swarm task '{{ $labels.container_label_com_docker_swarm_task_name
    }}' on '{{ $labels.container_label_com_docker_swarm_node_id }}'

person Aziz Zoaib    schedule 26.07.2018    source источник


Ответы (2)


У вас нет опыта работы с Docker, но если ваши метрики container_memory_rss имеют метку container_label_com_docker_swarm_node_id и container_label_com_docker_swarm_node_name, то замена всех вхождений одного на другое в вашем правиле оповещения (включая правило и описание/сводку) должна работать нормально. Если метки ..._name нет, это может объяснить, почему он не работает.

person Alin Sînpălean    schedule 27.07.2018
comment
container_memory_rss не содержит container_label_com_docker_swarm_node_name. - person Aziz Zoaib; 29.07.2018
comment
Боюсь, нельзя агрегировать метрики по тому, чего нет. Возможно, вы сможете присоединиться к какой-либо другой метрике, которая имеет метки container_label_com_docker_swarm_node_id и container_label_com_docker_swarm_node_name, что-то вроде этого: stackoverflow.com/a/ 50357418/8657904 - person Alin Sînpălean; 29.07.2018
comment
Но проблема в том, что container_label_com_docker_swarm_node_id доступен в метриках cadvisor, а container_label_com_docker_swarm_node_name доступен в метриках Node Advisor.. как я могу объединить их для использования в моем случае? - person Aziz Zoaib; 30.07.2018
comment
Что ж, определите набор меток (или, по крайней мере, значений меток), которые однозначно соответствуют вашей метрике cadvisor (container_memory_rss) и какой-либо метрике Node Advisor с container_label_com_docker_swarm_node_nameметкой, выполните любые label_replace операции, необходимые для сопоставления имен и значений меток (для меток, которые вы указанные выше), затем примените указанное выше решение, чтобы соединить их. - person Alin Sînpălean; 30.07.2018
comment
У вас есть пример использования операций label_replace? - person Aziz Zoaib; 30.07.2018

Вы можете попробовать $labels.instance. Он вернет имя экземпляра, в котором запускается предупреждение.

person Abhishek    schedule 30.07.2018
comment
$label.instance возвращает IP-адрес, который Docker случайным образом назначает своим контейнерам. Мне нужно имя хоста узла, на котором работает этот контейнер. - person Aziz Zoaib; 31.07.2018