Grafana — это то, что превращает поток цифр в картинку, понятную даже не-технарю. Под конкретного клиента мы выстроили несколько уровней визуализации: для дежурного инженера, для тимлида и для руководства.
Ставим Grafana OSS из официального репозитория:
# Добавляем репозиторий
apt install -y apt-transport-https software-properties-common
wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" > /etc/apt/sources.list.d/grafana.list
# Устанавливаем
apt update && apt install grafana -y
# Настраиваем
# /etc/grafana/grafana.ini
[server]
http_port = 3000
[security]
admin_user = admin
admin_password = SecureGrafanaPass
[auth.anonymous]
enabled = false
# Запускаем
systemctl enable --now grafana-server
systemctl status grafana-server
После запуска веб-интерфейс открывается по адресу http://server:3000.
Prometheus подключается как Data Source — буквально за минуту. Дальше мы импортировали проверенные готовые дашборды:
# Подключение через API
curl -X POST http://admin:SecureGrafanaPass@localhost:3000/api/datasources \
-H 'Content-Type: application/json' \
-d '{
"name": "Prometheus",
"type": "prometheus",
"url": "http://localhost:9090",
"access": "proxy",
"isDefault": true
}'
# Или через GUI:
# Configuration -> Data Sources -> Add data source -> Prometheus
# URL: http://localhost:9090
# Save & Test
Часть дашбордов взяли готовыми с Grafana.com, часть написали с нуля — под специфику хостинг-провайдера стандартные шаблоны подходят процентов на шестьдесят, не больше:
# Через GUI: Dashboards -> Import -> ID
# Node Exporter Full — ID: 1860 (самый популярный)
# Node Exporter for Prometheus — ID: 11074
# Nginx — ID: 12708
# PostgreSQL — ID: 9628
# MySQL — ID: 7362
# Docker — ID: 893
# Blackbox Exporter — ID: 7587
# Через API (пример импорта Node Exporter Full)
curl -s https://grafana.com/api/dashboards/1860/revisions/latest/download | \
curl -X POST http://admin:SecureGrafanaPass@localhost:3000/api/dashboards/import \
-H 'Content-Type: application/json' \
-d "{
\"dashboard\": $(cat),
\"overwrite\": true,
\"inputs\": [{\"name\": \"DS_PROMETHEUS\", \"type\": \"datasource\", \"pluginId\": \"prometheus\", \"value\": \"Prometheus\"}],
\"folderId\": 0
}"
В итоге у клиента получилось три уровня: обзорный экран, где все 200+ серверов видны разом, детальный вид по конкретной машине — и отдельный дашборд с бизнес-метриками: SLA, доступность услуг, всё что нужно руководству на утреннем совещании.