Лого
_

Документация по эксплуатации экземпляра системы «Искусственный интеллект НИКА»

Полное руководство по эксплуатации развёрнутого экземпляра: Vue.js frontend, Nginx, Kong, Kubernetes, сервисы Document/NLP/ML, PostgreSQL, Redis, RabbitMQ, мониторинг, резервное копирование, безопасность, обслуживание и устранение неисправностей.

Ниже приведён полный текст разделов документации; для быстрого перехода используйте оглавление слева или якорные ссылки на мобильных устройствах.

1. ВВЕДЕНИЕ

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. СИСТЕМНЫЕ ТРЕБОВАНИЯ

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. УПРАВЛЕНИЕ СЕРВИСАМИ

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. МОНИТОРИНГ СИСТЕМЫ

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. РЕЗЕРВНОЕ КОПИРОВАНИЕ И ВОССТАНОВЛЕНИЕ

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. БЕЗОПАСНОСТЬ

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. ОБСЛУЖИВАНИЕ СИСТЕМЫ

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. TROUBLESHOOTING

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. ИНТЕГРАЦИИ

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. ДОКУМЕНТАЦИЯ И ОТЧЁТНОСТЬ

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.