Привет, Хабр! Мониторинг сегодня – фактически обязательная «часть программы» для компании любых размеров. В данной статье мы попробуем разобраться в многообразии программного обеспечения для мониторинга и рассмотрим подробнее одно из популярных решений –  систему на основе Prometheus и Grafana На заре появления компьютерных сетей в конце 1970х – начале 1980х гг. главной задачей мониторинга была проверка связности и доступности серверов. В 1981 году появился протокол ICMP, на основе которого в декабре 1983 года написана утилита ping, а позднее и traceroute, которые используются для диагностики сетевых неполадок и по сей день. Следующим этапом стало создание в 1988 году протокола SNMP, что привело к рождению MRTG – одной из первых программ для мониторинга и измерения нагрузки трафика на сетевые каналы. Параллельно с середины 1980х гг. стало активно разрабатываться программное обеспечение для мониторинга потребления ресурсов компьютерами, такое как top, vmstat, nmon, Task Manager и др. К середине 1990х годов в связи с ростом ИТ инфраструктуры многие компании стали испытывать потребность в комплексной и централизованной системе мониторинга, что послужило спусковым крючком для синхронного начала разработки нескольких прототипов. В 1999-2002 гг. на свет появились решения, предопределившие развитие отрасли на годы вперед и развивающиеся до сих пор – Cacti, Nagios и Zabbix. Мониторинг в ИТ сегодня – это система, которая позволяет в режиме реального времени выявлять проблемы в ИТ инфраструктуре, а также оценивать тренды использования ресурсов. Как правило состоит из нескольких базовых компонентов – сбора сырых данных, обработки данных с целью их анализа, рассылки уведомлений и пользовательского интерфейса для просмотра графиков и отчетов. В настоящее время существует большое количество систем для мониторинга различных категорий – сети, серверной инфраструктуры, производительности приложений (APM), реального пользователя (RUM), безопасности и др. Таким образом, мониторить можно все – от сетевой доступности узлов в огромной корпорации до значений датчика температуры в спальне в «умном» доме. Читать подробнее: A Brief History of Network Monitoring Tools Introduction to IT monitoring Для цельности картины рассмотрим несколько примеров систем мониторинга: PingInfoView, SolarWinds pingdom и др.Ping – наиболее известный способ проверки доступности узлов в сети. Программы, умеющие с определенным интервалом пинговать набор сетевых узлов и отражающие в режиме реального времени графики доступности, по сути есть зародыш системы мониторинга. Выручат, если полноценной системы мониторинга еще нет ZabbixПоддерживает сбор данных из различных источников – как с помощью агентов (реализованы под большинство распространенных платформ), так и без них (agent-less) посредством SNMP и IPMI, ODBC, ICMP и TCP проверок, HTTP запросов и т.д., а также собственных скриптов. Имеются инструменты для преобразования и анализа данных, подсистема рассылки уведомлений и веб-интерфейс. Свободно распространяется по лицензии GNU GPL v2 (бесплатно) PRTGПоддерживает сбор данных без агентов посредством преднастроенных сенсоров SNMP, WMI, Database, ICMP и TCP проверок, HTTP запросов и т.д., а также собственных скриптов. Имеются инструменты для анализа данных, удобная подсистема рассылки уведомлений и веб-интерфейс. Является коммерческим продуктом, лицензируется по количеству сенсоров. PRTG Network Monitor с количеством сенсоров не более 100 доступен для использования бесплатно Nagios Core / Nagios XIПоддерживает сбор данных с помощью агентов (реализованы под большинство распространенных платформ) и без них посредством SNMP и WMI, а также расширений и собственных скриптов. Имеются инструменты для анализа данных, подсистема рассылки уведомлений и веб-интерфейс. Nagios Core свободно распространяется по лицензии GNU GPL v2 (бесплатно), Nagios XI является коммерческим продуктом. Подробнее о различиях между Nagios Core и Nagios XI можно почитать в статье Nagios Core vs. Nagios XI: 4 Key Differences  IcingaПоявилась как форк Nagios. Поддерживает сбор данных с помощью агентов, а также расширений и собственных скриптов. Имеются инструменты для анализа данных, подсистема рассылки уведомлений и веб-интерфейс. Свободно распространяется по лицензии GNU GPL v2 (бесплатно) PrometheusЯдро – БД временных рядов (Time series database, TSDB). Поддерживает сбор данных из различных источников посредством экспортеров и шлюза PushGateway. Имеются инструменты для анализа данных, подсистема уведомлений и простой веб-интерфейс. Для визуализации рекомендуется использовать Grafana. Свободно распространяется по лицензии Apache License 2.0 (бесплатно) VictoriaMetricsЯдро – БД временных рядов (TSDB). Поддерживает сбор данных из различных источников посредством экспортеров (совместимых с Prometheus), интеграции с внешними системами (например, Prometheus) и прямых запросов на вставку. Имеются инструменты для анализа данных, подсистема уведомлений и простой веб-интерфейс. Для визуализации рекомендуется использовать Grafana. Свободно распространяется по лицензии Apache License 2.0 (бесплатно) GrafanaНе является системой мониторинга, однако не упомянуть ее в контексте статьи просто нельзя. Является прекрасной системой визуализации и анализа информации, которая позволяет «из коробки» работать с широким спектром источников данных (data source) – Elasticsearch, Loki, MS SQL, MySQL, PostgreSQL, Prometheus и др. При необходимости также интегрируется с Zabbix, PRTG и др. системами. Свободно распространяется по лицензии GNU AGPL v3 (бесплатно) Читать подробнее: Best Enterprise Monitoring Software Топ 20 бесплатных систем мониторинга Рассмотрим подробнее схему взаимодействия компонентов системы мониторинга на основе Prometheus. Базовая конфигурация состоит из трех компонентов экосистемы: Экспортеры (exporters)Экспортер собирает данные и возвращает их в виде набора метрик. Экспортеры делятся на официальные (написанные командой Prometheus) и неофициальные (написанные разработчиками различного программного обеспечения для интеграции с Prometheus). При необходимости есть возможность писать свои экспортеры и расширять существующие дополнительными метриками PrometheusПолучает метрики от экспортеров и сохраняет их в БД временных рядов. Поддерживает мощный язык запросов PromQL (Prometheus Query Language) для выборки и аггрегации метрик. Позволяет строить простые  графики и формировать правила уведомлений (alerts) на основе выражений PromQL для отправки через Alertmanager AlertmanagerОбрабатывает уведомления от Prometheus и рассылает их. С помощью механизма приемников (receivers) реализована интеграция с почтой (SMTP), Telegram, Slack и др. системами, а также отправка сообщений в собственный API посредством вебхуков (webhook) Таким образом, базовая конфигурация позволяет собирать данные, писать сложные запросы и отправлять уведомления на их основе. Однако по-настоящему потенциал Prometheus раскрывается при добавлении двух дополнительных компонентов (или как минимум одного – Grafana): VictoriaMetricsПолучает метрики из Prometheus посредством remote write. Поддерживает язык запросов MetricsQL, синтаксис которого совместим с PromQL. Предоставляет оптимизированное по потреблению ресурсов хранение данных и высокопроизводительное выполнение запросов. Идеально подходит для долговременного хранения большого количества метрик Имеет ли смысл рассматривать VictoriaMetrics как полноценную замену Prometheus, а не его дополнение (параллельную инсталляцию)? Вероятнее всего да. Экспортеры совместимы (для сбора данных можно дополнительно использовать vmagent), а для формирования уведомлений есть vmalert   GrafanaПредоставляет средства визуализации и дополнительного анализа информации из Prometheus и VictoriaMetrics. Есть примеры дашбордов практически под любые задачи, которые при необходимости можно легко  доработать. Создание собственных дашбордов также интуитивно (разумеется, за исключением некоторых тонкостей) – достаточно знать основы PromQL / MetricsQL Де-факто использование Grafana вместе с Prometheus уже стало стандартом, в то время как добавление в конфигурацию VictoriaMetrics безусловно опционально и необходимо скорее для высоконагруженных систем. Итак, система мониторинга на основе Prometheus – PAVG (Prometheus, Alertmanager, VictoriaMetrics, Grafana) – предоставляет широкий спектр возможностей. Рассмотрим ее практическое применение. Для упрощения предположим, что основные компоненты будут развернуты на одном сервере мониторинга с примением docker и systemd, а также вынесем требования безопасности за рамки данной статьи. Все ниженаписанное является лишь иллюстрацией, которая призвана помочь ознакомиться с рассматриваемой системой Экспортеры могут быть развернуты на сервере мониторинга (например blackbox), на целевых серверах (kafka, mongodb, jmx и др.) или на всех серверах (node, cadvisor и др.). Как правило не требовательны к аппаратным ресурсам. В качестве примера возьмем три экспортера – node (сбор данных по ЦПУ, ОЗУ, дисковой подсистеме и сети), cadvisor (сбор информации о контейнерах) и blackbox (проверка точек входа TCP, HTTP/HTTPS и др.). Для развертывания необходимо: Создать /etc/systemd/system/node-exporter.service  Создать /etc/systemd/system/cadvisor.service  Создать /etc/systemd/system/blackbox-exporter.service  Запустить сервисы Проверить работу (здесь <hostname> – DNS запись или IP адрес вашего сервера)http://<hostname>:9100/metrics (node)http://<hostname>:8080/metrics (cadvisor)http://<hostname>:9115/metrics (blackbox)http://<hostname>:9115/probe?target=github.com&module=http_2xxhttp://<hostname>:9115/probe?target=github.com:443&module=tcp_connect Экспортеры реализованы практически под все распространенное программное обеспечение, причем зачастую от нескольких разработчиков с разным набором метрик. Поиск не составляет труда – достаточно дать запрос на GitHub, DockerHub или в любимой поисковой системе. Однако в случае необходимости можно написать свой экспортер – например на Go или Python. Как правило не требователен к аппаратным ресурсам. Для развертывания необходимо: Подготовить каталог для конфигурационного файла Создать /etc/alertmanager/alertmanager.yml  В рассматриваемом примере уведомления рассылаются на почту и две дополнительные точки входа API – для срочных уведомлений (warning|error|critical) и отчетов (info). Подробнее о подготовке конфигурации можно почитать в статье Alerting Configuration Создать /etc/systemd/system/alertmanager.service  Запустить сервис Проверить работу (здесь <hostname> – DNS запись или IP адрес вашего сервера)http://<hostname>:9093http://<hostname>:9093/#/alertshttp://<hostname>:9093/#/status Для обеспечения высокой доступности Alertmanager поддерживает развертывание в кластерной конфигурации. Подробнее о создании кластера можно почитать в статье Alerting High Availability. Потребление ресурсов VictoriaMetrics зависит от количества опрашиваемых экспортеров и собираемых метрик, нагрузки запросами на чтение, глубины хранения данных и др. факторов. Вывести средние значения для старта достаточно сложно, однако для небольшой инсталляции достаточно 1 ядра ЦПУ, 2 ГБ ОЗУ и 20 ГБ дискового пространства. Для развертывания необходимо: Подготовить каталог для хранения данных Создать /etc/systemd/system/victoriametrics.service  Указано хранение метрик в течение 2 месяцев Запустить сервис Проверить работу (здесь <hostname> – DNS запись или IP адрес вашего сервера):http://<hostname>:8428 Потребление ресурсов Prometheus зависит от количества опрашиваемых экспортеров и собираемых метрик, нагрузки запросами на чтение, глубины хранения данных и др. факторов. Вывести средние значения для старта достаточно сложно, однако для небольшой инсталляции достаточно 1 ядра ЦПУ, 2 ГБ ОЗУ и 20 ГБ дискового пространства. Для развертывания необходимо: Создать пользователя и подготовить каталоги для конфигурационных файлов и хранения данных Обязательно убедиться, что на раздел с каталогом для хранения данных выделено достаточно дискового пространства   Создать конфигурационный файл /etc/prometheus/prometheus.yml (здесь <hostname> – DNS запись или IP адрес вашего сервера)  Создать правила уведомлений /etc/prometheus/rule_files/main.yml  В данном случае для примера мы добавили только один файл c несколькими группами правил, однако в больших инсталляциях для удобства группы распределены по различным файлам – application, container, hardware, kubernetes, mongodb, elasticsearch и т.д. Создать /etc/systemd/system/prometheus.service  Указано хранение метрик в течение 14 суток Запустить сервис Проверить работу (здесь <hostname> – DNS запись или IP адрес вашего сервера)http://<hostname>:9090Status → Configuration, Status → Rules, Status → Targets  Для обеспечения высокой доступности Prometheus может быть развернут в нескольких экземплярах, каждый из которых будет опрашивать экспортеры и сохранять данные в локальную БД. Grafana не слишком требовательна к потреблению ресурсов – для небольшой инсталляции достаточно 1 ядра ЦПУ и 1 ГБ ОЗУ (хотя, конечно, есть нюанс...). Для развертывания необходимо: Создать пользователя и подготовить каталоги для конфигурационных файлов и хранения данных Создать файл декларативного описания источников данных /etc/grafana/provisioning/datasources/main.yml (здесь <hostname> – DNS запись или IP адрес вашего сервера)  Создать файл декларативного описания дашбордов /etc/grafana/provisioning/dashboards/main.yml  Добавить дашборд Node Exporter Full в каталог /data/grafana/dashboards Репозиторий и его содержимое актуальны на начало 2023 года   Создать /etc/systemd/system/grafana.service  Запустить сервис Проверить работу (здесь <hostname> – DNS запись или IP адрес вашего сервера)http://<hostname>:3000 (учетные данные по умолчанию – admin/admin, желательно сразу изменить пароль)Configuration → Data sourcesExplore → Metric → up → Run queryDashboards → Browse → General → Node Exporter Full На практике могут быть полезны следующие простые советы: Ищите проверенные экспортеры под свои потребности. В этом может помочь статья Топ-10 экспортеров для Prometheus 2023 Обязательно изучите PromQL Cheat Sheet Почаще исследуйте метрики в «сыром» виде (от экспортеров) Система мониторинга на основе Prometheus описывается декларативно. Храните конфигурации в git и используйте ansible для автоматизации За помощь в подготовке статьи автор выражает благодарность @novikov0805, @Eviil и @KoPashka Все статьи серии: Основы Linux (обзор с практическим уклоном) Основы виртуализации (обзор) Основы контейнеризации (обзор Docker и Podman) Основы мониторинга (обзор Prometheus и Grafana)