- Added comprehensive course structure with 11 modules - Included theoretical content, practical examples, and tasks - Multi-language code examples (Java, Rust, Node.js, Python) - Detailed analysis of architectural approaches and trade-offs - Complete caching strategies documentation - Architecture examples from real-world systems (Twitter, Netflix, Uber) - Structured navigation and learning path - Ready for educational use
4.3 KiB
4.3 KiB
Prometheus и Grafana
Навигация
Prometheus
Prometheus — система мониторинга и база данных временных рядов.
Архитектура Prometheus
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Application │ │ Application │ │ Application │
│ (Metrics) │ │ (Metrics) │ │ (Metrics) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────┐
│ Prometheus │
│ Server │
└─────────────────┘
│
┌─────────────────┐
│ Grafana │
│ (Dashboard) │
└─────────────────┘
PromQL (Язык запросов Prometheus)
Основные запросы:
# Простая метрика
http_requests_total
# Метрика с фильтрами
http_requests_total{method="GET", status="200"}
# Агрегация
sum(http_requests_total) by (method)
# Rate (скорость изменения)
rate(http_requests_total[5m])
# Histogram quantiles
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
Примеры запросов:
# Количество запросов в секунду
rate(http_requests_total[5m])
# Среднее время ответа
rate(http_request_duration_seconds_sum[5m]) / rate(http_request_duration_seconds_count[5m])
# 95-й перцентиль времени ответа
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
# Ошибки в процентах
rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) * 100
Spring Boot + Prometheus
@Configuration
public class PrometheusConfig {
@Bean
public MeterRegistry meterRegistry() {
return new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
}
}
@RestController
public class MetricsController {
private final MeterRegistry meterRegistry;
public MetricsController(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;
}
@GetMapping("/metrics")
public String metrics() {
return ((PrometheusMeterRegistry) meterRegistry).scrape();
}
}
Grafana
Grafana — платформа для визуализации метрик и создания дашбордов.
Создание дашборда
{
"dashboard": {
"title": "Application Metrics",
"panels": [
{
"title": "Request Rate",
"type": "graph",
"targets": [
{
"expr": "rate(http_requests_total[5m])",
"legendFormat": "{{method}} {{endpoint}}"
}
]
},
{
"title": "Response Time",
"type": "graph",
"targets": [
{
"expr": "histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))",
"legendFormat": "95th percentile"
}
]
}
]
}
}
Алерты в Grafana
{
"alert": {
"name": "High Error Rate",
"message": "Error rate is above 5%",
"conditions": [
{
"query": {
"params": ["A", "5m", "now"]
},
"reducer": {
"type": "last",
"params": []
},
"evaluator": {
"params": [0.05],
"type": "gt"
}
}
]
}
}