Алгоритм действий состоит из следующих шагов:
1.Настройка конфигурационного файла Blackbox-экспортера на поддержку icmp-проверки
2.Настройка Prometheus-а для подключения и поддержки Blackbox-экспортера
3.Настрйка правил Prometheus для мониторинга ICMP-доступности хоста
1.Настройка конфигурационного файла Blackbox-экспортера на поддержку icmp-проверки
Определяем модуль с именем icmp-general.
Время проверки — до 5 секунд
Предпочитаемый IP-протокол для проверки ipv4 (чтобы не использовался ipv6)
1 |
# nano blackbox-exporter/blackbox.yml |
1 2 3 4 5 6 |
modules: icmp-general: prober: icmp timeout: 5s icmp: preferred_ip_protocol: "ip4" |
2.Настройка Prometheus-а для подключения и поддержки Blackbox-экспортера
Определение конетйнера blackbox-exporter в docker-compose.yml
1 |
# nano docker-compose.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
version: '2.4' networks: monitor-net: driver: bridge services: … blackbox-exporter: image: prom/blackbox-exporter:${BLACKBOX_EXPORTER_VERSION} container_name: blackbox-exporter volumes: - ./blackbox-exporter/:/config/ command: - '--config.file=/config/blackbox.yml' restart: unless-stopped networks: - monitor-net mem_limit: ${BLACKBOX_EXPORTER_MEM_LIMIT} mem_reservation: ${BLACKBOX_EXPORTER_MEM_RESERVATION} logging: driver: "json-file" options: max-size: "5m" |
Конфигурационный файл blackbox-exporter-а монтируется как volume для возможности его изменения и применения новых настроек без пересборки контейнера
Значение переменных определяющих размер резервируемой и максимально доступной памяти для контейнера, а также версию/таг образа, вынесем в файл с переменными окружения .env, который читает docker-compose
1 |
# nano .env |
1 2 3 4 |
### Blackbox-exporter BLACKBOX_EXPORTER_VERSION=latest BLACKBOX_EXPORTER_MEM_LIMIT=128m BLACKBOX_EXPORTER_MEM_RESERVATION=64m |
В конфигурационном файле prometheusопределяем цели(хосты), доступность которых по icmp-протоколу требуется проверять
Название модуля(icmp-general) должно совпадать с именем модуля, указанным в конфигурационном файле blackbox-экспортера — blackbox.yml (см.пункт 1)
За счет переназначения меток в подразделе relabel_configs значение поле instance будет равно значению поля addess(а address -э то те имена хостов/IP-адреса, которые указаны в параметре targets)
1 |
# nano prometheus/prometheus.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
scrape_configs: - job_name: 'blackbox-icmp-general' scrape_interval: 30s metrics_path: /probe params: module: [icmp-general] static_configs: - targets: - 111.111.111.111 # server1 - 112.112.112.112 # server2 - server3.mydomain.com # server3 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: blackbox-exporter:9115 |
Проверка синтаксиса конфиг.файла Prometheus и файлов с правилами
1 |
# (cd /home/myusername/monstack && ../prometheus-2.10.0.linux-amd64/promtool check config ./prometheus/prometheus.yml && echo OK || echo FAIL) |
Проверка синтаксиса docker-compose.yml файла
1 |
# docker-compose config |
Создаем и запускаем blackbox-exporter, проверяем корректность его запуска
1 |
# docker-compose up -d blackbox-exporter |
1 |
# docker-compose ps | grep blackbox-exporter |
1 |
blackbox-exporter /bin/blackbox_exporter --c ... Up 9115/tcp |
Логи контейнера blackbox-exporter
1 |
# docker-compose logs blackbox-exporter |
1 2 3 |
blackbox-exporter | level=info ts=2019-08-23T14:23:43.187317952Z caller=main.go:213 msg="Starting blackbox_exporter" version="(version=0.14.0, branch=HEAD, revision=bba7ef76193948a333a5868a1ab38b864f7d968a)" blackbox-exporter | level=info ts=2019-08-23T14:23:43.18852946Z caller=main.go:226 msg="Loaded config file" blackbox-exporter | level=info ts=2019-08-23T14:23:43.188778232Z caller=main.go:330 msg="Listening on address" address=:9115 |
После чего проверяем в Prometheus наличие новых целей для мониторинга
Prometheus→Status→Target
3.Настройка правил Prometheus для мониторинга ICMP-доступности хоста
Добавляем два правила для мониторинга ICMP-доступности хоста
1.Хост не доступен по ICMP-протоколу вообще(т.е нет ответа в течение отведенного в проверке времени выполнения — в нашем случае 5 секунд (параметр timeout в конфигурационном файле Blackbox-экспортера))
2.Время ответа от сервера слишком долгое — более 1-й секунды
Здесь суммируется все время выполнения разименования хоста(resolve), установки соединения(setup) и непосредственно время между отправкой запроса и получением ответа(rtt)
1 |
# nano prometheus/hosts_rules.yml |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
groups: - name: hosts rules: ######### ICMP ########## - alert: host_is_not_available_via_icmp expr: probe_success{job="blackbox-icmp-general"} == 0 for: 3m labels: severity: critical annotations: description: "Host {{ $labels.instance }} is not available via icmp-protocol for more than 3 minutes." summary: "Host {{ $labels.instance }} is down" - alert: host_response_time_is_high_via_icmp expr: sum by (instance) (probe_icmp_duration_seconds) > 1 for: 1m labels: severity: warning annotations: description: "Host {{ $labels.instance }} response time via icmp-protocol is very high(>1s) for more than 1 minutes." summary: "Host {{ $labels.instance }} response time is {{ humanize $value}}s" |
Проверка синтаксиса конфиг.файла Prometheus и файлов с правилами
1 |
# (cd /home/myusername/monstack && ../prometheus-2.10.0.linux-amd64/promtool check config ./prometheus/prometheus.yml && echo OK || echo FAIL) |
Перечитываем конф.файл Prometheus
1 |
# curl -X POST https://adminuser:adminpassword@prometheus.mydomain.com/-/reload |
После чего в Prometheus→Alerts появляются добавленные правилами
При изменении конфигурационного файла blackbox-exporter-а blackbox.yml для применения новых настроек достаточно послать POST запрос на перечитывание своего конф.файл blacbox-exporter контейнеру. Если в этом файле будут ошибки,то изменения не применяются и соответствующая ошибка будет в выводе такого POST-запроса
Например, это можно сделать из любого контейнера, который находится в одной docker-сети с blackbox-exorter-контейнером и у которого установлен curl
Например, внутри контейнера с grafana выполним команду по перезагруки blackbox-exporter
1 |
# ( cd /home/myusername/monstack && docker-compose exec grafana curl -X POST http://blackbox-exporter:9115/-/reload) |
Источник:
https://github.com/prometheus/blackbox_exporter
https://github.com/prometheus/blackbox_exporter/blob/master/CONFIGURATION.md