Общая навигация
Общие документы
ИИ "НИКА"
Цифровой скетч
Моя CRM
Разделы документа
1. ВВЕДЕНИЕ
2. СИСТЕМНЫЕ ТРЕБОВАНИЯ
3. УПРАВЛЕНИЕ СЕРВИСАМИ
4. МОНИТОРИНГ СИСТЕМЫ
5. РЕЗЕРВНОЕ КОПИРОВАНИЕ И ВОССТАНОВЛЕНИЕ
6. БЕЗОПАСНОСТЬ
7. ОБСЛУЖИВАНИЕ СИСТЕМЫ
8. TROUBLESHOOTING
9. ИНТЕГРАЦИИ
10. ДОКУМЕНТАЦИЯ И ОТЧЁТНОСТЬ
Полное руководство по эксплуатации развёрнутого экземпляра: Vue.js frontend, Nginx, Kong, Kubernetes, сервисы Document/NLP/ML, PostgreSQL, Redis, RabbitMQ, мониторинг, резервное копирование, безопасность, обслуживание и устранение неисправностей.
Ниже приведён полный текст разделов документации; для быстрого перехода используйте оглавление слева или якорные ссылки на мобильных устройствах.
1.1. Назначение документа
Данный документ содержит полное руководство по эксплуатации развёрнутого экземпляра системы «Искусственный интеллект НИКА», включая frontend-приложение на Vue.js, backend-сервисы и инфраструктурные компоненты.
1.2. Целевая аудитория
• Системные администраторы
• DevOps инженеры
• Операторы системы
• Служба технической поддержки
1.3. Архитектура развёрнутого экземпляра
┌──────────────────────────────────────────────────┐
│ Load Balancer (Nginx) │
├──────────────────────────────────────────────────┤
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Vue.js App │ │ Vue.js App │ │ Vue.js App │ │
│ │ Instance 1 │ │ Instance 2 │ │ Instance 3 │ │
│ └────────────┘ └────────────┘ └────────────┘ │
├──────────────────────────────────────────────────┤
│ API Gateway (Kong) │
├──────────────────────────────────────────────────┤
│ ┌──────────────────────────────────────────┐ │
│ │ Kubernetes Cluster │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │Document │ │ NLP │ │ ML │ │ │
│ │ │Service │ │ Service │ │ Service │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ │ │
│ └──────────────────────────────────────────┘ │
├──────────────────────────────────────────────────┤
│ PostgreSQL │ Redis │ RabbitMQ │
└──────────────────────────────────────────────────┘
2.1. Аппаратные требования
2.1.1. Минимальные требования
Компонент Требования
CPU 8 cores (Intel Xeon E5 или выше)
RAM 32 GB DDR4
Storage 500 GB SSD
Network 1 Gbps
GPU Опционально (NVIDIA Tesla T4)
2.1.2. Рекомендуемые требования
Компонент Требования
CPU 16+ cores (Intel Xeon Gold)
RAM 64 GB DDR4
Storage 1 TB NVMe SSD
Network 10 Gbps
GPU NVIDIA Tesla V100
2.2. Программные требования
Operating System:
- Ubuntu 20.04 LTS / 22.04 LTS
- CentOS 8 / RHEL 8
- Astra Linux Special Edition
Container Runtime:
- Docker 20.10+
- containerd 1.5+
Orchestration:
- Kubernetes 1.24+
- Docker Swarm (альтернатива)
Databases:
- PostgreSQL 13+
- Redis 6.2+
- Elasticsearch 7.17+ (для логов)
Message Queue:
- RabbitMQ 3.9+
Web Server:
- Nginx 1.20+
- Node.js 18+ (для Vue.js SSR)
3.1. Frontend сервисы (Vue.js)
3.1.1. Запуск/остановка
# Запуск frontend приложения
systemctl start nika-frontend
# Остановка
systemctl stop nika-frontend
# Перезапуск
systemctl restart nika-frontend
# Статус
systemctl status nika-frontend
# Docker compose вариант
docker-compose up -d frontend
docker-compose down frontend
3.1.2. Конфигурация Nginx
# /etc/nginx/sites-available/nika-frontend
server {
listen 80;
server_name nika.example.com;
# Redirect to HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name nika.example.com;
ssl_certificate /etc/ssl/certs/nika.crt;
ssl_certificate_key /etc/ssl/private/nika.key;
# Vue.js static files
root /var/www/nika-frontend/dist;
index index.html;
# Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript;
location / {
try_files $uri $uri/ /index.html;
}
# API proxy
location /api {
proxy_pass http://backend-cluster;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# WebSocket support
location /ws {
proxy_pass http://websocket-server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
}
3.2. Backend сервисы
3.2.1. Kubernetes управление
# Просмотр всех подов
kubectl get pods -n nika-production
# Масштабирование
kubectl scale deployment nika-api --replicas=5 -n nika-production
# Обновление образа
kubectl set image deployment/nika-api \
nika-api=registry.example.com/nika-api:v1.2.0 \
-n nika-production
# Просмотр логов
kubectl logs -f deployment/nika-api -n nika-production
# Выполнение команд в контейнере
kubectl exec -it nika-api-pod-xxxxx -n nika-production -- bash
3.2.2. Docker управление
# Список контейнеров
docker ps -a | grep nika
# Просмотр логов
docker logs -f nika-backend
# Мониторинг ресурсов
docker stats nika-backend
# Очистка неиспользуемых образов
docker system prune -a
3.3. База данных
3.3.1. PostgreSQL операции
-- Подключение к БД
psql -U nika_user -d nika_production
-- Проверка активных соединений
SELECT pid, usename, application_name, client_addr, state
FROM pg_stat_activity
WHERE datname = 'nika_production';
-- Размер базы данных
SELECT pg_database_size('nika_production');
-- Анализ производительности запросов
SELECT query, calls, total_time, mean_time
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;
-- Vacuum и анализ
VACUUM ANALYZE;
3.3.2. Redis операции
# Подключение к Redis
redis-cli -h localhost -p 6379
# Мониторинг в реальном времени
redis-cli monitor
# Информация о сервере
redis-cli info
# Очистка кеша
redis-cli FLUSHDB
# Сохранение снапшота
redis-cli BGSAVE
4.1. Метрики производительности
4.1.1. Frontend метрики
// Performance monitoring script
const performanceMetrics = {
// Загрузка страницы
pageLoad: {
domContentLoaded: performance.timing.domContentLoadedEventEnd -
performance.timing.navigationStart,
loadComplete: performance.timing.loadEventEnd -
performance.timing.navigationStart
},
// Core Web Vitals
webVitals: {
FCP: null, // First Contentful Paint
LCP: null, // Largest Contentful Paint
FID: null, // First Input Delay
CLS: null // Cumulative Layout Shift
},
// API метрики
apiCalls: {
totalCalls: 0,
averageResponseTime: 0,
errorRate: 0
}
};
// Отправка метрик
setInterval(() => {
fetch('/api/metrics', {
method: 'POST',
body: JSON.stringify(performanceMetrics)
});
}, 60000); // каждую минуту
4.1.2. Backend метрики
# Prometheus метрики
- name: http_requests_total
type: counter
help: Total HTTP requests
- name: http_request_duration_seconds
type: histogram
help: HTTP request latency
- name: document_processing_time
type: histogram
help: Document analysis duration
- name: ml_inference_time
type: gauge
help: ML model inference time
- name: database_connections_active
type: gauge
help: Active database connections
4.2. Grafana дашборды
4.2.1. System Overview Dashboard
{
"dashboard": {
"title": "NIKA System Overview",
"panels": [
{
"title": "Request Rate",
"targets": [
{
"expr": "rate(http_requests_total[5m])"
}
]
},
{
"title": "Response Time",
"targets": [
{
"expr": "histogram_quantile(0.95, http_request_duration_seconds)"
}
]
},
{
"title": "Error Rate",
"targets": [
{
"expr": "rate(http_requests_total{status=~'5..'}[5m])"
}
]
},
{
"title": "Active Users",
"targets": [
{
"expr": "nika_active_users"
}
]
}
]
}
}
4.3. Алерты и уведомления
4.3.1. Alertmanager конфигурация
# alertmanager.yml
global:
smtp_from: 'alerts@nika.example.com'
smtp_smarthost: 'smtp.example.com:587'
smtp_auth_username: 'alerts@nika.example.com'
smtp_auth_password: 'password'
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'team-ops'
routes:
- match:
severity: critical
receiver: 'team-ops-critical'
continue: true
receivers:
- name: 'team-ops'
email_configs:
- to: 'ops-team@example.com'
- name: 'team-ops-critical'
email_configs:
- to: 'ops-critical@example.com'
slack_configs:
- api_url: 'YOUR_SLACK_WEBHOOK_URL'
channel: '#alerts-critical'
4.3.2. Правила алертов
# alert_rules.yml
groups:
- name: nika_alerts
interval: 30s
rules:
- alert: HighResponseTime
expr: histogram_quantile(0.95, http_request_duration_seconds) > 2
for: 5m
labels:
severity: warning
annotations:
summary: "High response time detected"
description: "95th percentile response time is {{ $value }}s"
- alert: HighErrorRate
expr: rate(http_requests_total{status=~'5..'}[5m]) > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: "High error rate detected"
description: "Error rate is {{ $value | humanizePercentage }}"
- alert: DatabaseConnectionPool
expr: database_connections_active / database_connections_max > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "Database connection pool near limit"
description: "{{ $value | humanizePercentage }} of connections used"
5.1. Стратегия резервного копирования
5.1.1. Компоненты для backup
Backup Components:
Database:
- PostgreSQL: Full + Incremental
- Redis: RDB snapshots
Application:
- Configuration files
- Uploaded documents
- ML models
Infrastructure:
- Kubernetes manifests
- Docker images
- SSL certificates
5.2. Процедуры backup
5.2.1. Database backup
#!/bin/bash
# backup_database.sh
# PostgreSQL backup
BACKUP_DIR="/backup/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="nika_production"
# Full backup
pg_dump -U nika_user -d $DB_NAME -F c -b -v \
-f "$BACKUP_DIR/full_backup_$DATE.dump"
# WAL архивация для Point-in-Time Recovery
archive_command = 'test ! -f /backup/wal/%f && cp %p /backup/wal/%f'
# Redis backup
redis-cli BGSAVE
cp /var/lib/redis/dump.rdb "$BACKUP_DIR/redis_$DATE.rdb"
5.2.2. Application backup
#!/bin/bash
# backup_application.sh
BACKUP_DIR="/backup/application"
DATE=$(date +%Y%m%d_%H%M%S)
# Backup uploaded files
tar -czf "$BACKUP_DIR/uploads_$DATE.tar.gz" /data/uploads/
# Backup configurations
tar -czf "$BACKUP_DIR/configs_$DATE.tar.gz" \
/etc/nika/ \
/etc/nginx/sites-available/nika* \
/etc/systemd/system/nika*
# Backup ML models
tar -czf "$BACKUP_DIR/models_$DATE.tar.gz" /data/models/
5.3. Восстановление
5.3.1. Database restore
#!/bin/bash
# restore_database.sh
# PostgreSQL restore
BACKUP_FILE="/backup/postgres/full_backup_20240315_120000.dump"
DB_NAME="nika_production"
# Drop and recreate database
psql -U postgres -c "DROP DATABASE IF EXISTS $DB_NAME;"
psql -U postgres -c "CREATE DATABASE $DB_NAME OWNER nika_user;"
# Restore from backup
pg_restore -U nika_user -d $DB_NAME -v $BACKUP_FILE
# Redis restore
systemctl stop redis
cp /backup/redis/redis_20240315_120000.rdb /var/lib/redis/dump.rdb
chown redis:redis /var/lib/redis/dump.rdb
systemctl start redis
5.3.2. Disaster Recovery Plan
1. Оценка ущерба (15 мин)
- Определить масштаб проблемы
- Идентифицировать затронутые компоненты
2. Активация DR плана (5 мин)
- Уведомление команды
- Переключение на резервную инфраструктуру
3. Восстановление данных (1-2 часа)
- Восстановление из последнего backup
- Проверка целостности данных
4. Восстановление сервисов (30 мин)
- Запуск сервисов в порядке зависимостей
- Проверка функциональности
5. Валидация (30 мин)
- Smoke testing
- Проверка критических функций
6. Возврат к нормальной работе (15 мин)
- Переключение DNS
- Мониторинг стабильности
6.1. Управление доступом
6.1.1. Пользователи и роли
-- Создание ролей в PostgreSQL
CREATE ROLE nika_admin WITH LOGIN PASSWORD 'strong_password';
CREATE ROLE nika_operator WITH LOGIN PASSWORD 'operator_password';
CREATE ROLE nika_readonly WITH LOGIN PASSWORD 'readonly_password';
-- Назначение привилегий
GRANT ALL PRIVILEGES ON DATABASE nika_production TO nika_admin;
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO nika_operator;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO nika_readonly;
6.1.2. Kubernetes RBAC
# rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: nika-production
name: nika-operator
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: nika-operator-binding
namespace: nika-production
subjects:
- kind: User
name: operator@example.com
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: nika-operator
apiGroup: rbac.authorization.k8s.io
6.2. Сетевая безопасность
6.2.1. Firewall правила
# UFW configuration
ufw default deny incoming
ufw default allow outgoing
# Allow SSH (restricted)
ufw allow from 10.0.0.0/8 to any port 22
# Allow HTTPS
ufw allow 443/tcp
# Allow HTTP (redirect to HTTPS)
ufw allow 80/tcp
# Allow Kubernetes API (internal only)
ufw allow from 10.0.0.0/8 to any port 6443
# Enable firewall
ufw enable
6.2.2. SSL/TLS конфигурация
# SSL configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
# Security headers
add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline';" always;
6.3. Аудит и логирование
6.3.1. Audit logging
# Kubernetes audit policy
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: RequestResponse
omitStages:
- RequestReceived
resources:
- group: ""
resources: ["secrets", "configmaps"]
namespaces: ["nika-production"]
- level: Metadata
resources:
- group: ""
resources: ["pods", "services"]
6.3.2. Application logging
# Python logging configuration
import logging
from pythonjsonlogger import jsonlogger
# Configure JSON logging
logHandler = logging.StreamHandler()
formatter = jsonlogger.JsonFormatter()
logHandler.setFormatter(formatter)
logger = logging.getLogger()
logger.addHandler(logHandler)
logger.setLevel(logging.INFO)
# Log security events
logger.info("security_event", extra={
"event_type": "login_attempt",
"user": username,
"ip_address": request.client.host,
"timestamp": datetime.utcnow().isoformat(),
"success": True
})
7.1. Регулярное обслуживание
7.1.1. Ежедневные задачи
#!/bin/bash
# daily_maintenance.sh
# Проверка состояния сервисов
systemctl status nika-* | grep -E "Active|Main PID"
# Проверка дискового пространства
df -h | grep -E "Filesystem|/data|/backup"
# Проверка логов на ошибки
grep -i error /var/log/nika/*.log | tail -50
# Backup verification
ls -lah /backup/*/$(date +%Y%m%d)* 2>/dev/null
7.1.2. Еженедельные задачи
#!/bin/bash
# weekly_maintenance.sh
# Database maintenance
psql -U nika_user -d nika_production -c "VACUUM ANALYZE;"
psql -U nika_user -d nika_production -c "REINDEX DATABASE nika_production;"
# Log rotation
logrotate -f /etc/logrotate.d/nika
# Security updates check
apt list --upgradable 2>/dev/null | grep -i security
# Clean old Docker images
docker image prune -a -f --filter "until=168h"
7.1.3. Ежемесячные задачи
#!/bin/bash
# monthly_maintenance.sh
# Full system backup
/scripts/full_backup.sh
# Performance analysis
/scripts/generate_performance_report.sh
# Security audit
/scripts/security_audit.sh
# Capacity planning review
/scripts/capacity_report.sh
7.2. Обновление системы
7.2.1. Rolling update процедура
#!/bin/bash
# rolling_update.sh
VERSION=$1
NAMESPACE="nika-production"
echo "Starting rolling update to version $VERSION"
# Update frontend
kubectl set image deployment/nika-frontend \
frontend=registry.example.com/nika-frontend:$VERSION \
-n $NAMESPACE
# Wait for rollout
kubectl rollout status deployment/nika-frontend -n $NAMESPACE
# Update backend services
for service in api document-processor nlp-service ml-service; do
kubectl set image deployment/$service \
$service=registry.example.com/$service:$VERSION \
-n $NAMESPACE
kubectl rollout status deployment/$service -n $NAMESPACE
done
echo "Rolling update completed"
7.2.2. Rollback процедура
#!/bin/bash
# rollback.sh
DEPLOYMENT=$1
NAMESPACE="nika-production"
# Rollback to previous version
kubectl rollout undo deployment/$DEPLOYMENT -n $NAMESPACE
# Check rollback status
kubectl rollout status deployment/$DEPLOYMENT -n $NAMESPACE
# Verify health
kubectl get pods -n $NAMESPACE -l app=$DEPLOYMENT
8.1. Общие проблемы
8.1.1. Frontend issues
Проблема Симптомы Решение
Белый экран Страница не загружается Проверить консоль браузера, очистить кеш
404 ошибки Ресурсы не найдены Проверить nginx конфигурацию
Медленная загрузка Долгое время отклика Проверить сетевые задержки, CDN
WebSocket disconnect Потеря real-time обновлений Проверить proxy настройки
8.1.2. Backend issues
Проблема Симптомы Решение
High CPU usage Замедление системы Проверить процессы, масштабировать поды
Memory leak OOM kills Анализ heap dump, обновление кода
Database locks Timeout запросов Найти blocking queries, оптимизация
Queue overflow Задержка обработки Увеличить workers, оптимизация
8.2. Диагностические команды
8.2.1. System diagnostics
# CPU и Memory
top -b -n 1 | head -20
free -h
vmstat 1 5
# Disk I/O
iostat -x 1 5
iotop -b -n 1
# Network
netstat -tulpn | grep LISTEN
ss -tunap | grep ESTAB
tcpdump -i any -c 100 port 443
# Processes
ps aux | grep nika
lsof -i :80,443,5432,6379
8.2.2. Application diagnostics
# Check pod logs
kubectl logs -f <pod-name> -n nika-production --tail=100
# Describe pod for events
kubectl describe pod <pod-name> -n nika-production
# Execute commands in pod
kubectl exec -it <pod-name> -n nika-production -- bash
# Port forwarding for debugging
kubectl port-forward <pod-name> 8080:8080 -n nika-production
# Check service endpoints
kubectl get endpoints -n nika-production
8.3. Performance tuning
8.3.1. Database optimization
-- Find slow queries
SELECT query, calls, total_time, mean_time, max_time
FROM pg_stat_statements
WHERE mean_time > 100
ORDER BY mean_time DESC;
-- Index analysis
SELECT schemaname, tablename, indexname, idx_scan
FROM pg_stat_user_indexes
WHERE idx_scan = 0
AND indexname NOT LIKE '%pkey%';
-- Table bloat check
SELECT schemaname, tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size,
n_live_tup, n_dead_tup,
round(100*n_dead_tup/(n_live_tup+1), 2) as dead_percent
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY dead_percent DESC;
8.3.2. Application optimization
# Kubernetes resource optimization
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "2000m"
# HPA configuration
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nika-api-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nika-api
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
9.1. Monitoring интеграции
9.1.1. Prometheus configuration
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'nika-frontend'
static_configs:
- targets: ['frontend-1:9090', 'frontend-2:9090', 'frontend-3:9090']
- job_name: 'nika-backend'
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- nika-production
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
9.1.2. ELK Stack integration
# filebeat.yml
filebeat.inputs:
- type: container
paths:
- '/var/lib/docker/containers/*/*.log'
processors:
- add_kubernetes_metadata:
host: ${NODE_NAME}
matchers:
- logs_path:
logs_path: "/var/lib/docker/containers/"
output.elasticsearch:
hosts: ['elasticsearch:9200']
index: "nika-%{+yyyy.MM.dd}"
processors:
- add_host_metadata:
when.not.contains:
tags: forwarded
9.2. External services
9.2.1. SMTP configuration
# Email settings
EMAIL_CONFIG = {
'SMTP_HOST': 'smtp.example.com',
'SMTP_PORT': 587,
'SMTP_USER': 'nika@example.com',
'SMTP_PASSWORD': os.environ.get('SMTP_PASSWORD'),
'USE_TLS': True,
'FROM_EMAIL': 'noreply@nika.example.com'
}
9.2.2. S3 storage integration
# S3 configuration for document storage
S3_CONFIG = {
'endpoint_url': 'https://s3.example.com',
'aws_access_key_id': os.environ.get('AWS_ACCESS_KEY'),
'aws_secret_access_key': os.environ.get('AWS_SECRET_KEY'),
'bucket_name': 'nika-documents',
'region_name': 'us-east-1'
}
10.1. Операционные отчеты
10.1.1. Daily report template
# Daily Operations Report - [DATE]
## System Status
- Overall Health: [Green/Yellow/Red]
- Uptime: XX.XX%
- Active Users: XXX
## Key Metrics
- Requests Processed: XX,XXX
- Documents Analyzed: X,XXX
- Average Response Time: XXXms
- Error Rate: X.XX%
## Incidents
- [List any incidents]
## Maintenance Activities
- [List completed maintenance]
## Action Items
- [List pending actions]
10.1.2. Performance report
#!/usr/bin/env python3
# generate_performance_report.py
import psycopg2
import json
from datetime import datetime, timedelta
def generate_report():
# Connect to metrics database
conn = psycopg2.connect(
host="localhost",
database="metrics",
user="metrics_user",
password="password"
)
cur = conn.cursor()
# Query performance metrics
cur.execute("""
SELECT
date_trunc('hour', timestamp) as hour,
avg(response_time) as avg_response,
percentile_cont(0.95) WITHIN GROUP (ORDER BY response_time) as p95,
count(*) as request_count
FROM api_metrics
WHERE timestamp > NOW() - INTERVAL '24 hours'
GROUP BY hour
ORDER BY hour
""")
results = cur.fetchall()
# Generate report
report = {
'timestamp': datetime.now().isoformat(),
'period': '24h',
'metrics': [
{
'hour': str(row[0]),
'avg_response_ms': float(row[1]),
'p95_response_ms': float(row[2]),
'request_count': int(row[3])
}
for row in results
]
}
# Save report
with open(f'/reports/performance_{datetime.now():%Y%m%d}.json', 'w') as f:
json.dump(report, f, indent=2)
conn.close()
if __name__ == '__main__':
generate_report()
8 (3452) 696-001
7203558650
722401001
INFO@DI-INDUSTRY.RU
625019, Тюменская область, г. Тюмень,
ул. Республики,д 250, стр. 5, оф 309.
© 2026 Все права защищены