prometheus
Despliega y configura Prometheus como sistema de métricas time-series para el pipeline de verificación de identidad. Gestiona el scraping de métricas desde todos los servicios KYC, el almacenamiento local de series temporales y las consultas PromQL para análisis de rendimiento. Este skill se centra exclusivamente en Prometheus como backend de métricas, separado de la visualización con Grafana.
When to use
Usar este skill cuando el observability_agent necesite configurar Prometheus para recolectar y almacenar métricas del pipeline KYC, definir reglas de alertas basadas en PromQL, o ajustar la configuración de scraping y retención.
Instructions
Desplegar Prometheus con Docker y configuración base para el pipeline KYC:
# docker-compose.yml
prometheus:
image: prom/prometheus:v2.48.0
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus/rules/:/etc/prometheus/rules/
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=30d'
- '--web.enable-lifecycle'
Configurar los scrape targets para todos los microservicios del pipeline KYC:
# prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
rule_files:
- "rules/*.yml"
scrape_configs:
- job_name: 'kyc-liveness'
static_configs:
- targets: ['liveness:8000']
metrics_path: '/metrics'
- job_name: 'kyc-ocr'
static_configs:
- targets: ['ocr:8000']
- job_name: 'kyc-face-match'
static_configs:
- targets: ['face-match:8000']
- job_name: 'kyc-antifraud'
static_configs:
- targets: ['antifraud:8000']
- job_name: 'kyc-decision'
static_configs:
- targets: ['decision:8000']
- job_name: 'kyc-api-gateway'
static_configs:
- targets: ['api-gateway:8000']
Instrumentar los servicios FastAPI del pipeline KYC con prometheus_client:
from prometheus_client import Counter, Histogram, Gauge, generate_latest
from fastapi import FastAPI, Response
app = FastAPI()
VERIFICATION_REQUESTS = Counter(
"kyc_verification_requests_total",
"Total de solicitudes de verificación",
["module", "status"]
)
VERIFICATION_DURATION = Histogram(
"kyc_verification_duration_seconds",
"Duración de la verificación por módulo",
["module"],
buckets=[0.1, 0.5, 1.0, 2.0, 5.0, 8.0, 10.0]
)
CONFIDENCE_SCORE = Histogram(
"kyc_confidence_score",
"Distribución de scores de confianza",
["module"],
buckets=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.85, 0.9, 0.95, 1.0]
)
ACTIVE_SESSIONS = Gauge(
"kyc_active_sessions",
"Sesiones de verificación activas"
)
@app.get("/metrics")
async def metrics():
return Response(generate_latest(), media_type="text/plain")
Definir reglas de recording para pre-calcular métricas agregadas del pipeline:
# prometheus/rules/kyc-recording.yml
groups:
- name: kyc_recording_rules
rules:
- record: kyc:verification_success_rate:5m
expr: rate(kyc_verification_requests_total{status="success"}[5m]) / rate(kyc_verification_requests_total[5m])
- record: kyc:p99_duration:5m
expr: histogram_quantile(0.99, rate(kyc_verification_duration_seconds_bucket[5m]))
- record: kyc:spoofing_detection_rate:1h
expr: rate(kyc_verification_requests_total{module="liveness", status="rejected_spoofing"}[1h])
Configurar alerting rules para los SLOs del pipeline KYC:
# prometheus/rules/kyc-alerts.yml
groups:
- name: kyc_alerts
rules:
- alert: HighFalseAcceptanceRate
expr: kyc:verification_success_rate:5m{module="face_match"} > 0.999
for: 10m
labels:
severity: critical
annotations:
summary: "FAR potencialmente alto - el face_match acepta demasiadas verificaciones"
- alert: VerificationLatencyHigh
expr: kyc:p99_duration:5m > 8
for: 5m
labels:
severity: warning
annotations:
summary: "Latencia p99 de verificación supera los 8 segundos (SLO)"
- alert: LivenessServiceDown
expr: up{job="kyc-liveness"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: "El servicio de liveness detection no está respondiendo"
En Kubernetes, usar ServiceMonitor para descubrimiento automático de targets:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: kyc-pipeline-monitor
labels:
release: prometheus
spec:
selector:
matchLabels:
pipeline: kyc
endpoints:
- port: http
path: /metrics
interval: 15s
Verificar que Prometheus está scrapeando correctamente todos los targets:
# Verificar targets activos
curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | {job: .labels.job, health: .health}'
# Ejecutar una query PromQL de prueba
curl -s "http://localhost:9090/api/v1/query?query=up{job=~'kyc-.*'}" | jq .
Notes
- El intervalo de scrape de 15 segundos es adecuado para el pipeline KYC; reducirlo aumenta la carga en Prometheus y en los servicios, sin beneficio significativo para las métricas de verificación.
- Los buckets del histograma de duración deben alinearse con el SLO de 8 segundos del pipeline; incluir buckets en 5s y 8s permite medir con precisión el cumplimiento.
- Configurar retención de 30 días para métricas operacionales; para análisis histórico a largo plazo, considerar Thanos o Cortex como almacenamiento remoto.
1---2name: prometheus3description: Prometheus como sistema de métricas time-series para monitorizar el pipeline KYC con scraping, almacenamiento y PromQL.4---56# prometheus78Despliega y configura Prometheus como sistema de métricas time-series para el pipeline de verificación de identidad. Gestiona el scraping de métricas desde todos los servicios KYC, el almacenamiento local de series temporales y las consultas PromQL para análisis de rendimiento. Este skill se centra exclusivamente en Prometheus como backend de métricas, separado de la visualización con Grafana.910## When to use1112Usar este skill cuando el observability_agent necesite configurar Prometheus para recolectar y almacenar métricas del pipeline KYC, definir reglas de alertas basadas en PromQL, o ajustar la configuración de scraping y retención.1314## Instructions15161. Desplegar Prometheus con Docker y configuración base para el pipeline KYC:17 ```yaml18 # docker-compose.yml19 prometheus:20 image: prom/prometheus:v2.48.021 ports:22 - "9090:9090"23 volumes:24 - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml25 - ./prometheus/rules/:/etc/prometheus/rules/26 - prometheus_data:/prometheus27 command:28 - '--config.file=/etc/prometheus/prometheus.yml'29 - '--storage.tsdb.path=/prometheus'30 - '--storage.tsdb.retention.time=30d'31 - '--web.enable-lifecycle'32 ```33342. Configurar los scrape targets para todos los microservicios del pipeline KYC:35 ```yaml36 # prometheus/prometheus.yml37 global:38 scrape_interval: 15s39 evaluation_interval: 15s4041 rule_files:42 - "rules/*.yml"4344 scrape_configs:45 - job_name: 'kyc-liveness'46 static_configs:47 - targets: ['liveness:8000']48 metrics_path: '/metrics'4950 - job_name: 'kyc-ocr'51 static_configs:52 - targets: ['ocr:8000']5354 - job_name: 'kyc-face-match'55 static_configs:56 - targets: ['face-match:8000']5758 - job_name: 'kyc-antifraud'59 static_configs:60 - targets: ['antifraud:8000']6162 - job_name: 'kyc-decision'63 static_configs:64 - targets: ['decision:8000']6566 - job_name: 'kyc-api-gateway'67 static_configs:68 - targets: ['api-gateway:8000']69 ```70713. Instrumentar los servicios FastAPI del pipeline KYC con prometheus_client:72 ```python73 from prometheus_client import Counter, Histogram, Gauge, generate_latest74 from fastapi import FastAPI, Response7576 app = FastAPI()7778 VERIFICATION_REQUESTS = Counter(79 "kyc_verification_requests_total",80 "Total de solicitudes de verificación",81 ["module", "status"]82 )83 VERIFICATION_DURATION = Histogram(84 "kyc_verification_duration_seconds",85 "Duración de la verificación por módulo",86 ["module"],87 buckets=[0.1, 0.5, 1.0, 2.0, 5.0, 8.0, 10.0]88 )89 CONFIDENCE_SCORE = Histogram(90 "kyc_confidence_score",91 "Distribución de scores de confianza",92 ["module"],93 buckets=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.85, 0.9, 0.95, 1.0]94 )95 ACTIVE_SESSIONS = Gauge(96 "kyc_active_sessions",97 "Sesiones de verificación activas"98 )99100 @app.get("/metrics")101 async def metrics():102 return Response(generate_latest(), media_type="text/plain")103 ```1041054. Definir reglas de recording para pre-calcular métricas agregadas del pipeline:106 ```yaml107 # prometheus/rules/kyc-recording.yml108 groups:109 - name: kyc_recording_rules110 rules:111 - record: kyc:verification_success_rate:5m112 expr: rate(kyc_verification_requests_total{status="success"}[5m]) / rate(kyc_verification_requests_total[5m])113114 - record: kyc:p99_duration:5m115 expr: histogram_quantile(0.99, rate(kyc_verification_duration_seconds_bucket[5m]))116117 - record: kyc:spoofing_detection_rate:1h118 expr: rate(kyc_verification_requests_total{module="liveness", status="rejected_spoofing"}[1h])119 ```1201215. Configurar alerting rules para los SLOs del pipeline KYC:122 ```yaml123 # prometheus/rules/kyc-alerts.yml124 groups:125 - name: kyc_alerts126 rules:127 - alert: HighFalseAcceptanceRate128 expr: kyc:verification_success_rate:5m{module="face_match"} > 0.999129 for: 10m130 labels:131 severity: critical132 annotations:133 summary: "FAR potencialmente alto - el face_match acepta demasiadas verificaciones"134135 - alert: VerificationLatencyHigh136 expr: kyc:p99_duration:5m > 8137 for: 5m138 labels:139 severity: warning140 annotations:141 summary: "Latencia p99 de verificación supera los 8 segundos (SLO)"142143 - alert: LivenessServiceDown144 expr: up{job="kyc-liveness"} == 0145 for: 1m146 labels:147 severity: critical148 annotations:149 summary: "El servicio de liveness detection no está respondiendo"150 ```1511526. En Kubernetes, usar ServiceMonitor para descubrimiento automático de targets:153 ```yaml154 apiVersion: monitoring.coreos.com/v1155 kind: ServiceMonitor156 metadata:157 name: kyc-pipeline-monitor158 labels:159 release: prometheus160 spec:161 selector:162 matchLabels:163 pipeline: kyc164 endpoints:165 - port: http166 path: /metrics167 interval: 15s168 ```1691707. Verificar que Prometheus está scrapeando correctamente todos los targets:171 ```bash172 # Verificar targets activos173 curl -s http://localhost:9090/api/v1/targets | jq '.data.activeTargets[] | {job: .labels.job, health: .health}'174175 # Ejecutar una query PromQL de prueba176 curl -s "http://localhost:9090/api/v1/query?query=up{job=~'kyc-.*'}" | jq .177 ```178179## Notes180181- El intervalo de scrape de 15 segundos es adecuado para el pipeline KYC; reducirlo aumenta la carga en Prometheus y en los servicios, sin beneficio significativo para las métricas de verificación.182- Los buckets del histograma de duración deben alinearse con el SLO de 8 segundos del pipeline; incluir buckets en 5s y 8s permite medir con precisión el cumplimiento.183- Configurar retención de 30 días para métricas operacionales; para análisis histórico a largo plazo, considerar Thanos o Cortex como almacenamiento remoto.