Система за мониторинг Prometheus: Пълно ръководство за настройка на мониторинг на инфраструктура и приложения
С нарастващата сложност на съвременната инфраструктура — обхващаща микроуслуги, контейнери и разпределени системи — надеждното наблюдение вече не е по избор. То е фундаментално изискване за поддържане на производителност, надеждност и мащабируемост. Prometheus, набор от инструменти с отворен код за наблюдение и предупреждение, се е утвърдил като едно от най-широко използваните решения за събиране и визуализиране на метрики от времеви редове в разнообразни среди.
Първоначално разработен от SoundCloud и сега завършен проект на Cloud Native Computing Foundation (CNCF), Prometheus се ползва с доверието на инженерни екипи по целия свят. Това изчерпателно ръководство обхваща всичко, което трябва да знаете: какво е Prometheus, как работи, основните му компоненти и пълен процес на настройка стъпка по стъпка — включително Node Exporter, Grafana табла и конфигурация на предупреждения.
Какво е Prometheus?
Prometheus е мощна система за наблюдение с отворен код, предназначена да събира, съхранява и заявява данни от времеви редове — измервания или събития, проследявани във времето с времеви маркери с висока разделителна способност. Тя позволява на екипите да визуализират здравето на системата, да анализират тенденции и да задействат интелигентни предупреждения, преди малките проблеми да ескалират в критични прекъсвания.
Основни функции на Prometheus
| Функция | Описание |
|---|---|
| Модел на данни с времеви редове | Метриките се съхраняват като последователности с времеви маркери, което позволява анализ на тенденции и исторически сравнения |
| Наблюдение чрез изтегляне (Pull-Based) | Prometheus активно извлича метрики от целевите крайни точки, вместо да чака системите да изпращат данни |
| PromQL | Гъвкав и изразителен език за заявки за филтриране, агрегиране и анализиране на метрики в реално време |
| Интеграция с Alertmanager | Дефинирайте правила, базирани на прагове, и насочвайте известия към имейл, Slack, PagerDuty и други |
| Откриване на услуги | Автоматично открива и извлича метрики от цели в динамични среди като Kubernetes клъстери |
| Многоизмерни данни | Етикетите ви позволяват да разделяте и анализирате метрики по измерения като регион, инстанция или име на услуга |
Тези възможности правят Prometheus идеален избор за екипи, изпълняващи натоварвания на VPS хостинг, инфраструктура на bare-metal или контейнеризирани платформи.
Как работи Prometheus
Prometheus следва чиста, добре дефинирана архитектура, изградена около събирането и съхранението на данни от времеви редове. Разбирането на тази архитектура е от съществено значение преди внедряването му в производствена среда.
Основен работен процес
- Събиране на метрики (Scraping): Prometheus периодично изпраща HTTP заявки до конфигурирани целеви крайни точки — известни като *exporters* — за събиране на метрики. Интервалът на извличане е напълно конфигурируем.
- Съхранение на времеви редове: Събраните метрики се съхраняват в вградената база данни за времеви редове (TSDB) на Prometheus. Всяка точка от данни носи Unix времеви маркер и набор от двойки ключ-стойност за идентификация.
- Заявки с PromQL: Инженерите използват PromQL за заявки към съхранените метрики, генериране на графики, изграждане на табла или дефиниране на условия за предупреждения въз основа на данни в реално време и исторически данни.
- Тръбопровод за предупреждения: Когато дадена метрика надхвърли предварително дефиниран праг, Prometheus изпраща предупреждение до Alertmanager, който дедублира, групира и насочва известията към съответните канали.
Моделът на изтегляне (pull-based) е съзнателен архитектурен избор. Той опростява мрежовата сигурност (целите не се нуждаят от изходящ достъп до централен сървър), прави конфигурацията прозрачна и се мащабира добре в разпределени среди.
Основни компоненти на Prometheus
Prometheus е модулна екосистема. Всеки компонент изпълнява специфична роля:
1. Prometheus сървър
Централният двигател, отговорен за извличане на метрики от целите, съхранението им в TSDB, оценката на правилата за предупреждения и обслужването на PromQL API и уеб интерфейса.
2. Exporters
Exporters са леки агенти или адаптери, които излагат метрики в съвместим с Prometheus формат. Основните exporters включват:
- Node Exporter — Събира метрики на хардуерно и OS ниво: CPU, памет, дисков I/O, мрежова пропускателна способност, използване на файловата система
- Blackbox Exporter — Проверява външни крайни точки по HTTP, HTTPS, DNS, TCP и ICMP за наличност и латентност
- Database Exporters — Съществуват специализирани exporters за PostgreSQL, MySQL, Redis, MongoDB и много други
- Application-Specific Exporters — Повечето съвременни приложения и фреймуъркове излагат крайна точка
/metricsнативно
3. Alertmanager
Управлява пълния жизнен цикъл на предупрежденията: получаване на предупреждения от Prometheus, тяхното дедублиране и групиране, прилагане на правила за заглушаване и инхибиране, и насочване на известия към получатели като Slack, имейл, PagerDuty или OpsGenie.
4. PromQL (Prometheus Query Language)
Специално изграден функционален език за заявки за данни от времеви редове. PromQL поддържа мигновени вектори, вектори на диапазони, оператори за агрегиране, математически функции и подзаявки — предоставяйки ви дълбока аналитична мощ върху вашите метрики.
5. Pushgateway
Предназначен за краткотрайни или пакетни задачи, които не могат да бъдат директно извличани (напр. cron задача, която работи 30 секунди). Тези задачи изпращат своите метрики към Pushgateway, който Prometheus след това извлича на редовния си интервал.
6. Grafana
Въпреки че не е част от самия Prometheus, Grafana е де факто слоят за визуализация на данни от Prometheus. Тя се свързва с Prometheus като източник на данни и позволява създаването на богати, интерактивни табла с панели, променливи и анотации.
Настройка на Prometheus на Linux стъпка по стъпка
Следващото ръководство ви води през пълно внедряване на Prometheus на Linux сървър, включително Node Exporter за системни метрики, Grafana за визуализация и Alertmanager за известия.
> Предварителни изисквания: Linux сървър (Ubuntu 20.04/22.04 или CentOS/RHEL 8+), достъп sudo или root, и основно познаване на командния ред. Ако имате нужда от надеждна сървърна среда, разгледайте AlexHost VPS хостинг за производителна основа с ниска латентност.
Стъпка 1: Инсталиране на Prometheus
Изтеглете и разархивирайте последната версия на Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar -xvf prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64> Съвет: Винаги проверявайте официалната страница с версии на Prometheus за последната стабилна версия преди изтегляне.
Създайте специален системен потребител и структура на директории:
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp -r consoles console_libraries /etc/prometheus/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheusСъздайте systemd услуга за Prometheus:
sudo nano /etc/systemd/system/prometheus.serviceПоставете следното съдържание:
[Unit]
Description=Prometheus Monitoring System
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
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
--storage.tsdb.retention.time=30d
[Install]
WantedBy=multi-user.targetАктивирайте и стартирайте Prometheus:
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheusPrometheus вече ще бъде достъпен на http://your-server-ip:9090.
Стъпка 2: Конфигуриране на Prometheus
Основният конфигурационен файл е /etc/prometheus/prometheus.yml. Този файл дефинира глобалните настройки и целите за извличане, които Prometheus наблюдава.
Пример за основна конфигурация:
global:
scrape_interval: 15s # Default scrape frequency
evaluation_interval: 15s # How often alerting rules are evaluated
scrape_timeout: 10s
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093
rule_files:
- "/etc/prometheus/rules/*.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]След промяна на този файл, винаги валидирайте конфигурацията преди рестартиране:
promtool check config /etc/prometheus/prometheus.yml
sudo systemctl restart prometheusСтъпка 3: Инсталиране на Node Exporter за системни метрики
Node Exporter излага подробни метрики за хардуера и OS от хост системата — от съществено значение за наблюдение на натоварването на CPU, натиска върху паметта, използването на диска и мрежовата пропускателна способност.
Изтеглете и инсталирайте Node Exporter:
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar -xvf node_exporter-1.6.1.linux-amd64.tar.gz
sudo cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporterСъздайте systemd услуга за Node Exporter:
sudo nano /etc/systemd/system/node_exporter.service[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporterNode Exporter вече излага метрики на http://your-server-ip:9100/metrics.
Добавете Node Exporter като цел за извличане в prometheus.yml:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "node_exporter"
static_configs:
- targets: ["localhost:9100"]Рестартирайте Prometheus и проверете дали целта се показва като UP в интерфейса на Prometheus под Status → Targets.
Стъпка 4: Визуализиране на метрики с Grafana
Grafana трансформира необработените метрики на Prometheus в приложими, визуално богати табла. Тя е стандартният слой за визуализация за внедрявания на Prometheus.
Инсталиране на Grafana на Ubuntu/Debian:
sudo apt-get install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
sudo systemctl enable grafana-server
sudo systemctl start grafana-serverСвържете Prometheus като източник на данни:
- Отворете Grafana на
http://your-server-ip:3000(данни за вход по подразбиране:admin/admin) - Навигирайте до Configuration → Data Sources → Add data source
- Изберете Prometheus
- Задайте URL на
http://localhost:9090 - Кликнете Save & Test
Импортирайте предварително изградено табло:
- Отидете на Dashboards → Import
- Въведете ID на таблото 1860 (Node Exporter Full) от пазара на Grafana
- Изберете вашия източник на данни Prometheus и кликнете Import
Веднага ще получите изчерпателен изглед на използването на CPU, консумацията на памет, дисковия I/O, мрежовата статистика и натоварването на системата — всичко в едно интерактивно табло.
Стъпка 5: Конфигуриране на правила за предупреждения и Alertmanager
Предупрежденията в Prometheus се състоят от две части: правила за предупреждения, дефинирани в Prometheus, и Alertmanager, който управлява насочването и доставката.
Създайте файл с правила за предупреждения:
sudo mkdir -p /etc/prometheus/rules
sudo nano /etc/prometheus/rules/system_alerts.ymlgroups:
- name: system_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage has exceeded 80% for more than 5 minutes. Current value: {{ $value }}%"
- alert: LowDiskSpace
expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 15
for: 10m
labels:
severity: critical
annotations:
summary: "Low disk space on {{ $labels.instance }}"
description: "Available disk space on / is below 15%. Immediate action required."
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.instance }}"
description: "Memory usage has exceeded 85% for more than 5 minutes."
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} is down"
description: "Prometheus target {{ $labels.instance }} has been unreachable for more than 1 minute."Валидирайте файла с правила:
promtool check rules /etc/prometheus/rules/system_alerts.ymlИнсталирайте и конфигурирайте Alertmanager:
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
tar -xvf alertmanager-0.26.0.linux-amd64.tar.gz
sudo cp alertmanager-0.26.0.linux-amd64/alertmanager /usr/local/bin/
sudo mkdir /etc/alertmanagerСъздайте конфигурацията на Alertmanager:
sudo nano /etc/alertmanager/alertmanager.ymlglobal:
smtp_smarthost: 'smtp.yourdomain.com:587'
smtp_from: 'alerts@yourdomain.com'
smtp_auth_username: 'alerts@yourdomain.com'
smtp_auth_password: 'your_password'
route:
group_by: ['alertname', 'instance']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'admin@yourdomain.com'
send_resolved: true> Забележка: За професионална доставка на имейли в тръбопровода ви за предупреждения, помислете за съчетаване на Prometheus с AlexHost имейл хостинг за надеждна SMTP инфраструктура.
Разширена конфигурация: Откриване на услуги
За динамични среди — като Kubernetes клъстери или флотове от сървъри с автоматично мащабиране — статичните списъци с цели бързо стават неуправляеми. Prometheus поддържа множество механизми за откриване на услуги по подразбиране:
scrape_configs:
- job_name: "kubernetes-pods"
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: trueПоддържаните бекенди за откриване на услуги включват Kubernetes, Consul, EC2, Azure, GCE, DNS-базирано откритие и файлово-базирано откритие — правейки Prometheus адаптируем към практически всяка инфраструктурна топология.
Случаи на употреба на Prometheus
Prometheus се отличава в широк спектър от сценарии за наблюдение:
Наблюдение на инфраструктурата
Събирайте метрики на ниво сървър — CPU, памет, диск, мрежа — от всеки възел във вашия флот. Независимо дали управлявате единичен Dedicated сървър или голям клъстер, Prometheus осигурява унифицирана видимост за всички хостове.
Наблюдение на производителността на приложенията (APM)
Проследявайте честотата на заявките, честотата на грешките, латентностите на отговорите (методът RED) и консумацията на ресурси за уеб приложения и API. Клиентските библиотеки на Prometheus са налични за Go, Python, Java, Ruby, Node.js и много други.
Наблюдение на Kubernetes и контейнери
Prometheus се интегрира нативно с Kubernetes чрез exporters kube-state-metrics и cAdvisor, осигурявайки дълбока видимост в здравето на pod-овете, квотите за ресурси, статуса на внедряването и метриките на ниво клъстер.
Наблюдение на бази данни
Наблюдавайте производителността на заявките, използването на пула от връзки, изоставането при репликация и коефициентите на попадения в кеша за бази данни като PostgreSQL, MySQL и Redis с помощта на специализирани exporters.
Персонализирани бизнес метрики
Инструментирайте собствените си приложения, за да излагат специфични за домейна метрики — като обработени поръчки в секунда, активни потребителски сесии или честота на платежни транзакции — позволявайки наблюдаемост на бизнес ниво наред с техническите метрики.
Наблюдение на GPU натоварвания
За екипи, изпълняващи натоварвания за машинно обучение или високопроизводителни изчисления, Prometheus може да се интегрира с DCGM exporters за наблюдение на използването на GPU, паметта и температурата. Това се съчетава добре с AlexHost GPU хостинг за AI и ML инфраструктура.
Prometheus срещу алтернативни решения за наблюдение
| Функция | Prometheus | Nagios | Zabbix | Datadog |
|---|---|---|---|---|
| Модел на данни | Времеви редове с етикети | Базиран на проверки | Базиран на елементи | Времеви редове с тагове |
| Модел на събиране | Pull (+ Pushgateway) | Активни/Пасивни проверки | Базиран на агент | Базиран на агент |
| Език за заявки | PromQL | Няма | Персонализиран | Персонализиран |
| Нативен за Kubernetes | Да (първокласен) | Ограничен | Ограничен | Да (платен) |
| Цена | Безплатен / С отворен код | Безплатен / С отворен код | Безплатен / С отворен код | Търговски SaaS |
| Мащабируемост | Висока (с Thanos/Cortex) | Умерена | Умерена | Висока |
Най-добри практики за производствена среда
Внедряването на Prometheus в производствена среда изисква внимание към няколко оперативни аспекта:
- Съхранение на данни: Периодът на съхранение по подразбиране е 15 дни. Коригирайте
--storage.tsdb.retention.timeвъз основа на капацитета на съхранение и изискванията за съответствие. За дългосрочно съхранение, помислете за Thanos или Cortex. - Сигурност: Ограничете достъпа до уеб интерфейса и API на Prometheus с помощта на обратен прокси (Nginx или Caddy) с удостоверяване. Prometheus не включва вградено удостоверяване.
- Висока наличност: Изпълнявайте множество инстанции на Prometheus, извличащи метрики от едни и същи цели за резервираност. Използвайте функцията за клъстериране на Alertmanager, за да предотвратите дублирани известия.
- Управление на кардиналността: Избягвайте етикети с висока кардиналност (напр. потребителски ID, ID на заявки) в имената на метриките, тъй като те могат да причинят проблеми с паметта и производителността.
- TLS криптиране: Активирайте TLS за крайните точки за извличане и Prometheus API. Съчетайте това с SSL сертификат за защита на всички комуникации между компонентите на Prometheus.
- Планиране на ресурсите: Prometheus е интензивен по отношение на паметта. Разпределете достатъчно RAM въз основа на броя на активните времеви редове. Общото правило е приблизително 1–2 байта на извадка в паметта.
Често задавани въпроси
В: Каква е разликата между Prometheus и Grafana?
Prometheus е бекендът за наблюдение и предупреждения — той събира, съхранява и заявява метрики. Grafana е фронтенд за визуализация, който се свързва с Prometheus (и други източници на данни) за изобразяване на табла. Те са допълващи се инструменти, а не алтернативи.
В: Може ли Prometheus да наблюдава Windows сървъри?
Да. Windows Exporter (преди WMI Exporter) излага системни метрики на Windows в съвместим с Prometheus формат, обхващащ CPU, памет, диск, мрежа, IIS и много други.
В: Как Prometheus управлява висока наличност?
Самият Prometheus е проектиран да работи като единична инстанция на клъстер. За висока наличност, изпълнявате два идентични Prometheus сървъра, извличащи метрики от едни и същи цели. Alertmanager поддържа нативно клъстериране за дедублиране на предупреждения от множество инстанции на Prometheus.
В: За какво се използва PromQL?
PromQL (Prometheus Query Language) се използва за заявки към данни от времеви редове, съхранени в Prometheus. Той поддържа мигновени заявки, заявки за диапазони, агрегации, математически операции и функции — позволявайки всичко от прости търсения на метрики до сложни изрази за откриване на аномалии.
Заключение
Prometheus е изпитано в бойни условия, производствено решение за наблюдение, което осигурява дълбока видимост в реално време за здравето и производителността на целия ви инфраструктурен стек. Неговата архитектура на изтегляне, многоизмерен модел на данни, мощният език за заявки PromQL и безпроблемните интеграции с инструменти като Grafana и Alertmanager го правят златен стандарт за съвременна наблюдаемост.
Независимо дали наблюдавате единичен Linux сървър, флот от Dedicated сървъри, Kubernetes клъстер или сложно приложение с микроуслуги, Prometheus се мащабира, за да отговори на вашите нужди. Следвайки стъпките в това ръководство — инсталиране на Prometheus, внедряване на Node Exporter, конфигуриране на Grafana табла и настройване на интелигентни правила за предупреждения — ще разполагате с надеждна основа за наблюдение, която ви помага да откривате аномалии рано, да реагирате на инциденти по-бързо и непрекъснато да подобрявате надеждността на системата.
Започнете с основите, итерирайте върху таблата и праговете за предупреждения, докато научите нормалното поведение на системата си, и постепенно разширявайте покритието до всеки слой на вашия стек. Prometheus не е просто инструмент за наблюдение — той е крайъгълен камък на съвременното инженерство за надеждност на сайтове.
