← Назад к вопросам
Что такое Grafana и для чего она используется?
2.2 Middle🔥 91 комментариев
#Docker, Kubernetes и DevOps
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Grafana: визуализация и мониторинг метрик
Grafana — это мощный инструмент для визуализации, мониторинга и аналитики временных рядов метрик. Это один из стандартных инструментов в DevOps и наблюдаемости (observability).
1. Что такое Grafana
Grafana — это open-source платформа для мониторинга и визуализации метрик из разных источников данных (data sources).
Променей (Prometheus) / Elastic / InfluxDB / CloudWatch / ...
↓
Grafana (agregation + visualization)
↓
Dashboards (графики, алерты)
↓
Пользователи / Slack / Email / PagerDuty
2. Основные компоненты
Data Sources
Grafana подключается к источникам метрик:
# Prometheus — самый популярный
data_sources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
access: proxy
# Elasticsearch для логов
- name: Elasticsearch
type: elasticsearch
url: http://elasticsearch:9200
# InfluxDB для time-series
- name: InfluxDB
type: influxdb
url: http://influxdb:8086
# AWS CloudWatch
- name: CloudWatch
type: cloudwatch
3. Метрики в Java приложениях
// Используем Micrometer для сбора метрик
import io.micrometer.core.instrument.MeterRegistry;
@RestController
public class OrderController {
private final MeterRegistry meterRegistry;
public OrderController(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
@GetMapping("/orders/{id}")
public Order getOrder(@PathVariable Long id) {
// Считаем количество запросов
meterRegistry.counter("orders.get.requests").increment();
Order order = orderService.getOrder(id);
// Считаем время обработки (gauge, histogram, timer)
meterRegistry.timer("orders.get.time").record(() -> {
// операция
});
return order;
}
}
// Spring Boot по умолчанию export'ит метрики на /actuator/prometheus
4. Prometheus как source для Grafana
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'java-app'
static_configs:
- targets: ['localhost:8080']
metrics_path: '/actuator/prometheus'
- job_name: 'docker-containers'
static_configs:
- targets: ['localhost:9100'] # node-exporter
5. Примеры дашбордов в Grafana
Dashboard 1: JVM Metrics
┌─────────────────────────────────────┐
│ JVM Memory Usage │
│ ┌────────────────────────────────┐ │
│ │ Heap Memory: 512MB / 1024MB │ │ (Gauge)
│ └────────────────────────────────┘ │
│ ┌────────────────────────────────┐ │
│ │ GC Collections: │ │ (Counter)
│ │ Young: 156 Old: 12 │ │
│ └────────────────────────────────┘ │
│ ┌────────────────────────────────┐ │
│ │ Thread Count: 42 │ │ (Gauge)
│ └────────────────────────────────┘ │
└─────────────────────────────────────┘
Dashboard 2: Application Performance
┌──────────────────────────────────────┐
│ HTTP Requests (last 1h) │
│ ┌────────────────────────────────┐│
│ │ Requests/sec ││
│ │ ╱\ ││
│ │ ╱ \___ ││
│ │ ╱________\ ││
│ └────────────────────────────────┘│
│ Success: 95.2% Errors: 4.8% │
└──────────────────────────────────────┘
6. Запросы в Grafana (PromQL)
# Simple: текущее значение
jvm_memory_used_bytes
# Rate: скорость изменения (за последний час)
rate(jvm_memory_used_bytes[1h])
# Filtering: фильтруем по label'ам
jvm_memory_used_bytes{instance="localhost:8080"}
# Aggregation: сумма по всем экземплярам
sum(jvm_memory_used_bytes)
# Функции: average
avg(rate(jvm_memory_used_bytes[5m]))
# Операции
rate(http_requests_total[5m]) * 60 # запросы в минуту
7. Алерты в Grafana
alert:
name: "High Memory Usage"
condition: "jvm_memory_used_bytes > 900MB"
duration: "5m"
severity: "critical"
# Actions
notifications:
- type: "slack"
channel: "#alerts"
message: "Memory is too high!"
- type: "email"
to: "admin@company.com"
- type: "pagerduty"
service_key: "xxx"
8. Интеграция с Java приложением
// build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
}
// application.yml
management:
endpoints:
web:
exposure:
include: prometheus,health,metrics
metrics:
export:
prometheus:
enabled: true
// Custom metrics
@Component
public class BusinessMetrics {
private final MeterRegistry meterRegistry;
private final AtomicInteger activeOrders;
public BusinessMetrics(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
this.activeOrders = new AtomicInteger(0);
// Register gauge
meterRegistry.gauge("orders.active", activeOrders);
}
public void processOrder() {
activeOrders.incrementAndGet();
try {
// бизнес логика
} finally {
activeOrders.decrementAndGet();
}
}
}
9. Docker Compose для Grafana + Prometheus
version: '3.8'
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
grafana:
image: grafana/grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana-data:/var/lib/grafana
depends_on:
- prometheus
java-app:
build: .
ports:
- "8080:8080"
depends_on:
- prometheus
volumes:
prometheus-data:
grafana-data:
10. Типичные дашборды
JVM и приложение:
- Heap memory usage
- Garbage collection time
- Thread count
- HTTP requests rate
- Error rate
- Response time distribution
- Database connection pool
Infrastructure:
- CPU usage
- Memory usage
- Disk space
- Network bandwidth
- Container health
Business metrics:
- Orders processed
- Users online
- Revenue
- Conversion rate
11. Когда использовать Grafana
Prod монитор:
┌─ Grafana Instance ─┐
│ - Memory graph │ ← Видим проблемы в real-time
│ - Requests/sec │ ← Отслеживаем нагрузку
│ - Error rate │ ← Алерты при проблемах
│ - Response time │ ← SLO/SLA мониторинг
└───────────────────┘
↓ (если проблема)
Посмотри в Prometheus
→ Посмотри в логи (ELK)
→ Посмотри в application
12. Преимущества Grafana
✅ Open-source ✅ Beautiful dashboards ✅ Real-time monitoring ✅ Много data sources ✅ Алерты ✅ Пользовательские переменные ✅ Sharing dashboards ✅ Плагины
13. Альтернативы
| Tool | Преимущество | Недостаток |
|---|---|---|
| Grafana | Красивые графики | Нужен external DB |
| Kibana | Для Elastic logs | Только для ES |
| Datadog | SaaS | Платный |
| Prometheus | Встроенный UI | Простовато |
| New Relic | Полный monitoring | Дорого |
14. Best Practices
1. Используй meaningful metric names
2. Добавляй labels для фильтрации
3. Алерты на важные события
4. Сохраняй историю метрик (retention)
5. Организуй dashboards логически
6. Используй template variables
7. Документируй metrics
8. Мониторь саму Grafana
Резюме
Grafana — это:
- Visualization tool для метрик
- Real-time monitoring
- Интеграция с Prometheus, Elasticsearch и др.
- Алерты и уведомления
- Beautiful, shareable dashboards
Использование:
- Мониторинг приложения
- Отслеживание performance
- SLA/SLO monitoring
- Alerting при проблемах
- Анализ trends
Grafana — это must-have инструмент для любого production приложения. Пользуется очень популярностью в DevOps и SRE community.