Перейти к основному контенту

Система мониторинга Prometheus

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

система-мониторинга Prometheus описание

Prometheus — система мониторинга серверов и программ с открытым исходным кодом. Она была выпущена в 2012 году для мониторинга музыкальной социальной сети SoundCloud. Из-за специфики архитектуры SoundCloud традиционные системы мониторинга не подходили, поэтому по новой технологии был создан Prometheus-мониторинг. Позже новый мониторинг сервисов стал интересен за пределами музыкальной сети. Создатели доработали систему и предложили её более широкому рынку. Релиз обновлённой программы прошёл в 2015 году.

Система мониторинга Prometheus может собирать информацию о состоянии серверов и систем (Linux-сервера, Apache-сервера, сервера баз данных), а также получать предупреждения о проблемах. Объекты мониторинга называются целевыми объектами.

Главное отличие Prometheus от остальных систем мониторинга — метод сбора данных. Обычно объекты мониторинга отправляют нужные параметры серверам мониторинговых программ. Прометеус же наоборот — сам берёт нужную ему информацию с серверов и устройств, обращаясь к целевым объектам при помощи языка PromQL. Сервер Prometheus считывает параметры целевых объектов с интервалами, которые задаёт пользователь. Данные от целевых объектов передаются на сервер в формате http и хранятся в базе данных временных рядов. В отличие от системы Zabbix, которая написана на языке С и PHP, Prometheus написан на Go и Ruby.

Prometheus функционирует благодаря таким компонентам, как:

  1. Prometheus-server — главное звено всей системы. Он отвечает за сбор и хранение данных. Есть простой веб-интерфейс, но для полноценной работы с системой лучше устанавливать дополнительный.

  2. Exporters — это часть ПО, которая собирает и передаёт Prometheus-метрики серверу. Существуют разные экспортёры, например HAProxy, StatsD, Graphite. Они устанавливаются на целевые объекты и собирают определённые метрики. Если ни один экспортёр вам не подходит, то можно написать свой.

Работа с Prometheus не обойдётся без дополнения Grafana — с его помощью можно визуализировать полученные данные в виде наглядных графиков, диаграмм и таблиц (dashboard). А также Alertmanager — программы для настройки уведомлений. Если на целевом объекте появятся проблемы, Alertmanager сможет отправить письмо на почту, Slack, Hipchat, Pagerduty или Telegram.

C помощью руководства ниже вы сможете установить Prometheus на CentOS, Debian, Ubuntu. Также мы расскажем, как установить exporter и Alertmanager, чтобы можно было получать сообщения о неисправностях.

Как установить Prometheus

  1. 1.

    На официальном сайте Prometheus скопируйте ссылку на установочный пакет для Linux:

    установка-prometheus Пример ссылки для Linux

  2. 2.

    Если у вас нет wget, то перед началом работы с Prometheus установите этот пакет.

    wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz
  3. 3.

    Распакуйте архив:

    tar -xvzf prometheus-2.20.1.linux-amd64.tar.gz prometheus-2.20.1.linux-amd64/
  4. 4.

    Скопируйте исполняемые файлы в /usr/local/bin/:

    cd prometheus-2.20.1.linux-amd64/
    cp prometheus /usr/local/bin/
    cp promtool /usr/local/bin/
  5. 5.

    Создайте папку для файлов конфигурации и скопируйте в неё конфиги:

    cp -r consoles/ /etc/prometheus/consoles/
    cp -r console_libraries/ /etc/prometheus/console_libraries/
    cp prometheus.yml /etc/prometheus/
  6. 6.

    Создайте папку для хранения данных:

    mkdir /var/lib/prometheus
  7. 7.

    Создайте пользователя и назначьте владельца файлов и папок:

    useradd -M -r -s /bin/nologin promethe
    chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
  8. 8.

    Создайте systemd-юнит, чтобы удобнее управлять сервисом:

    vim /etc/systemd/system/prometheus.service

    Впишите в файл конфигурацию сервиса Prometheus:

    [Unit]
    Description=Prometheus systemd service unit
    Wants=network-online.target
    After=network-online.target
    [Service]
    Type=simple
    User=prometheus
    Group=prometheus
    ExecReload=/bin/kill -HUP $MAINPID
    ExecStart=/usr/local/bin/prometheus \
    --config.file=/etc/prometheus/prometheus.yml \
    --storage.tsdb.path=/var/lib/prometheus \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries \
    --web.listen-address=0.0.0.0:9090
    
    SyslogIdentifier=prometheus
    Restart=always
    [Install]
    WantedBy=multi-user.target

    Сохраните изменения в файле и выйдите.

  9. 9.

    Обновите список юнитов:

    systemctl daemon-reload
  10. 10.

    Запустите Prometheus:

    systemctl start prometheus.service
  11. 11.

    Для автоматической загрузки Prometheus введите:

    ystemctl enable prometheus.service 
    Created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service → /etc/systemd/system/prometheus.service

Готово, теперь Prometheus доступен по адресу $IP:9090: установленный-prometheus

Как установить exporter

Чтобы Prometheus мог собирать данные с целевых объектов, установите node_exporter.

  1. 1.

    На официальном сайте Prometheus скопируйте ссылку для установки node_exporter:

    установка-exporter Пример ссылки для Linux

  2. 2.

    Установите пакет node_exporter:

    wget 
    https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
  3. 3.

    Распакуйте архив:

    wget 
    https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
  4. 4.

    Скопируйте бинарный файл:

    wget 
    cp node_exporter-1.0.1.linux-amd64/node_exporter /usr/local/bin/
  5. 5.

    Создайте пользователя:

    useradd -M -r -s /bin/nologin node_exporter
  6. 6.

    Создайте юнит:

    vim /etc/systemd/system/node_exporter.service
  7. 7.

    Впишите в файл:

    [Unit]
    Description=Node Exporter
    Wants=network-online.target
    After=network-online.target
    [Service]
    User=node_exporter
    Group=node_exporter
    ExecStart=/usr/local/bin/node_exporter
    [Install]
    WantedBy=default.target

    Сохраните изменения в файле и выйдите.

  8. 8.

    Обновите список сервисов:

    systemctl daemon-reload
  9. 9.

    Включите node_exporter:

    systemctl start node_exporter.service
  10. 10.

    Для автоматической загрузки node_exporter введите:

    systemctl enable node_exporter.service
  11. 11.

    Чтобы собирались данные с экспортёра, исправьте /etc/prometheus/prometheus.yml так:

    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    static_configs:
        - targets: ['localhost:9090']
      - job_name: 'node_localhost'
        static_configs:
        - targets: ['localhost:9100']

    Обратите внимание, yml-формат чувствителен к пробелам и табуляциям.

  12. 12.

    Перезагрузите Prometheus:

    systemctl restart prometheus.service
  13. 13.

    В веб-интерфейсе Prometheus зайдите в рубрику StatusTargets. Там появится новый таргет для мониторинга:

    мониторинг-prometheus

  14. 14.

    Чтобы дополнительно поставить node_exporter на другую машину и добавить её в мониторинг, внесите правки в config:

    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    static_configs:
        - targets: ['localhost:9090']
      - job_name: 'node_localhost'
        static_configs:
        - targets: ['localhost:9100']
    - job_name: 'node_exporter_clients'
        static_configs:
        - targets: ['194.12.345.6:9100']

    как-работает-мониторинг-prometheus

    Чтобы добавить несколько серверов, которые нужно мониторить вместе, введите:

    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    static_configs:
        - targets: ['localhost:9090']
    - job_name: 'node_exporter_clients'
        static_configs:
        - targets: ['194.12.345.6:9100','localhost:9100']

    работа-мониторинга-prometheus

Как установить Alertmanager

Чтобы пользователю приходили оповещения о состоянии сервера, установите Alertmanager.

  1. 1.
    На официальном сайте Prometheus скопируйте ссылку для установки alertmanager.
  2. 2.

    Установите пакет alertmanager. Например, для Linux введите:

    wget 
    https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
  3. 3.

    Распакуйте архив:

    tar -xvzf alertmanager-0.21.0.linux-amd64.tar.gz
  4. 4.

    Создайте папку:

    mkdir /etc/alertmanager /var/lib/prometheus/alertmanager
  5. 5.

    Скопируйте бинарный файл и config в нужные папки:

    cd alertmanager-*linux-amd64/
    cp amtool alertmanager /usr/local/bin/
    cp alertmanager.yml /etc/alertmanager
  6. 6.
    useradd -M -r -s /bin/nologin alertmanager
  7. 7.

    Исправьте владельца на config и директорию с данными:

    chown -R alertmanager:alertmanager /etc/alertmanager /var/lib/prometheus/alertmanager
  8. 8.

    Создайте systemd-юнит:

    vim /etc/systemd/system/alertmanager.service
  9. 9.

    Впишите в файл:

    [Unit]
    Description=Alertmanager Service
    After=network.target
    [Service]
    User=alertmanager
    Group=alertmanager
    Type=simple
    ExecStart=/usr/local/bin/alertmanager \
             --config.file=/etc/alertmanager/alertmanager.yml \
             --storage.path=/var/lib/prometheus/alertmanager \
             --cluster.advertise-address=127.0.0.1:9093
    ExecReload=/bin/kill -HUP $MAINPID
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target

    Сохраните изменения в файле и выйдите.

  10. 10.

    Обновите список юнитов:

    systemctl daemon-reload
  11. 11.

    Запустите Alertmanager:

    systemctl start alertmanager
  12. 12.

    Настройте автозагрузку Alertmanager:

    systemctl enable alertmanager
  13. 13.

    Создайте правило для мониторинга, при котором система будет считать, что виртуальный сервер работает неправильно.

    vim /etc/prometheus/alert.rules.yml

    Содержимое файла:

    groups:
    - name: alert.rules
      rules:
      - alert: InstanceDown
        expr: up == 0
        for: 30s
        labels:
          severity: critical
        annotations:
          description: '{{ $labels.instance }} of job {{ $labels.job }} has been down
            for more than 30 seconds. '
          summary: Instance {{ $labels.instance }} down
  14. 14.

    Поместите правило в config Prometheus и Alertmanager:

    rule_files:
      - 'alert.rules.yml'
    # Alertmanager configuration
    alerting:
      alertmanagers:
      - static_configs:
        - targets:
          - 'localhost:9093'
  15. 15.

    Перезапустите Prometheus:

    systemctl restart prometheus.service

Готово, вы установили Alertmanager. Его можно увидеть по адресу http://$IP:9090/alerts.

Как настроить уведомления на почту

Настроим уведомления на Яндекс.Почту через Alertmanager.

  1. 1.

    Введите:

    vim /etc/alertmanager/alertmanager.yml

    Содержимое файла должно выглядеть так:

    global:
      resolve_timeout: 5m
      smtp_from: "test@yandex.ru"
    route:
      group_by: ['alertname']
      group_wait: 10s
      group_interval: 10s
      repeat_interval: 1h
      receiver: 'web.hook'
    routes:
        - receiver: 'send_email'
    receivers:
    - name: 'web.hook'
      webhook_configs:
      - url: 'http://127.0.0.1:5001/'
    - name: 'send_email'
      email_configs:
      - to: 'test@yandex.ru'
        smarthost: 'smtp.yandex.ru:587'
        require_tls: true
        auth_username: "test@yandex.ru"
        auth_identity: "test@yandex.ru"
        auth_password: "password"
    inhibit_rules:
      - source_match:
          severity: 'critical'
        target_match:
          severity: 'warning'
        equal: ['alertname', 'dev', 'instance']

Готово, если всё сделано правильно, то на почту будет отправлено проверочное письмо.

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 0 из 0