From 2d6cfcbbefd295bdb9891522f019db4da3e42190 Mon Sep 17 00:00:00 2001 From: Dmitry Ignatiev Date: Sun, 19 Nov 2023 22:44:33 +0300 Subject: [PATCH] m2/monitoring - questions & lection --- module2/10_monitoring_basics/lection.md | 37 ++++++++++++++++++++++- module2/10_monitoring_basics/questions.md | 11 +++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/module2/10_monitoring_basics/lection.md b/module2/10_monitoring_basics/lection.md index 0a1f269..1d9714c 100644 --- a/module2/10_monitoring_basics/lection.md +++ b/module2/10_monitoring_basics/lection.md @@ -1,10 +1,45 @@ +## Основы мониторинга -## Ссылки +Одна из главных задач системного администратора или 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/ diff --git a/module2/10_monitoring_basics/questions.md b/module2/10_monitoring_basics/questions.md index e69de29..8046c1e 100644 --- a/module2/10_monitoring_basics/questions.md +++ b/module2/10_monitoring_basics/questions.md @@ -0,0 +1,11 @@ +1. Чем метрики отличаются от логов? +2. Как называется файл конфигурации Prometheus? +3. Какие виды метрик поддерживает Prometheus? +4. Зачем нужны экспортеры(exporters)? +5. Что делает node_exporter, для чего он нужен? +6. Какие типы данных поддерживает PromQL? +7. Что делает функция `rate()` из PromQL и зачем она нужна? +8. Как в PromQL вывести среднее значение какой-либо метрики(напр. типа Gauge, и с названием my_metric), за последние 5 минут? +9. Как сконфигурировать Prometheus в кластере Docker Swarm так, чтобы он собирал метрики из всех репликаций какого-либо сервиса Swarm, доступных по одному доменному имени? +10. Как установить пароль администратора в Grafana? +11. Как экспортировать Dashboard в Grafana и потом импортировать назад?