• »
  • »

Превентивный мониторинг на базе Prometheus/VictoriaMetrics, Grafana: практика DevOps

Автор: Максим Федотов, ведущий DevOps инженер Git in Sky
Горящий экран монитора с надписью DDOS
Несмотря на то, что тема мониторинга поднималась уже бесчисленное количество раз, позволю себе внести свои пять копеек на тему конкретно этой связки — Prometheus/VictoriaMetrics/Grafana, исходя из собственного инженерного опыта. Буквально несколько слов о том, что такое системы мониторинга и где они применяются.

Системы мониторинга — это программное обеспечение, которое используется для отслеживания и анализа работы информационных систем на серверах и в компьютерных сетях. Они позволяют IT-специалистам получать уведомления об ошибках, проблемах с производительностью и других важных событиях, связанных с IT-инфраструктурой компании.

Почему я говорю «превентивный мониторинг». Под «превентивным» я и мои коллеги из команды Git in Sky подразумеваем такой мониторинг, который позволит своевременно обнаружить угрозу возникновения аварии по симптомам и предотвратить её. Для этого как правило мы стараемся организовать комплексную систему мониторинга, которая бы охватывала все приложения и стеки ПО, серверы, низкоуровневые метрики, бизнес метрики и настраиваем алёрты.

Для организации превентивного мониторинга мы активно используем математические функции типа predict_linear для прогнозирования ситуаций и инцидентов с помощью проработки сценариев.

Пример: функция прогнозирования позволяет определить, что, к примеру, если приложение, которое сейчас осуществляет запись на определённый сервер, будет продолжать запись с такой же интенсивностью ещё 4 часа, то место на диске закончится или что на сервере закончится оперативная память.

В настоящее время существует множество различных систем мониторинга, отличающихся по функциональным возможностям, интерфейсу, алгоритмам работы. Технологическим стандартом для построения мониторинга в Git in Sky, где я работаю, стало использование Prometheus, VictoriaMetrics и Grafana.

Prometheus и Grafana являются двумя популярными инструментами для мониторинга и визуализации данных IT-инфраструктур. Prometheus — это система мониторинга и оповещения с открытым исходным кодом, разработанная для мониторинга метрик и журналов. Он использует сбор данных через HTTP и собственный язык запросов PromQL для анализа и визуализации данных. Prometheus может быть интегрирован с различными системами, такими как Kubernetes, Docker, Consul и многими другими, а Grafana используется для визуализации этих метрик в виде графиков и диаграмм.

Совместное использование Prometheus, VictoriaMetrics и Grafana позволяет быстро и эффективно анализировать работу IT-инфраструктуры и принимать необходимые меры для устранения проблем. Кроме того, интеграция Prometheus, VictoriaMetrics и Grafana позволяет IT-специалистам получать уведомления о проблемах с помощью оповещений Grafana.
Сайты тормозят? Хотите понять, в чем проблема?
Запишитесь на бесплатную консультацию по улучшению IT-инфраструктуры.

За 45 минут наш архитектор разберется в вашей IT-инфраструктуре и даст конкретные рекомендации по улучшению

Преимущества использования Prometheus, VictoriaMetrics и Grafana

  • Гибкость
    Prometheus, VictoriaMetrics и Grafana имеют множество настраиваемых опций, которые позволяют настроить мониторинг под конкретные потребности компании.
  • Простота использования
    Grafana имеет простой интерфейс, который легко использовать даже без специальных знаний.
  • Визуализация
    Grafana обеспечивает широкий выбор графических элементов, которые могут использоваться для визуализации данных из Prometheus.
  • Оповещения
    Prometheus, VictoriaMetrics и Grafana предоставляют возможность настроить оповещения о проблемах и событиях в режиме реального времени.
  • Масштабируемость
    Prometheus, VictoriaMetrics и Grafana могут быть масштабированы в зависимости от потребностей компании.
Использование Prometheus совместно с Grafana позволяет быстро отслеживать проблемы и производительность IT-инфраструктуры компании, что позволяет быстро реагировать на изменения и улучшать производительность.

В случаях когда требуется собирать большое количество метрик или когда требуется обработка большого количества запросов, Prometheus и VictoriaMetrics позволяет осуществить масштабирование для обеспечения сбора и обработки метрик. В таких случаях можно использовать следующие методы масштабирования Prometheus, VictoriaMetrics:

  1. Горизонтальное масштабирование: это метод, при котором вы можете добавлять дополнительные экземпляры Prometheus, VictoriaMetrics для распределения нагрузки. Эти экземпляры могут быть развернуты на разных серверах или в контейнерах, что обеспечивает более высокую доступность и производительность.
  2. Федерация: это метод, при котором вы можете настроить несколько экземпляров Prometheus, VictoriaMetrics для сбора метрик из различных источников и собрать все данные в единую базу данных. Это позволяет управлять большим количеством метрик и запросов, обеспечивая высокую производительность и масштабируемость.
  3. Шардинг: это метод, при котором вы можете разделить базу данных Prometheus, VictoriaMetrics на несколько частей, каждая из которых будет содержать определенный набор метрик. Это позволяет управлять большим количеством метрик и запросов, распределяя нагрузку между несколькими экземплярами Prometheus, VictoriaMetrics.
  4. Использование вычислительных ресурсов: для повышения производительности Prometheus, VictoriaMetrics можно использовать высокопроизводительное оборудование и оптимизировать настройки Prometheus, VictoriaMetrics и операционной системы. Например, вы можете настроить количество потоков для обработки запросов и увеличить объем доступной памяти.
Кроме того, для масштабирования Prometheus, VictoriaMetrics можно использовать инструменты управления контейнерами, такие как Kubernetes, для автоматизации управления экземплярами Prometheus, VictoriaMetrics и обеспечения высокой доступности и масштабируемости.

Масштабирование Grafana может потребоваться, когда требуется обработка большого количества данных и запросов, а также для обеспечения высокой доступности. Для масштабирования Grafana могут быть использованы следующие методики:

  1. Горизонтальное масштабирование: это метод, при котором вы можете добавлять дополнительные экземпляры Grafana для распределения нагрузки. Эти экземпляры могут быть развернуты на разных серверах или в контейнерах, что обеспечивает более высокую доступность и производительность.
  2. Использование кэширования: для ускорения работы Grafana можно использовать кэширование данных. Например, вы можете настроить кэширование запросов к базе данных или использовать специальные инструменты, такие как Redis, для кэширования данных.
  3. Использование прокси-серверов: для балансировки нагрузки между несколькими экземплярами Grafana можно использовать прокси-серверы, такие как NGINX или HAProxy. Это позволяет обеспечить высокую доступность и производительность при работе с большим количеством запросов.
  4. Использование инструментов управления контейнерами: для автоматизации управления экземплярами Grafana и обеспечения высокой доступности и масштабируемости можно использовать инструменты управления контейнерами, такие как Kubernetes или Docker Swarm.
  5. Использование облачных сервисов: для упрощения масштабирования и обеспечения высокой доступности можно использовать облачные сервисы, такие как Amazon Web Services, Microsoft Azure или Google Cloud Platform. Эти сервисы позволяют быстро развернуть и масштабировать экземпляры Grafana в облаке, а также автоматически обеспечивают высокую доступность и производительность.
Prometheus и VictoriaMetrics - это инструменты мониторинга и анализа метрик, которые могут использоваться для различных задач в IT-сфере, например:

  1. Мониторинг приложений: Prometheus и VictoriaMetrics могут использоваться для мониторинга производительности и доступности приложений. Они могут собирать и анализировать метрики, такие как время ответа на запросы, количество запросов и ошибок.
  2. Мониторинг инфраструктуры: Prometheus и VictoriaMetrics могут использоваться для мониторинга инфраструктуры, включая серверы, сетевое оборудование и базы данных. Они могут собирать метрики, такие как загрузка CPU, использование памяти, количество подключений к базе данных и другие.
  3. Анализ производительности: Prometheus и VictoriaMetrics могут использоваться для анализа производительности приложений и инфраструктуры. Они могут показывать изменения в метриках во времени и помогать идентифицировать узкие места в системе.
  4. Управление производительностью: Prometheus и VictoriaMetrics могут использоваться для управления производительностью приложений и инфраструктуры. Например, они могут предупреждать о проблемах производительности и автоматически масштабировать приложения в зависимости от нагрузки.
  5. Управление логами: VictoriaMetrics может использоваться для хранения и анализа логов. Он может помочь быстро найти нужную информацию в логах и быстро идентифицировать проблемы.

Это только некоторые примеры использования Prometheus и VictoriaMetrics. Оба инструмента могут быть настроены для решения различных задач в IT-сфере и могут быть интегрированы с другими инструментами мониторинга и анализа данных.

Prometheus и VictoriaMetrics являются инструментами мониторинга и анализа метрик, которые имеют много общих функций, но также имеют некоторые отличия.

Основное различие между Prometheus и VictoriaMetrics заключается в том, что Prometheus является системой сбора и хранения данных, в то время как VictoriaMetrics является сервером для хранения и анализа данных.

Prometheus собирает данные с различных источников, таких как приложения, инфраструктура и другие сервисы. Эти данные затем обрабатываются и хранятся в локальной базе данных Prometheus. Prometheus также обеспечивает функциональность мониторинга, алертинга и визуализации.

VictoriaMetrics, с другой стороны, предоставляет более расширенные возможности анализа данных. Он может хранить данные, собранные Prometheus, а также данные из других источников, таких как логи и трассировки. VictoriaMetrics также обеспечивает поддержку запросов PromQL и SQL, что делает его более гибким в использовании для анализа данных.

Кроме того, VictoriaMetrics предоставляет ряд функций, которых нет в Prometheus, например:

  1. Оптимизированная база данных: VictoriaMetrics использует более эффективную базу данных, чем Prometheus, что позволяет обеспечить более высокую производительность и лучшую масштабируемость.
  2. Кластеризация: VictoriaMetrics предоставляет функцию кластеризации, что позволяет распределить данные между несколькими узлами и обеспечить более высокую доступность.
  3. Длительное хранение данных: VictoriaMetrics может хранить данные на длительный период времени, что позволяет анализировать тенденции и сравнивать данные за разные периоды времени.

В целом, Prometheus и VictoriaMetrics имеют много общих функций и могут использоваться вместе для обеспечения полноценного мониторинга и анализа данных. Выбор между ними зависит от конкретных требований и задач, которые нужно решить.

На основании метрик собранных Prometheus и VictoriaMetrics, возможно настроить уведомление о изменении тех или иных показателей системы, с использование Prometheus AlertManager и/или Grafana.

Prometheus Alertmanager

Prometheus Alertmanager - это компонент системы мониторинга Prometheus, который используется для управления и отправки оповещений об аномалиях, обнаруженных системой мониторинга.

Alertmanager позволяет определять правила для генерации оповещений, определять контакты для уведомления, а также управлять уведомлениями и их рассылкой.

Как работает Alertmanager:

  1. Prometheus обнаруживает аномалии и генерирует соответствующие метрики.
  2. Alertmanager получает метрики из Prometheus и проверяет, соответствуют ли они установленным правилам оповещения.
  3. Если правила соответствуют аномалиям, Alertmanager генерирует оповещения и отправляет их на заранее определенные контакты.
  4. Alertmanager управляет оповещениями, фильтрует и группирует их для более эффективной обработки и рассылки.

Некоторые примеры использования Alertmanager:

  • Оповещения о проблемах инфраструктуры: Alertmanager может быть настроен для оповещения администраторов системы о проблемах, таких как высокая нагрузка, недоступность сервисов или проблемы с хранением данных.
  • Оповещения о проблемах приложения: Alertmanager может использоваться для оповещения разработчиков приложений о проблемах, таких как сбои приложения, длительные задержки или другие ошибки.
  • Уведомления о событиях безопасности: Alertmanager может использоваться для оповещения безопасностных специалистов о потенциальных угрозах безопасности, таких как атаки DDoS или попытки взлома системы.

В целом, Prometheus Alertmanager - это важный компонент системы мониторинга Prometheus, который обеспечивает возможность быстрого и эффективного реагирования на аномалии и проблемы в инфраструктуре или приложениях.

Пример настройки Prometheus Alertmanager может выглядеть следующим образом:

  1. Установите и запустите Prometheus и Alertmanager на своей машине или сервере.
  2. Настройте файл конфигурации Alertmanager в формате YAML. Например, файл может содержать следующие разделы:
global:
  slack_api_url: '<your_slack_api_url>' 
route:
  receiver: slack-notifications
  group_by: [alertname] 
receivers:
- name: slack-notifications 
  slack_configs: 
  - channel: '#monitoring-alerts' 
    title: '{{ template "slack.default.title" . }}' 
    text: '{{ template "slack.default.text" . }}'
Здесь мы определяем глобальную переменную для URL API Slack, а также определяем правила для группировки и отправки оповещений. Мы также определяем список получателей (receivers), который содержит информацию о каналах уведомлений.

3. Настройте Prometheus для отправки метрик на Alertmanager. Для этого необходимо добавить конфигурационный файл в формате YAML со следующим содержимым:
alerting: 
  alertmanagers: 
  - static_configs: 
    - targets: 
      - alertmanager:9093
Здесь мы указываем Prometheus, чтобы он отправлял метрики на Alertmanager, используя адрес и порт Alertmanager.

4. Настройте правила оповещения в Prometheus. Для этого создайте файл правил в формате YAML со следующим содержимым:
groups: 
- name: my-group 
  rules: 
  - alert: high-cpu-usage 
    expr: node_cpu_seconds_total{mode="idle"} < 10 for: 5m 
    labels: 
      severity: critical 
    annotations:
      summary: "High CPU usage detected"
      description: "The CPU usage on the node {{ $labels.instance }} is above the threshold of 10% for the last 5 minutes."
Здесь мы определяем правило для оповещения, которое срабатывает, когда использование CPU на узле меньше 10% в течение последних 5 минут. Мы также определяем метки (labels) и аннотации (annotations) для оповещения.

5. После настройки Prometheus и Alertmanager можно запустить систему мониторинга и начать получать оповещения о проблемах в инфраструктуре.

Это только пример настройки Prometheus Alertmanager, и конфигурация может отличаться в зависимости от требований вашей системы мониторинга.

Для настройки Prometheus Alertmanager для отправки уведомлений в Telegram, нужно выполнить следующие шаги:

  1. Создайте новый бот Telegram и получите его API ключ, следуя инструкциям в официальной документации Telegram. Например, создайте новый чат в Telegram с именем "My Monitoring Alerts" и добавьте в него нового бота.
  2. Определите в Alertmanager конфигурацию для отправки уведомлений в Telegram. Для этого нужно отредактировать файл конфигурации Alertmanager (обычно alertmanager.yml) и добавить следующую секцию:
receivers:
- name: telegram-notifications
  webhook_configs:
  - url: "https://api.telegram.org/bot<your_bot_token>/sendMessage?chat_id=@<your_chat_id>"
    send_resolved: true
    http_config:
      bearer_token: "<your_bot_token>"
Здесь мы создаем новый получатель (receiver) с именем "telegram-notifications" и указываем, что сообщения должны быть отправлены на URL-адрес Telegram Bot API, используя ваш API ключ бота и ID чата вашего канала.

3. Определите правила оповещения Prometheus для срабатывания на нужные события. Например:
groups:
- name: my-group
  rules:
  - alert: high-cpu-usage
    expr: node_cpu_seconds_total{mode="idle"} < 10
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "High CPU usage detected"
      description: "The CPU usage on the node {{ $labels.instance }} is above the threshold of 10% for the last 5 minutes."
    receivers:
    - telegram-notifications
Здесь мы создаем правило, чтобы отправлять уведомления в Telegram при срабатывании оповещения «high-cpu-usage». Мы также указываем, что в этом случае должен использоваться получатель «telegram-notifications».

4. Перезапустите Alertmanager и Prometheus, чтобы изменения вступили в силу. Если все настроено правильно, вы должны начать получать уведомления в вашем канале Telegram.

Это только пример настройки Prometheus Alertmanager для отправки уведомлений в Telegram, и конфигурация может отличаться в зависимости от требований вашей системы мониторинга.

Для сбора и получения метрик в систему мониторинга Prometheus, VictoriaMetrics используются агенты мониторинга, такие, например, как telegraf, node_exporter, postges_exporter.

Telegraf

Telegraf — это агент сбора данных, который позволяет собирать, обрабатывать и отправлять метрики в различные системы мониторинга и хранилища данных. Он поддерживает множество источников данных и выходных платформ, включая сбор метрик с помощью SNMP, системных метрик, данных журналов и многих других.

Некоторые из основных возможностей Telegraf включают:
  • Поддержка более чем 200 плагинов для сбора и обработки метрик.
  • Поддержка множества выходных платформ, таких как InfluxDB, Graphite, Prometheus, OpenTSDB, Kafka и другие.
  • Встроенные возможности фильтрации, преобразования и агрегирования метрик.
  • Возможность настройки сбора метрик на уровне конкретных хостов или приложений.

Некоторые из примеров использования Telegraf:
  • Сбор метрик системы, таких как использование процессора, памяти, дисков и сети, и отправка их в системы мониторинга, такие как InfluxDB или Prometheus.
  • Сбор метрик приложений, таких как Apache, Nginx, MySQL и других, и отправка их в системы мониторинга.
  • Сбор метрик сетевых устройств, таких как маршрутизаторы, коммутаторы и брандмауэры, и отправка их в системы мониторинга.
  • Сбор метрик из различных сервисов облачных провайдеров, таких как AWS, Azure, Google Cloud и других, и отправка их в системы мониторинга.

В целом, Telegraf позволяет собирать метрики из многих различных источников и отправлять их в системы мониторинга и хранилища данных. Он может быть очень полезным инструментом для любой системы мониторинга, и позволяет быстро и легко настроить сбор метрик и отправку их в центральный мониторинговый сервер.

Node Exporter

Node Exporter — это агент сбора метрик для операционных систем на базе ядра Linux, разработанный для использования с системами мониторинга, такими как Prometheus. Он собирает множество метрик системы, таких как использование процессора, памяти, сети, дисков и других.

Основные возможности Node Exporter включают:
  • Сбор метрик системы, таких как использование процессора, памяти, дисков, сети и других.
  • Поддержка многих операционных систем на базе ядра Linux, включая Ubuntu, CentOS, Debian, Fedora и другие.
  • Работа как демон, запускаемый на фоне.
  • Поддержка для запуска с правами ограниченного пользователя.

Пример использования Node Exporter:
  • Сбор метрик системы для использования с Prometheus и Grafana, позволяющий мониторить здоровье системы и проблемы производительности.
  • Использование Node Exporter в качестве источника метрик для других систем мониторинга, таких как Zabbix, Nagios, Icinga и других.
  • Сбор метрик системы для использования с инструментами управления конфигурацией, такими как Ansible, Puppet, Chef и другие.
  • Использование Node Exporter для мониторинга состояния системы, когда у вас есть приложения, которые нуждаются в мониторинге системных метрик.

Node Exporter позволяет получать доступ к множеству метрик системы, которые могут быть использованы для мониторинга и управления системой. Он легко настраивается и работает с многими системами мониторинга и инструментами управления конфигурацией, делая его полезным инструментом для любого IT-специалиста

PostgreSQL Exporter

PostgreSQL Exporter — это агент сбора метрик для баз данных PostgreSQL, разработанный для использования с системами мониторинга, такими как Prometheus. Он собирает множество метрик баз данных PostgreSQL, таких как количество запросов, скорость выполнения запросов, количество активных подключений и других.

Некоторые из основных возможностей PostgreSQL Exporter включают:
  • Сбор метрик баз данных PostgreSQL, таких как количество запросов, скорость выполнения запросов, количество активных подключений и других.
  • Поддержка версий PostgreSQL начиная с 9.1.
  • Работа как отдельный сервер или как дополнение к PostgreSQL.
  • Поддержка для запуска с правами ограниченного пользователя.

Некоторые из примеров использования PostgreSQL Exporter:
  • Сбор метрик баз данных PostgreSQL для использования с Prometheus и Grafana, позволяющий мониторить здоровье баз данных и проблемы производительности.
  • Использование PostgreSQL Exporter в качестве источника метрик для других систем мониторинга, таких как Zabbix, Nagios, Icinga и других.
  • Сбор метрик баз данных PostgreSQL для использования с инструментами управления конфигурацией, такими как Ansible, Puppet, Chef и другие.
  • Использование PostgreSQL Exporter для мониторинга состояния баз данных PostgreSQL, когда у вас есть приложения, которые нуждаются в мониторинге метрик баз данных.

PostgreSQL Exporter позволяет получать доступ к множеству метрик баз данных PostgreSQL, которые могут быть использованы для мониторинга и управления базами данных. Он легко настраивается и работает с многими системами мониторинга и инструментами управления конфигурацией, делая его полезным инструментом для любого IT-специалиста, работающего с базами данных PostgreSQL.

Что же в итоге?

Подводя итог вышесказанному, можно с уверенностью сказать, что использование систем мониторинга, таких как Prometheus, является крайне необходимым для обеспечения надежной и эффективной работы компьютерных систем и приложений. Это инструмент, который позволяет оперативно обнаруживать проблемы в работе системы и быстро реагировать на них, уменьшая время простоя и обеспечивая доступность приложений для пользователей.

Мониторинг информационных систем также помогает улучшить производительность системы, оптимизировать ее работу и устранить узкие места, что в свою очередь повышает эффективность работы системы.

Кроме того, мониторинг информационных систем помогает обнаруживать подозрительную активность в системе, предотвращать кибератаки и минимизировать угрозы безопасности, что является крайне важным для защиты конфиденциальной информации и сохранности данных.

Мониторинг информационных систем также позволяет собирать данные о работе системы, анализировать их и использовать для улучшения качества работы приложений и системы в целом. Это позволяет быстро и точно определить причины проблем и устранить их, что повышает эффективность и производительность работы системы.

Оптимизация использования ресурсов также является одним из важных аспектов мониторинга информационных систем. Он помогает определить, какие ресурсы используются наиболее интенсивно, и оптимизировать их использование для повышения эффективности работы системы. Это позволяет сократить расходы на ресурсы и повысить производительность системы.

Наконец, мониторинг информационных систем позволяет определить потребность в дополнительных ресурсах, что помогает планировать их закупку заранее и избежать проблем в работе системы. Это повышает надежность и эффективность работы системы и приложений.

В целом, использование мониторинга является необходимым для обеспечения надежной и эффективной работы компьютерных систем и приложений. Без мониторинга система может работать некорректно, что приводит к многим проблемам, включая снижение производительности, потерю данных, угрозы безопасности, снижение рентабельности бизнеса и лояльности клиентов.
Наши клиенты
и реализованные проекты
Git in Sky реализовал 250+ проектов в разных отраслях. Основные группы наших клиентов и кейсы:
Давайте обсудим
ваш проект
Оставьте заявку — наш специалист свяжется с вами для детального обсуждения задачи
Также можете позвонить по номеру
8 800 222 19 68
Читайте также