← Назад к вопросам

Что такое 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
DatadogSaaSПлатный
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.

Что такое Grafana и для чего она используется? | PrepBro