6.6 KiB
Основы мониторинга
Одна из главных задач системного администратора или DevOps-инженера это мониторинг состояния и работоспособности подотчетных ему систем.
Инструментов и средств для мониторинга существует огромное множество, и в простейших случаях они могут быть даже самописными. Вы уже сталкивались с такими в приложениях cats_app
и при использовании healthcheck в Docker. В реальном мире для мониторинга используются внешние сторонние инструменты, такие, как Google Analytics, Zabbix, Elastic Search(и вообще стек ELK), Sentry, и другие, однако на этом занятии мы рассмотрим один из наиболее распространенных стеков программного обеспечения, применяемых для этих задач - Prometheus + Grafana.
Prometheus
Prometheus - это серверное ПО, собирающее метрики из каких-либо других систем, и хранящее их в своей специализированной базе данных, приспособленной для обработки временных рядов(time series).
Отличие метрик от логов в том, что метрики дают более общую картину о каком-либо процессе, тогда как логи обычно показывают какое-либо событие или же их последовательность.
Prometheus может собирать метрики сам, делая запросы по HTTP(если какая либо платформа и система имеет возможность их таким образом показывать), либо же, получать их через сторонние средства, называемые экспортерами(exporters). Один из наиболее примечательных экспортеров называется node-exporter
, который собирает информацию об операционной системе, на которой запущен.
После того как метрики были собраны в базу, к ней можно делать запросы на специализированном языке PromQL, специально предназначенном для обработки временных рядов и статистики, точно так же как SQL предназначен для обработки реляционных данных.
Prometheus поддерживает 4 вида метрик "из коробки":
Counter
- метрика этого типа используется чтобы замерять какое-либо неубывающее значение, как пример - общее количество HTTP-запросов к серверу.Gauge
- данный вид метрик используется для отображения значений, которые могут как увеличиваться, так и уменьшаться. Пример - количество памяти, занимаемой процессом.Histogram
- такие метрики представляют собой счетчики событий для нескольких заданных диапазонов. Используются, например, для отслеживания времени обработки HTTP-запросов.Summary
- похожи наHistogram
, но представляют собой препросчитанное разбиение значений по квантилям. Этот тип метрик не поддерживает агрегацию, что делает его слабо приспособленным для распределенных приложений в кластере.
К каждой метрике Prometheus могут быть прикрепленые разные метки(label), которые позволяют, например, идентифицировать источник информации.
После того, как метрики были собраны в TSDB - внутреннюю базу данных Prometheus, их могут собирать и обрабатывать сторонние системы, такие как Grafana(для их визуализации), или, например, Alertmanager(для, к примеру, оповещения о превышении каких-либо значений путем email, slack и т.п.; его использование выходит за рамки данного занятия).
Grafana
Grafana это система для визуализации данных с открытым исходным кодом. Очень часто используется в связке вместе с Prometheus.
Хотя веб-интерфейс самого Prometheus позволяет создавать базовые визуализации, Grafana добавляет множество удобств - возможность группировки визуализаций в Dashboard, помощь в составлении выражений PromQL, огромное количество видов визуализаций, плагины, и так далее.
По Grafana существует больше количество подробной документации и примеров, как на официальном сайте, так и в других местах интернета.
Полезные ссылки
- https://prometheus.io/docs/prometheus/latest/getting_started/
- https://habr.com/ru/companies/tochka/articles/683608/
- https://povilasv.me/prometheus-tracking-request-duration/
- https://www.innoq.com/en/blog/2020/04/scraping-docker-swarm-service-instances-with-prometheus/
- https://github.com/prometheus/node_exporter
- https://prometheus.io/docs/practices/histograms/
- https://prometheus.io/docs/visualization/grafana/
- https://grafana.com/docs/
- https://grafana.com/blog/2020/06/23/how-to-visualize-prometheus-histograms-in-grafana/
- https://www.timescale.com/blog/four-types-prometheus-metrics-to-collect/