Comments 17
Скажите, чем лучше/хуже решение на Prometheus такого же, но построенного на Zabbix?
Тема очень актуальная. Не хватает ссылку на оригинал. Может кто-нибудь подскажет где получить эти шаблоны панели управления, на grafana.net я не нашёл.
Ссылка на оригинал — внизу поста. Или вот: https://stefanprodan.com/2016/a-monitoring-solution-for-docker-hosts-containers-and-containerized-services/
Шаблоны вот тут:
https://grafana.net/dashboards
За статью спасибо. Развернул — нравится. Очень порадовало что есть шаблон для БД Cassandra. Осталось собрать docker-compose с кассандрой.
https://grafana.net/dashboards
За статью спасибо. Развернул — нравится. Очень порадовало что есть шаблон для БД Cassandra. Осталось собрать docker-compose с кассандрой.
Спасибо за статью! А возможно ли также быстро и красиво настроить мониторинг каждого контейнера?
Вы, везде над скринами пишете «Панель управления», на самом деле это «Панель мониторинга» или ещё проще «Dashboard».
Хотелось бы добавить что данное решение легко модифицируется для организации быстрого мониторинга БД Cassandra (а значит чего угодно, что может мониторить связка prometheus/grafana)
Рецепт для касандры:
Я взял докер кассандры с интегрированным java-агентом для прометеуса вот отсюда: https://github.com/argussecurity/docker-cassandra-prometheus/blob/master/Dockerfile
В докерфайле изменил только версию кассандры на 3.9 и в последней строке заменил переменную ${PROMETHEUS_PORT:-31500} на статическую 7070
После модифицировал файл docker-compose.yml.
В моем случае добавился следующий раздел:
cassandra:
image: cassandra-prometheus
container_name: cassandra-nod1
restart: unless-stopped
environment:
— CASSANDRA_BROADCAST_ADDRESS=192.168.ваш.параметр
volumes:
— /etc/cassandra
expose:
— 7000
— 7001
— 7070
— 7199
— 9042
— 9160
ports:
— 7000:7000
— 7001:7001
— 7070:7070
— 7199:7199
— 9042:9042
— 9160:9160
networks:
— monitor-net
И в prometheus.yml добавил:
— job_name: 'cassandra'
scrape_interval: 10s
static_configs:
— targets: ['cassandra-nod1:7070']
После этого по сценарию из поста добавил шаблон для кассандры.
Всё.
Рецепт для касандры:
Я взял докер кассандры с интегрированным java-агентом для прометеуса вот отсюда: https://github.com/argussecurity/docker-cassandra-prometheus/blob/master/Dockerfile
В докерфайле изменил только версию кассандры на 3.9 и в последней строке заменил переменную ${PROMETHEUS_PORT:-31500} на статическую 7070
После модифицировал файл docker-compose.yml.
В моем случае добавился следующий раздел:
cassandra:
image: cassandra-prometheus
container_name: cassandra-nod1
restart: unless-stopped
environment:
— CASSANDRA_BROADCAST_ADDRESS=192.168.ваш.параметр
volumes:
— /etc/cassandra
expose:
— 7000
— 7001
— 7070
— 7199
— 9042
— 9160
ports:
— 7000:7000
— 7001:7001
— 7070:7070
— 7199:7199
— 9042:9042
— 9160:9160
networks:
— monitor-net
И в prometheus.yml добавил:
— job_name: 'cassandra'
scrape_interval: 10s
static_configs:
— targets: ['cassandra-nod1:7070']
После этого по сценарию из поста добавил шаблон для кассандры.
Всё.
Тут ещё в Grafana алерты обещают завести. Сегодня бета релизнулась http://grafana.org/blog/2016/11/09/grafana-4.0-beta-release/
Спустя три года — алерты в графане использовать — плохой тон.
Они великолепны, если есть юзер, который вообще не умеет в прометеус-алертменеджер, и нужно слепить алертилку быстро. Но дальше начинаются недостатки:
- сложные алерты не построишь
- если нужен алерт по шаблонизированному дашборду — до свидания, не работает
- если нужен алерт по метрике, который нет на панели типа график — тоже мимо, приходится делать фейковые панели, в которые никто никогда не будет смотреть.
А кто-нибудь может подсказать, как защитить cAdvisor и NodeExporter от доступа из вне. Они ведь в данной конфигурации работают в хостовой сети и у каждого есть веб-интерфейс. Т.е. кто угодно может зайти по IP сервера на нужный порт и увидеть метрики которые выгружаются. Посмотреть на все запущеные на хосте контейнеры…
ALERT monitor_service_down
IF up == 0
FOR 30s
LABELS { severity = "critical" }
ANNOTATIONS {
summary = "Monitor service non-operational",
description = "{{ $labels.instance }} service is down.",
}
А почему не такой синтаксис:
- alert: Watchdog
expr: vector(1)
for: 10m
labels:
severity: warning
annotations:
description: 'This is an alert meant to ensure that the entire alerting pipeline is functional.
This alert is always firing, therefore it should always be firing in Alertmanager
and always fire against a receiver. There are integrations with various notification
mechanisms that send a notification when this alert is not firing. For example the
"DeadMansSnitch" integration in PagerDuty.'
summary: 'Ensure entire alerting pipeline is functional'
Sign up to leave a comment.
Мониторинг докер-хостов, контейнеров и контейнерных служб