Tech Recipe Book
My Services
  • Book
    • About the author
    • Architect
      • Algorithms
        • DB index algorithms
          • How does database indexing work
        • Neural network optimization
          • Neural Network Optimization
        • Route search
          • Road network in a database to build a route
          • Traveling Salesman Problem (TSP)
      • Architecture Frameworks
        • DODAF
        • TOGAF
        • Enterprise Architecture (EA) Tools Reviews 2023 | Gartner
      • Zero Trust
      • Billing
        • SHM billing system
      • Bots
        • Discord
        • Telegram
          • Chat GPT Telegram bot
          • Получаем статистику Telegram-канала при помощи api и python или свой tgstat с регистрацией и смс
          • Как хостить телеграм-бота (и другие скрипты на Python) на Repl.it бесплатно 24/7
          • Создание Telegram бота на PHP #1: основные понятия для работы с API
          • Создание Telegram бота на PHP #2: создание первого бота для Telegram
          • Создание Telegram бота на PHP #3: примеры отправки сообщений с кнопками в Telegram
          • Создание Telegram бота на PHP #4: отправка файлов и изображений в Telegram
          • Создание Telegram бота на PHP #5: работа с хуками
      • Business intelligence
      • Cloud Storage
        • Ceph
        • Virtual Distributed File System
      • Cryptography
        • Open Source PKI Software
        • OpenPGP
          • Email Encryption
          • Kleopatra
          • Miscellaneous Tools
          • Server side applications
      • Message broker
        • Kafka
          • Kafka UI-tools
          • Kafka streams ksqlDb
        • RabbitMQ
      • DB
        • MySQL
          • Auto sharding
          • MariaDB Zabbix monitoring
          • MySQL and MariaDB replication with Zabbix monitoring
        • Postgres
          • HA PostgreSQL with Patroni, Haproxy, Keepalived
          • Mass parallel requests - Greenplum
          • PostgreSQL cluster for development and testing
        • Vitess - Scalable. Reliable. MySQL-compatible. Cloud-native. Database.
      • Identity and Access Management (IDM)
        • FreeIPA - Identity, Policy, Audit
        • FreeIPA as an Enterprise solution
        • Keycloak
          • Keycloak HA cluster
        • Open Identity Platform
        • SSO
          • Keycloak for Java app
          • OpenAM
          • OpenIG
      • Firewall
        • nftables
      • Infrastructure As a Code
        • Ansible
        • IaC Packer Ansible Teraform
        • Installing Jenkins using terraform in Kubernetes in Yandex Cloud with letsencypt
        • Teraform Crosplan Pulumi
        • Yandex IaC solutions
      • Kubernetes
        • Installation
          • Install Kubernetes cluster
          • Deploying a Kubespray cluster to OpenStack using Terraform
          • Kube deploy in Yandex cloud
        • Frameworks
          • Deckhouse
            • LDAP authentification
            • On premise Install
            • Yandex Cloud Install
          • K3S
          • OpenShift OKD
          • RKE2
          • Rancher
            • Rancher Install
        • Auth
          • Keycloak in k8s
          • LDAP
        • GUI management Lens
        • Monitoring
          • Monitoring with Falco
          • Network monitoring
          • Nginx ingress
          • Prometheus Graphana for sample Nodejs app
          • Rsource monitoring Avito
        • Exposing services
          • Exposing Kubernetes Services
          • Cilium BGP
        • CNCF
        • Helm
          • Repositories
            • Artifact Hub | official
            • Bitnami | vmware
          • Awesome helm charts and resources
          • Essential Services for Modern Organizations
          • Security and Compliance
          • Additional charts
        • Isolation
          • vcluster - Virtual Kubernetes Clusters
          • Kiosk
          • KubeArmor
          • Control Plane Hardening
          • Hierarchical namespaces
        • Security Center
          • Minesweeper
          • NeuVector by SUSE
          • SOAR in Kubernetes
          • Security Сenter for Kubernetes
        • Terraform CI security
          • Terraform plan analysis with Checkov and Bridgecrew
          • Yandex Terraform scan
        • Vulnerability management
          • Aqua
          • Sysdig
          • Kyverno
          • GitLab
          • NeuVector by SUSE
        • Image scanning
          • Snyk
          • Sysdig
          • Harbor
          • Trivy
        • Signature verification
          • Sigstore
        • Control plane security
          • Gatekeeper
            • Applying OPA Gatekeeper
          • Kyverno
            • Policy as a code. Kyverno
        • Runtime Security
          • Osquery
          • Falco
          • ClamAV
        • Network security
          • Cilium
          • Control Plane Hardening (API restriction)
          • Network policy recipes
          • Service mesh
            • Istio HA, LoadBalance, Rate limit
          • mTLS Autocert
        • Honeypot
          • Building honeypot using vcluster and Falco
        • Backup
          • Kasten K10
        • Secrets
          • Vault CSI Driver
      • Load Balance
        • Nginx
        • HAProxy
          • Proxy methods
          • HAProxy for RDP
          • Payment gateway A/B test with HAProxy
          • HAPRoxy for Percona or Galera
      • Monitoring
        • Zabbix
          • Apache Zabbix
          • Disc Quota
          • Nginx Zabbix
          • SSL certificates Zabix
          • Zabbix notifications
        • Nagios
          • Datacenter monitoring
        • Prometheus and Grafana
      • Windows
        • Sysmon enhanced Windows audit
        • Sysmon to Block Unwanted File
      • Linux
        • Rsync
        • Debian based
          • Apt-Cacher NG
          • Unattended Upgrades in Debian / Ubuntu
        • RedHat basede
          • RPM Server
        • Logs analysis
        • Build armhf qemu
      • NGFW
      • CI/CD
        • DevSecOps
          • DAST
            • Burp
              • Dastardly
            • StackHawk
            • ZAP and GitHub Actions
          • SAST
            • Checkmarx
            • OSV by Google
            • Snyk
            • SonarQube
        • GitLab Runner in Yandex Cloud
        • Dynamic Gitlab Runners in Yandex Cloud
        • GitLab runner in Kubernetes with Werf
        • Kubernetes deploy strategies
        • Kubernetes highload deploy. part 1
        • Kubernetes highload deploy. part 2
        • Kubernetes Argo Rollouts
        • Jenkins in Kubernetes
        • Ansible Semaphore
        • Image storage, scaning and signing
        • Install WireGuard with Gitlab and Terraform
        • CI/CD example fror small web app
        • Threat matrix for CI CD Pipeline
      • SIEM / SOC
        • Datadog
        • Splunk
          • Splunk — general description
        • MaxPatrol
          • MaxPatrol 8 and RedCheck Enterprise
        • QRadar IBM
        • Cloud Native Security Platform (CNAPP) - Aqua
        • OSSIM | AT&T
          • AlienVault (OSSIM) install
        • Wazuh
        • EDR
          • Cortex XDR | Palo Alto Networks
          • Cynet
          • FortiEDR | Fortinet
          • Elastic
        • Elastic
          • Install Elasticsearch, Logstash, and Kibana (Elastic Stack) on Ubuntu 22.04
          • Setting Up Elastic 8 with Kibana, Fleet, Endpoint Security, and Windows Log Collection
        • Threat Intelligence
          • MISP
          • msticpy Microsoft
          • X-Force | IBM
          • Elastic
      • VPN
        • Full-Mesh VPN fastd, tinc, VpnCloud
        • Wireguard
          • WireGuard for Internet access
          • WireGuard on MikroTik and Keenetic
          • WireGuard site to site
        • SoftEther VPN Project
        • Cisco AnyConnect client
        • OpenConnect
        • SSTP python server
      • OS hardening
        • CIS Benchmarks
      • Cloud Providers
      • OpenNebula
        • OpenNebula Edge Cloud - Open Source Cloud & Edge Computing
        • Discover OpenNebula – Open Source Cloud & Edge Computing Platform
        • OpenNebula Multi-Cloud
        • Kubernetes on OpenNebula
        • The Open Source Alternative to Nutanix
        • The Simple Alternative to OpenStack
        • OpenNebula Partner Ecosystem
      • OpenStack
        • Install manual
        • Install with DevStack
      • VM
        • Create a VHD file from a Linux disk
        • Backup / Migration
          • Coriolis
          • Proxmox Backup Server
        • oVirt
        • VMware vCenter
        • Proxmox
      • Docker
        • Container optimization
        • Ubuntu RDP container
      • LXC
        • LXD on Ubuntu 18.04
        • Install, Create and Manage LXC in Ubuntu/Debian
    • Big Data
      • OLAP data qubes
      • Storage and autoscale in Lerua
    • Machine Learning
      • Yandex YaLM 100B. GPT model
      • Kaggle Community Datasts Models
      • AI in video production
      • Image search
      • Chat bots
        • You.com
        • Chat GPT
          • Implementing GPT in NumPy
        • Jailbreak Chat
      • Coding plugins CodeWhisperer
    • Malware
      • Isiaon/Pitraix: Modern Cross-Platform Peer-to-Peer Botnet over TOR
      • theZoo A repository of LIVE malwares
    • Pentest
      • Red Team
        • MITRE ATT&CK matrix
        • C2 Frameworks
          • Brute Ratel C4
          • Cobalt Strike
          • Covenant
          • Havoc Framework
          • Merlin
          • Metasploit
          • Sillenttrinity
          • Sliver
        • Manage and report
          • Dradis Framework
          • Hexway
        • Underground
      • Social engineering
        • Social Engineer Toolkit setoolkit
      • OSINT
        • OSINT for comapny
        • Instagram fishing
      • Forensics
        • Forensics tools
      • Pentesting Methodology
      • Web
      • CI/CD Methodology
      • Cloud Methodology
        • Hacking The Cloud
      • Kubernetes Pentesting
      • Android
        • SSL Unpinning for Android applications
      • iOS
        • SSL unpinning iOS and macOS applications
      • HackBar tool
      • CyberChef Tools
      • Python virtualenv
      • IppSec - YouTube
      • Hacktricks.xyz
    • Compliance
      • 152 ФЗ. Personal data
      • PCI DSS and ГОСТ Р 57580.1-2017
      • Cloud compliance
      • ГОСТ Р 57580.1-2017 для Kubernetes
      • Kubernets as DevSecOps and NIST compliance
      • NIST SP 800-61 cyberincidece control
      • CIS Kubernetes Benchmark v1.6 - RKE2 v1.20
      • CIS Kubernetes Benchmark v1.23 - RKE2
      • Requirements for Russian Banks
      • Tools
        • Chef InSpec
        • Elastic SIEM
    • Asset management
      • CMDBuild
    • Project management
    • Incident management SRE
    • Risk management
      • IT risk management
      • BSI-Standard 200-3
    • Web Dev
      • Cookie security
      • OWASP Top 10 2021
      • Docker nginx php mysql
      • Docker tor hiddenservice nginx
      • Docker Compose wp nginx php mariadb
      • Dependency Checking
        • Nexus Analyzer
        • OWASP dependency-check
      • Yii skeeks cms
      • YiiStudio
    • Art
      • GTK Themes
      • Themes for Xfce Desktop
      • XFCE / Xubuntu Windows 95
      • Moscow events
      • Photo goods
      • Russian style gifts
    • Cryptocurrency
      • News
      • Arbitrage
      • Stocks
      • Exchange aggregators
      • Where to use
      • Prepaid cards
        • BitFree
        • Pyypl Your Money at Your Fingertips
    • IT magazines
      • WIKI and Writeups tools
        • BookStack
        • GitBook
        • MkDocs
        • Wiki.js
        • DokuWiki
    • Languages
    • Learning
      • (ISC)2
        • CISSP
      • Offensive Security
        • OSCP
        • OSEP
        • OSED
      • DevSecOps
        • Certified DevSecOps Professional (CDP)
        • Certified DevSecOps Expert (CDE)
      • Web Security Academy: PortSwigger
    • Relocation
      • London experience
      • IT visas in 2022
      • Remote work
      • Running business in UAE
    • Freenet
      • Independent online services: the philosophy of a free Internet
      • Tor Project Anonymity Online
      • I2P Anonymous Network
    • Services
      • SMS Registration
        • Registering ChatGPT in Russia
      • Local and regional eSIMs for travellers - Airalo
      • Digital busines cards
      • No KYC services and exchanges
Powered by GitBook
On this page
  • История и определение
  • Обзор систем мониторинга
  • Работа с Prometheus и Grafana
  • Практика
  • Развертывание экспортеров
  • Развертывание Alertmanager
  • Развертывание VictoriaMetrics
  • Развертывание Prometheus
  • Развертывание Grafana
  • Подсказки

Was this helpful?

  1. Book
  2. Architect
  3. Monitoring

Prometheus and Grafana

Last updated 1 year ago

Was this helpful?

Привет, Хабр!

Мониторинг сегодня – фактически обязательная «часть программы» для компании любых размеров. В данной статье мы попробуем разобраться в многообразии программного обеспечения для мониторинга и рассмотрим подробнее одно из популярных решений – систему на основе Prometheus и Grafana

История и определение

Мониторинг в ИТ сегодня – это система, которая позволяет в режиме реального времени выявлять проблемы в ИТ инфраструктуре, а также оценивать тренды использования ресурсов. Как правило состоит из нескольких базовых компонентов – сбора сырых данных, обработки данных с целью их анализа, рассылки уведомлений и пользовательского интерфейса для просмотра графиков и отчетов. В настоящее время существует большое количество систем для мониторинга различных категорий – сети, серверной инфраструктуры, производительности приложений (APM), реального пользователя (RUM), безопасности и др. Таким образом, мониторить можно все – от сетевой доступности узлов в огромной корпорации до значений датчика температуры в спальне в «умном» доме.

Читать подробнее:

Обзор систем мониторинга

Для цельности картины рассмотрим несколько примеров систем мониторинга:

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

  • Ядро – БД временных рядов (TSDB). Поддерживает сбор данных из различных источников посредством экспортеров (совместимых с Prometheus), интеграции с внешними системами (например, Prometheus) и прямых запросов на вставку. Имеются инструменты для анализа данных, подсистема уведомлений и простой веб-интерфейс. Для визуализации рекомендуется использовать Grafana. Свободно распространяется по лицензии Apache License 2.0 (бесплатно)

Читать подробнее:

Работа с Prometheus и Grafana

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

Таким образом, базовая конфигурация позволяет собирать данные, писать сложные запросы и отправлять уведомления на их основе. Однако по-настоящему потенциал Prometheus раскрывается при добавлении двух дополнительных компонентов (или как минимум одного – Grafana):

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

Схема взаимодействия компонентов

Практика

Важное примечание

Все ниженаписанное является лишь иллюстрацией, которая призвана помочь ознакомиться с рассматриваемой системой

Развертывание экспортеров

Экспортеры могут быть развернуты на сервере мониторинга (например blackbox), на целевых серверах (kafka, mongodb, jmx и др.) или на всех серверах (node, cadvisor и др.). Как правило не требовательны к аппаратным ресурсам. В качестве примера возьмем три экспортера – node (сбор данных по ЦПУ, ОЗУ, дисковой подсистеме и сети), cadvisor (сбор информации о контейнерах) и blackbox (проверка точек входа TCP, HTTP/HTTPS и др.). Для развертывания необходимо:

  • Создать /etc/systemd/system/node-exporter.servicenode-exporter.service

    [Unit]
    Description=node exporter
    Requires=docker.service
    After=docker.service
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/docker rm node-exporter
    ExecStart=/usr/bin/docker run \
      --rm \
      --publish=9100:9100 \
      --memory=64m \
      --volume="/proc:/host/proc:ro" \
      --volume="/sys:/host/sys:ro" \
      --volume="/:/rootfs:ro" \
      --name=node-exporter \
      prom/node-exporter:v1.1.2
    ExecStop=/usr/bin/docker stop -t 10 node-exporter
    
    [Install]
    WantedBy=multi-user.target
  • Создать /etc/systemd/system/cadvisor.servicecadvisor.service

    [Unit]
    Description=cadvisor
    Requires=docker.service
    After=docker.service
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/docker rm cadvisor
    ExecStart=/usr/bin/docker run \
      --rm \
      --publish=8080:8080 \
      --volume=/:/rootfs:ro \
      --volume=/var/run:/var/run:ro \
      --volume=/sys:/sys:ro \
      --volume=/var/lib/docker/:/var/lib/docker:ro \
      --volume=/dev/disk/:/dev/disk:ro \
      --privileged=true \
      --name=cadvisor \
      gcr.io/cadvisor/cadvisor:v0.44.0
    
    ExecStop=/usr/bin/docker stop -t 10 cadvisor
    
    [Install]
    WantedBy=multi-user.target
  • Создать /etc/systemd/system/blackbox-exporter.serviceblackbox-exporter.service

    [Unit]
    Description=blackbox exporter
    Requires=docker.service
    After=docker.service
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/docker rm blackbox-exporter
    ExecStart=/usr/bin/docker run \
      --rm \
      --publish=9115:9115 \
      --memory=64m \
      --name=blackbox-exporter \
      prom/blackbox-exporter:v0.22.0
    ExecStop=/usr/bin/docker stop -t 10 blackbox-exporter
    
    [Install]
    WantedBy=multi-user.target
  • Запустить сервисы

    sudo systemctl daemon-reload
    sudo systemctl start node-exporter cadvisor blackbox-exporter
    sudo systemctl status node-exporter cadvisor blackbox-exporter
    sudo systemctl enable node-exporter cadvisor blackbox-exporter
  • Проверить работу (здесь – DNS запись или IP адрес вашего сервера)

    http://:9100/metrics (node)

    http://:8080/metrics (cadvisor)

    http://:9115/metrics (blackbox)

    http://:9115/probe?target=github.com&module=http_2xx

    http://:9115/probe?target=github.com:443&module=tcp_connect

Развертывание Alertmanager

Как правило не требователен к аппаратным ресурсам. Для развертывания необходимо:

  • Подготовить каталог для конфигурационного файла

    sudo mkdir /etc/alertmanager
  • Создать /etc/alertmanager/alertmanager.ymlalertmanager.yml

    global:
      resolve_timeout: 10s
    
      # mail configuration
      smtp_smarthost: "<smtp_server_address>:25"
      smtp_from: "<smtp_from>"
      smtp_auth_username: "<smtp_username>"
      smtp_auth_password: "<smtp_password>"
    
    route:
      # default receiver
      receiver: "webhook_alert"
      group_wait: 20s
      group_interval: 1m
      group_by: [service]
      repeat_interval: 3h
    
      # receiver tree
      routes:
        - receiver: "mail"
          match_re:
            severity: warning|error|critical
          continue: true
        - receiver: "webhook_alert"
          match_re:
            severity: warning|error|critical
          continue: true
        - receiver: "webhook_report"
          match_re:
            severity: info
    
    # receiver settings
    receivers:
      - name: "mail"
        email_configs:
          - to: <mail_to>
    
      - name: "webhook_alert"
        webhook_configs:
        - send_resolved: true
          # api endpoint for webhook
          url: http://webhook_api_url/alert
    
      - name: "webhook_report"
        webhook_configs:
        - send_resolved: false
          # api endpoint for webhook
          url: http://webhook_api_url/report
  • Создать /etc/systemd/system/alertmanager.servicealertmanager.service

    [Unit]
    Description=alertmanager
    Requires=docker.service
    After=docker.service
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/docker rm alertmanager
    ExecStart=/usr/bin/docker run \
      --rm \
      --publish=9093:9093 \
      --memory=512m \
      --volume=/etc/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro \
      --name=alertmanager \
      prom/alertmanager:v0.23.0 \
      --config.file=/etc/alertmanager/alertmanager.yml
    ExecStop=/usr/bin/docker stop -t 10 alertmanager
    
    [Install]
    WantedBy=multi-user.target
  • Запустить сервис

    sudo systemctl daemon-reload
    sudo systemctl start alertmanager
    sudo systemctl status alertmanager
    sudo systemctl enable alertmanager
  • Проверить работу (здесь – DNS запись или IP адрес вашего сервера)

    http://:9093

    http://:9093/#/alerts

    http://:9093/#/status

Развертывание VictoriaMetrics

Потребление ресурсов VictoriaMetrics зависит от количества опрашиваемых экспортеров и собираемых метрик, нагрузки запросами на чтение, глубины хранения данных и др. факторов. Вывести средние значения для старта достаточно сложно, однако для небольшой инсталляции достаточно 1 ядра ЦПУ, 2 ГБ ОЗУ и 20 ГБ дискового пространства. Для развертывания необходимо:

  • Подготовить каталог для хранения данных

    sudo mkdir -p /data/victoriametrics
  • Создать /etc/systemd/system/victoriametrics.servicevictoriametrics.service

    [Unit]
    Description=victoriametrics
    Requires=docker.service
    After=docker.service
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/docker rm victoriametrics
    ExecStart=/usr/bin/docker run \
      --rm \
      --publish=8428:8428 \
      --volume=/data/victoriametrics:/victoria-metrics-data \
      --name=victoriametrics \
      victoriametrics/victoria-metrics:v1.55.1 \
      -dedup.minScrapeInterval=60s \
      -retentionPeriod=2
    ExecStop=/usr/bin/docker stop -t 10 victoriametrics
    
    [Install]
    WantedBy=multi-user.target

    Указано хранение метрик в течение 2 месяцев

  • Запустить сервис

    sudo systemctl daemon-reload
    sudo systemctl start victoriametrics
    sudo systemctl status victoriametrics
    sudo systemctl enable victoriametrics
  • Проверить работу (здесь – DNS запись или IP адрес вашего сервера):

    http://:8428

Развертывание Prometheus

Потребление ресурсов Prometheus зависит от количества опрашиваемых экспортеров и собираемых метрик, нагрузки запросами на чтение, глубины хранения данных и др. факторов. Вывести средние значения для старта достаточно сложно, однако для небольшой инсталляции достаточно 1 ядра ЦПУ, 2 ГБ ОЗУ и 20 ГБ дискового пространства. Для развертывания необходимо:

  • Создать пользователя и подготовить каталоги для конфигурационных файлов и хранения данных

    sudo useradd -M -u 1101 -s /bin/false prometheus
    sudo mkdir -p /etc/prometheus/rule_files # каталог конфигурации
    sudo mkdir -p /data/prometheus # каталог данных
    sudo chown -R prometheus /etc/prometheus /data/prometheus

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

  • Создать конфигурационный файл /etc/prometheus/prometheus.yml (здесь – DNS запись или IP адрес вашего сервера)prometheus.yml

    global:
      scrape_interval: 15s
      scrape_timeout: 10s
      evaluation_interval: 30s
    
    # alerting settings
    alerting:
      alertmanagers:
      - follow_redirects: true
        timeout: 10s
        static_configs:
        - targets:
          - <hostname>:9093
    
    # alert rule files
    rule_files:
    - /etc/prometheus/rule_files/*.yml
    
    # remote write to victoriametrics
    remote_write:
    - url: http://<hostname>:8428/api/v1/write
      remote_timeout: 30s
    
    # scrape exporter jobs
    scrape_configs:
    - job_name: 'prometheus'
      static_configs:
        - targets:
          - <hostname>:9090
    - job_name: 'node'
      metrics_path: /metrics
      static_configs:
        - targets:
          - <hostname>:9100
    - job_name: 'cadvisor'
      metrics_path: /metrics
      static_configs:
        - targets:
          - <hostname>:8080
    - job_name: 'blackbox'
      metrics_path: /metrics
      static_configs:
        - targets:
          - <hostname>:9115
    - job_name: 'blackbox-tcp'
      metrics_path: /probe
      params:
        module: [tcp_connect]
      static_configs:
        - targets:
          - github.com:443
      relabel_configs:
        - source_labels: [__address__]
          target_label: __param_target
        - source_labels: [__param_target]
          target_label: instance
        - target_label: __address__
          replacement: <hostname>:9115
    - job_name: 'blackbox-http'
      metrics_path: /probe
      params:
        module: [http_2xx]
      static_configs:
        - targets:
          - https://github.com
      relabel_configs:
        - source_labels: [__address__]
          target_label: __param_target
        - source_labels: [__param_target]
          target_label: instance
        - target_label: __address__
          replacement: <hostname>:9115
  • Создать правила уведомлений /etc/prometheus/rule_files/main.ymlrule_files/main.yml

    groups:
    
    - name: target
      rules:
        - alert: target_down
          expr: up == 0
          for: 1m
          labels:
            service: target
            severity: critical
          annotations:
            summary: 'Target down! Failed to scrape {{ $labels.job }} on {{ $labels.instance }}'
    
    - name: probe
      rules:
        - alert: probe_down
          expr: probe_success == 0
          for: 1m
          labels:
            service: probe
            severity: error
          annotations:
            summary: 'Probe {{ $labels.instance }} down'
    
    - name: hardware
      rules:
        - alert: hardware_cpu
          expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 75
          for: 3m
          labels:
            service: hardware
            severity: warning
          annotations:
            summary: 'High CPU load on {{ $labels.instance }} - {{ $value | printf "%.2f" }}%'
    
        - alert: hardware_memory
          expr: 100 - ((node_memory_MemAvailable_bytes * 100) / node_memory_MemTotal_bytes) > 85
          for: 3m
          labels:
            service: hardware
            severity: warning
          annotations:
            summary: 'High memory utilization on {{ $labels.instance }} - {{ $value | printf "%.2f" }}%'
    
        - alert: hardware_disk
          expr: (node_filesystem_free_bytes / node_filesystem_size_bytes * 100) < 25
          for: 3m
          labels:
            service: hardware
            severity: error
          annotations:
            summary: 'Low free space on {{ $labels.instance }} device {{ $labels.device }} mounted on {{ $labels.mountpoint }} - {{ $value | printf "%.2f" }}%'
    
    - name: container
      rules:
        - alert: container_down
          expr: (time() - container_last_seen) > 60
          for: 1m
          labels:
            service: container
            severity: error
          annotations:
            summary: 'Container down! Last seen {{ $labels.name }} on {{ $labels.instance }} - {{ $value | printf "%.2f" }}s ago'

    В данном случае для примера мы добавили только один файл c несколькими группами правил, однако в больших инсталляциях для удобства группы распределены по различным файлам – application, container, hardware, kubernetes, mongodb, elasticsearch и т.д.

  • Создать /etc/systemd/system/prometheus.serviceprometheus.service

    [Unit]
    Description=prometheus
    Requires=docker.service
    After=docker.service
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/docker rm prometheus
    ExecStart=/usr/bin/docker run \
      --rm \
      --user=1101 \
      --publish=9090:9090 \
      --memory=2048m \
      --volume=/etc/prometheus/:/etc/prometheus/ \
      --volume=/data/prometheus/:/prometheus/ \
      --name=prometheus \
      prom/prometheus:v2.30.3 \
      --config.file=/etc/prometheus/prometheus.yml \
      --storage.tsdb.path=/prometheus \
      --storage.tsdb.retention.time=14d
    ExecStop=/usr/bin/docker stop -t 10 prometheus
    
    [Install]
    WantedBy=multi-user.target

    Указано хранение метрик в течение 14 суток

  • Запустить сервис

    sudo systemctl daemon-reload
    sudo systemctl start prometheus
    sudo systemctl status prometheus
    sudo systemctl enable prometheus
  • Проверить работу (здесь – DNS запись или IP адрес вашего сервера)

    http://:9090

    Status → Configuration, Status → Rules, Status → Targets

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

Развертывание Grafana

Grafana не слишком требовательна к потреблению ресурсов – для небольшой инсталляции достаточно 1 ядра ЦПУ и 1 ГБ ОЗУ (хотя, конечно, есть нюанс...). Для развертывания необходимо:

  • Создать пользователя и подготовить каталоги для конфигурационных файлов и хранения данных

    sudo useradd -M -u 1102 -s /bin/false grafana
    sudo mkdir -p /etc/grafana/provisioning/datasources # каталог декларативного описания источников данных
    sudo mkdir /etc/grafana/provisioning/dashboards # каталог декларативного описания дашбордов
    sudo mkdir -p /data/grafana/dashboards # каталог данных
    sudo chown -R grafana /etc/grafana/ /data/grafana
  • Создать файл декларативного описания источников данных /etc/grafana/provisioning/datasources/main.yml (здесь – DNS запись или IP адрес вашего сервера)datasources/main.yml

    apiVersion: 1
    
    datasources:
      - name: Prometheus
        type: prometheus
        version: 1
        access: proxy
        orgId: 1
        basicAuth: false
        editable: false
        url: http://<hostname>:9090
      - name: VictoriaMetrics
        type: prometheus
        version: 1
        access: proxy
        orgId: 1
        basicAuth: false
        editable: false
        url: http://<hostname>:8428
  • Создать файл декларативного описания дашбордов /etc/grafana/provisioning/dashboards/main.ymldashboards/main.yml

    apiVersion: 1
    
    providers:
    - name: 'main'
      orgId: 1
      folder: ''
      type: file
      disableDeletion: false
      editable: True
      options:
        path: /var/lib/grafana/dashboards
  • cd ~/ && git clone https://github.com/rfmoz/grafana-dashboards
    sudo cp grafana-dashboards/prometheus/node-exporter-full.json /data/grafana/dashboards/

    Репозиторий и его содержимое актуальны на начало 2023 года

  • Создать /etc/systemd/system/grafana.servicegrafana.service

    [Unit]
    Description=grafana
    Requires=docker.service
    After=docker.service
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/docker rm grafana
    ExecStart=/usr/bin/docker run \
      --rm \
      --user=1102 \
      --publish=3000:3000 \
      --memory=1024m \
      --volume=/etc/grafana/provisioning:/etc/grafana/provisioning \
      --volume=/data/grafana:/var/lib/grafana \
      --name=grafana \
      grafana/grafana:9.2.8
    ExecStop=/usr/bin/docker stop -t 10 grafana
    
    [Install]
    WantedBy=multi-user.target
  • Запустить сервис

    sudo systemctl daemon-reload
    sudo systemctl start grafana
    sudo systemctl status grafana
    sudo systemctl enable grafana
  • Проверить работу (здесь – DNS запись или IP адрес вашего сервера)

    http://:3000 (учетные данные по умолчанию – admin/admin, желательно сразу изменить пароль)

    Configuration → Data sources

    Explore → Metric → up → Run query

    Dashboards → Browse → General → Node Exporter Full

Подсказки

На практике могут быть полезны следующие простые советы:

  • Почаще исследуйте метрики в «сыром» виде (от экспортеров)

  • Система мониторинга на основе Prometheus описывается декларативно. Храните конфигурации в git и используйте ansible для автоматизации

Все статьи серии:

На заре появления компьютерных сетей в конце 1970х – начале 1980х гг. главной задачей мониторинга была проверка связности и доступности серверов. В 1981 году появился протокол , на основе которого в декабре 1983 года написана утилита , а позднее и , которые используются для диагностики сетевых неполадок и по сей день. Следующим этапом стало создание в 1988 году протокола , что привело к рождению – одной из первых программ для мониторинга и измерения нагрузки трафика на сетевые каналы. Параллельно с середины 1980х гг. стало активно разрабатываться программное обеспечение для мониторинга потребления ресурсов компьютерами, такое как , , , и др. К середине 1990х годов в связи с ростом ИТ инфраструктуры многие компании стали испытывать потребность в комплексной и централизованной системе мониторинга, что послужило спусковым крючком для синхронного начала разработки нескольких прототипов. В 1999-2002 гг. на свет появились решения, предопределившие развитие отрасли на годы вперед и развивающиеся до сих пор – , и .

, и др.

Поддерживает сбор данных из различных источников – как с помощью (реализованы под большинство распространенных платформ), так и посредством SNMP и IPMI, ODBC, ICMP и TCP проверок, HTTP запросов и т.д., а также собственных скриптов. Имеются инструменты для преобразования и анализа данных, подсистема рассылки уведомлений и веб-интерфейс. Свободно распространяется по лицензии GNU GPL v2 (бесплатно)

Поддерживает сбор данных без агентов посредством SNMP, WMI, Database, ICMP и TCP проверок, HTTP запросов и т.д., а также собственных скриптов. Имеются инструменты для анализа данных, удобная подсистема рассылки уведомлений и веб-интерфейс. Является коммерческим продуктом, лицензируется по количеству сенсоров. PRTG Network Monitor с количеством сенсоров не более 100 доступен для использования бесплатно

/

Поддерживает сбор данных с помощью (реализованы под большинство распространенных платформ) и посредством SNMP и WMI, а также и собственных скриптов. Имеются инструменты для анализа данных, подсистема рассылки уведомлений и веб-интерфейс. Nagios Core свободно распространяется по лицензии GNU GPL v2 (бесплатно), Nagios XI является коммерческим продуктом. Подробнее о различиях между Nagios Core и Nagios XI можно почитать в статье

Появилась как форк Nagios. Поддерживает сбор данных с помощью , а также и собственных скриптов. Имеются инструменты для анализа данных, подсистема рассылки уведомлений и веб-интерфейс. Свободно распространяется по лицензии GNU GPL v2 (бесплатно)

Ядро – (Time series database, TSDB). Поддерживает сбор данных из различных источников посредством экспортеров и шлюза . Имеются инструменты для анализа данных, подсистема уведомлений и простой веб-интерфейс. Для визуализации рекомендуется использовать Grafana. Свободно распространяется по лицензии Apache License 2.0 (бесплатно)

Не является системой мониторинга, однако не упомянуть ее в контексте статьи просто нельзя. Является прекрасной системой визуализации и анализа информации, которая позволяет «из коробки» работать с широким спектром (data source) – Elasticsearch, Loki, MS SQL, MySQL, PostgreSQL, Prometheus и др. При необходимости также интегрируется с Zabbix, PRTG и др. системами. Свободно распространяется по лицензии GNU AGPL v3 (бесплатно)

Рассмотрим подробнее схему взаимодействия компонентов системы мониторинга на основе Prometheus. Базовая конфигурация состоит из трех компонентов :

(exporters)

Получает метрики от экспортеров и сохраняет их в БД временных рядов. Поддерживает мощный язык запросов (Prometheus Query Language) для выборки и аггрегации метрик. Позволяет строить простые графики и формировать (alerts) на основе выражений PromQL для отправки через Alertmanager

Обрабатывает уведомления от Prometheus и рассылает их. С помощью механизма (receivers) реализована интеграция с почтой (SMTP), Telegram, Slack и др. системами, а также отправка сообщений в собственный API посредством (webhook)

Примечание

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

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

Предоставляет средства визуализации и дополнительного анализа информации из Prometheus и VictoriaMetrics. Есть практически под любые задачи, которые при необходимости можно легко доработать. Создание собственных дашбордов также интуитивно (разумеется, за исключением некоторых тонкостей) – достаточно знать основы PromQL / MetricsQL

Итак, система мониторинга на основе Prometheus – PAVG (Prometheus, Alertmanager, VictoriaMetrics, Grafana) – предоставляет широкий спектр возможностей. Рассмотрим ее практическое применение. Для упрощения предположим, что основные компоненты будут развернуты на одном сервере мониторинга с примением и , а также вынесем требования безопасности за рамки данной статьи.

Экспортеры реализованы практически под все распространенное программное обеспечение, причем зачастую от нескольких разработчиков с разным набором метрик. Поиск не составляет труда – достаточно дать запрос на , или в любимой поисковой системе. Однако в случае необходимости можно – например на Go или Python.

В рассматриваемом примере уведомления рассылаются на почту и две дополнительные точки входа API – для срочных уведомлений (warning|error|critical) и отчетов (info). Подробнее о подготовке конфигурации можно почитать в статье

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

Добавить дашборд в каталог /data/grafana/dashboards

Ищите проверенные экспортеры под свои потребности. В этом может помочь статья

Обязательно изучите

За помощь в подготовке статьи автор выражает благодарность , и

ICMP
ping
traceroute
SNMP
MRTG
top
vmstat
nmon
Task Manager
Cacti
Nagios
Zabbix
A Brief History of Network Monitoring Tools
Introduction to IT monitoring
PingInfoView
SolarWinds pingdom
Zabbix
агентов
без них (agent-less)
PRTG
преднастроенных сенсоров
Nagios
Core
Nagios XI
агентов
без них
расширений
Nagios Core vs. Nagios XI: 4 Key Differences
Icinga
агентов
расширений
Prometheus
БД временных рядов
PushGateway
VictoriaMetrics
Grafana
источников данных
Best Enterprise Monitoring Software
Топ 20 бесплатных систем мониторинга
экосистемы
Экспортеры
Prometheus
PromQL
правила уведомлений
Alertmanager
приемников
вебхуков
VictoriaMetrics
remote write
MetricsQL
vmagent
vmalert
Grafana
примеры дашбордов
docker
systemd
GitHub
DockerHub
написать свой экспортер
Alerting Configuration
Alerting High Availability
Node Exporter Full
Топ-10 экспортеров для Prometheus 2023
PromQL Cheat Sheet
@novikov0805
@Eviil
@KoPashka
Основы Linux (обзор с практическим уклоном)
Основы виртуализации (обзор)
Основы контейнеризации (обзор Docker и Podman)
Основы мониторинга (обзор Prometheus и Grafana)
https://habr.com/ru/articles/709204/