HA prometheus
Возникла необходимость сделать отказоустойчивый prometheus, благо что он такое умеет, хоть и немного странно. Но нагуглить какой-то гайд мне сходу не удалось, поэтому пишу свой.
Вводные
Используем 2 сервера, на каждом только docker + docker-compose без swarm. Большинство гайдов как раз про оркестрацию, мол запускаем несколько prometheus и alertmanager в service-mesh в единственном экземпляре и оно работает, alertmanager же stateless.
Но меня такое не устроило, поэтому приступим.
Настройка alertmanager
Чтобы переключить alertmanager в кластерный режим нужно указать параметр запуска --cluster.listen-address=
с любым адресом и портом, например 0.0.0.0:9094
. Параметр --cluster.advertise-address
так и не понял на что влияет, без него само находится. Так же важно перечислить всех пиров в параметре --cluster.peer
по параметру на пира.
Естественно 9094 порт нужно открыть, пишут что там tcp и udp но я увидел только tcp.
Настройка promtheus
Чтобы добавить таких alertmanager ов, нужно в конфиге прометея указать их всех. Они сами между собой договорятся, кто посылает алерты.
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager1:9093
- alertmanager2:9093
- alertmanager3:9093
Iptables
Поскольку у нас не swarm и сервисы взаимодействуют друг с другом через интернет, нужно ограничить трафик. В ходе настройки стало ясно, что сервисы взаимодействуют и сами с собой поэтому нужно изменить имя моста создаваемого docker-compose. Для этого изменим секцию networks:
networks:
default:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
com.docker.network.bridge.name: "monitoring" # need for iptables
Создадим цепочку
iptables -N monitoring
Направим весь трафик в неё
iptables -I DOCKER-USER -j MONITORING
И запоним её правилами
iptables -A MONITORING -i monitoring -j ACCEPT # разрешаем подключения с моста
iptables -A MONITORING -s 192.168.30.12/32 -p tcp -m tcp --dport 9094 -j ACCEPT #Разрешаем подключения со второго сервера
iptables -A MONITORING -p tcp -m tcp --dport 9094 -j DROP # Всех остальных дропаем