Мониторинг и наблюдаемость
Как мы следим за здоровьем платформы
Мониторинг и наблюдаемость
Для обеспечения надежности финансовой платформы мы используем комплексный подход к мониторингу.
Стек технологий
- Prometheus: Сбор и хранение метрик.
- Grafana: Визуализация данных и дашборды.
- Loki: Централизованный сбор логов.
- Jaeger: Распределенная трассировка запросов (Distributed Tracing).
Ключевые метрики
1. Инфраструктурные
- Загрузка CPU/Memory по сервисам.
- Состояние Kafka (consumer lag, throughput).
- Статус узлов Besu (block height, peer count).
2. Бизнес-метрики
- Количество успешных выпусков ЦФА.
- Объем торгов в 24ч.
- Время обработки платежа (latency).
- Количество активных пользователей.
Логирование
Все логи микросервисов пишутся в формате JSON и включают:
trace_id/correlation_iduser_idservice_namelevel(INFO, WARN, ERROR)
Это позволяет быстро находить причину сбоя в распределенной системе.
Дашборды
System Overview
Общий обзор состояния системы.
Панели:
- System Health Score
- Services Status
- Resource Usage
- Request Metrics
- Error Rate
- Latency (P50, P95, P99)
Services Health
Здоровье всех сервисов платформы.
Панели:
- Auth Service
- CFA Core Service
- Ledger Service
- Besu Connector
- Payments Service
- Market Service
Kafka Metrics
Метрики Kafka.
Панели:
- Messages per second
- Consumer lag
- Broker health
- Topic throughput
Database Performance
Производительность баз данных.
Панели:
- Connection pool usage
- Query latency
- Slow queries
- Lock contention
Blockchain Metrics
Метрики блокчейна.
Панели:
- Block time
- Transaction throughput
- Gas usage
- Validator health
Business Metrics
Бизнес-метрики платформы.
Панели:
- Active users
- Transactions per day
- Trading volume
- CFA-RUB supply
Алерты
High Error Rate
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: 'High error rate detected'High Latency
- alert: HighLatency
expr: histogram_quantile(0.95, http_request_duration_seconds_bucket) > 1
for: 5m
labels:
severity: warning
annotations:
summary: 'High latency detected'Service Down
- alert: ServiceDown
expr: up{job=~".*-service"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: 'Service is down'Database Connection Pool High
- alert: DatabaseConnectionPoolHigh
expr: pg_stat_activity_count / pg_settings_max_connections > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: 'Database connection pool high'Kafka Consumer Lag
- alert: KafkaConsumerLagHigh
expr: kafka_consumer_lag > 1000
for: 5m
labels:
severity: warning
annotations:
summary: 'Kafka consumer lag is high'Трейсинг
OpenTelemetry
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
import { JaegerExporter } from '@opentelemetry/exporter-jaeger';
const provider = new NodeTracerProvider();
const exporter = new JaegerExporter({
endpoint: 'http://jaeger:14268/api/traces',
});
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();Интеграции
Slack
import axios from 'axios';
export async function sendSlackAlert(message: string, severity: 'info' | 'warning' | 'critical') {
const webhookUrl = process.env.SLACK_WEBHOOK_URL;
const colors = {
info: '#36a64f',
warning: '#ff9900',
critical: '#ff0000',
};
await axios.post(webhookUrl, {
attachments: [
{
color: colors[severity],
text: message,
ts: Math.floor(Date.now() / 1000),
},
],
});
}PagerDuty
export async function sendPagerDutyAlert(
summary: string,
severity: 'critical' | 'error' | 'warning',
) {
const apiKey = process.env.PAGERDUTY_API_KEY;
await axios.post('https://events.pagerduty.com/v2/enqueue', {
routing_key: apiKey,
event_action: 'trigger',
payload: {
summary,
severity,
source: 'Maniton Platform',
custom_details: {
timestamp: new Date().toISOString(),
},
},
});
}Troubleshooting
Проблема: Метрики не собираются
Решение:
# Проверка endpoint
curl http://localhost:3001/metrics
# Проверка Prometheus конфигурации
kubectl get configmap prometheus -o yaml
# Перезапуск Prometheus
kubectl rollout restart deployment prometheusПроблема: Алерты не отправляются
Решение:
# Проверка Alertmanager
curl http://localhost:9093/-/healthy
# Проверка webhook
curl -X POST https://hooks.slack.com/services/... -d '{"text":"test"}'
# Проверка конфигурации
kubectl get configmap alertmanager -o yamlПроблема: Логи не отображаются
Решение:
# Проверка Loki
curl http://localhost:3100/ready
# Поиск логов
curl -G 'http://localhost:3100/loki/api/v1/query_range' \
--data-urlencode 'query={job="auth-service"}' \
--data-urlencode 'start=2024-01-01T00:00:00Z' \
--data-urlencode 'end=2024-01-01T23:59:59Z'