grafana
Configura Grafana como plataforma central de visualización y dashboarding para el sistema de verificación de identidad. Integra múltiples fuentes de datos (Prometheus, Loki, Jaeger, Elasticsearch) en dashboards unificados que muestran el estado del pipeline KYC en tiempo real. Este skill se centra exclusivamente en Grafana como capa de visualización, separada de los backends de datos.
When to use
Usar este skill cuando el observability_agent necesite crear, configurar o mantener dashboards de Grafana para visualizar métricas, logs y trazas del pipeline de verificación KYC, o cuando se necesite configurar datasources y alertas visuales.
Instructions
Desplegar Grafana con Docker y provisioning automático de datasources:
# docker-compose.yml
grafana:
image: grafana/grafana:10.2.0
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
- GF_USERS_ALLOW_SIGN_UP=false
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
- ./grafana/dashboards:/var/lib/grafana/dashboards
Configurar provisioning automático de datasources para el pipeline KYC:
# grafana/provisioning/datasources/datasources.yml
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
- name: Loki
type: loki
access: proxy
url: http://loki:3100
- name: Jaeger
type: jaeger
access: proxy
url: http://jaeger:16686
- name: Elasticsearch
type: elasticsearch
access: proxy
url: http://elasticsearch:9200
database: "kyc-*"
jsonData:
timeField: "timestamp"
esVersion: "8.0.0"
Crear un dashboard principal de overview del pipeline KYC con paneles clave:
{
"dashboard": {
"title": "KYC Pipeline - Overview",
"panels": [
{
"title": "Verificaciones por Minuto",
"type": "timeseries",
"targets": [{ "expr": "rate(kyc_verification_requests_total[5m])" }]
},
{
"title": "Tasa de Aprobación",
"type": "gauge",
"targets": [{ "expr": "kyc:verification_success_rate:5m" }],
"fieldConfig": { "defaults": { "thresholds": { "steps": [
{ "value": 0, "color": "red" },
{ "value": 0.7, "color": "yellow" },
{ "value": 0.9, "color": "green" }
]}}}
},
{
"title": "Latencia p99 por Módulo",
"type": "timeseries",
"targets": [{ "expr": "histogram_quantile(0.99, rate(kyc_verification_duration_seconds_bucket[5m]))" }]
},
{
"title": "Intentos de Spoofing Detectados",
"type": "stat",
"targets": [{ "expr": "increase(kyc_verification_requests_total{status='rejected_spoofing'}[1h])" }]
}
]
}
}
Crear un dashboard específico para análisis de fraude y liveness:
{
"dashboard": {
"title": "KYC - Anti-Fraud & Liveness",
"panels": [
{
"title": "Distribución de Confidence Scores",
"type": "histogram",
"targets": [{ "expr": "kyc_confidence_score_bucket{module='face_match'}" }]
},
{
"title": "Tipos de Ataque Detectados",
"type": "piechart",
"targets": [{ "expr": "sum by (attack_type) (increase(kyc_spoofing_detected_total[24h]))" }]
},
{
"title": "Logs de Verificaciones Rechazadas",
"type": "logs",
"datasource": "Loki",
"targets": [{ "expr": "{pipeline=\"kyc\"} | json | decision=\"REJECTED\"" }]
}
]
}
}
Configurar provisioning automático de dashboards desde archivos JSON:
# grafana/provisioning/dashboards/dashboards.yml
apiVersion: 1
providers:
- name: 'KYC Dashboards'
orgId: 1
folder: 'KYC Pipeline'
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards
foldersFromFilesStructure: true
Configurar alertas visuales en Grafana para notificaciones del pipeline KYC:
# grafana/provisioning/alerting/contact-points.yml
apiVersion: 1
contactPoints:
- orgId: 1
name: kyc-ops-team
receivers:
- uid: slack-kyc
type: slack
settings:
url: ${SLACK_WEBHOOK_URL}
channel: "#kyc-alerts"
- uid: email-kyc
type: email
settings:
addresses: "kyc-ops@company.com"
Configurar variables de template para filtrado dinámico en los dashboards:
{
"templating": {
"list": [
{
"name": "module",
"type": "query",
"query": "label_values(kyc_verification_requests_total, module)",
"datasource": "Prometheus"
},
{
"name": "environment",
"type": "custom",
"options": [
{ "text": "production", "value": "production" },
{ "text": "staging", "value": "staging" }
]
}
]
}
}
Notes
- Organizar los dashboards en folders por dominio (Overview, Liveness, OCR, Face Match, Anti-Fraud) para mantener la navegabilidad a medida que el sistema crece.
- Los dashboards deben incluir links de correlación entre paneles de métricas (Prometheus), logs (Loki) y trazas (Jaeger) para facilitar el drill-down durante incidentes.
- Restringir el acceso a dashboards con datos sensibles de verificación mediante roles y permisos de Grafana; el equipo de operaciones no necesita ver los mismos datos que el equipo de compliance.
1---2name: grafana3description: Grafana como plataforma de visualización de dashboards para métricas, logs y trazas del pipeline KYC.4---56# grafana78Configura Grafana como plataforma central de visualización y dashboarding para el sistema de verificación de identidad. Integra múltiples fuentes de datos (Prometheus, Loki, Jaeger, Elasticsearch) en dashboards unificados que muestran el estado del pipeline KYC en tiempo real. Este skill se centra exclusivamente en Grafana como capa de visualización, separada de los backends de datos.910## When to use1112Usar este skill cuando el observability_agent necesite crear, configurar o mantener dashboards de Grafana para visualizar métricas, logs y trazas del pipeline de verificación KYC, o cuando se necesite configurar datasources y alertas visuales.1314## Instructions15161. Desplegar Grafana con Docker y provisioning automático de datasources:17 ```yaml18 # docker-compose.yml19 grafana:20 image: grafana/grafana:10.2.021 ports:22 - "3000:3000"23 environment:24 - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}25 - GF_USERS_ALLOW_SIGN_UP=false26 volumes:27 - grafana_data:/var/lib/grafana28 - ./grafana/provisioning:/etc/grafana/provisioning29 - ./grafana/dashboards:/var/lib/grafana/dashboards30 ```31322. Configurar provisioning automático de datasources para el pipeline KYC:33 ```yaml34 # grafana/provisioning/datasources/datasources.yml35 apiVersion: 136 datasources:37 - name: Prometheus38 type: prometheus39 access: proxy40 url: http://prometheus:909041 isDefault: true4243 - name: Loki44 type: loki45 access: proxy46 url: http://loki:31004748 - name: Jaeger49 type: jaeger50 access: proxy51 url: http://jaeger:166865253 - name: Elasticsearch54 type: elasticsearch55 access: proxy56 url: http://elasticsearch:920057 database: "kyc-*"58 jsonData:59 timeField: "timestamp"60 esVersion: "8.0.0"61 ```62633. Crear un dashboard principal de overview del pipeline KYC con paneles clave:64 ```json65 {66 "dashboard": {67 "title": "KYC Pipeline - Overview",68 "panels": [69 {70 "title": "Verificaciones por Minuto",71 "type": "timeseries",72 "targets": [{ "expr": "rate(kyc_verification_requests_total[5m])" }]73 },74 {75 "title": "Tasa de Aprobación",76 "type": "gauge",77 "targets": [{ "expr": "kyc:verification_success_rate:5m" }],78 "fieldConfig": { "defaults": { "thresholds": { "steps": [79 { "value": 0, "color": "red" },80 { "value": 0.7, "color": "yellow" },81 { "value": 0.9, "color": "green" }82 ]}}}83 },84 {85 "title": "Latencia p99 por Módulo",86 "type": "timeseries",87 "targets": [{ "expr": "histogram_quantile(0.99, rate(kyc_verification_duration_seconds_bucket[5m]))" }]88 },89 {90 "title": "Intentos de Spoofing Detectados",91 "type": "stat",92 "targets": [{ "expr": "increase(kyc_verification_requests_total{status='rejected_spoofing'}[1h])" }]93 }94 ]95 }96 }97 ```98994. Crear un dashboard específico para análisis de fraude y liveness:100 ```json101 {102 "dashboard": {103 "title": "KYC - Anti-Fraud & Liveness",104 "panels": [105 {106 "title": "Distribución de Confidence Scores",107 "type": "histogram",108 "targets": [{ "expr": "kyc_confidence_score_bucket{module='face_match'}" }]109 },110 {111 "title": "Tipos de Ataque Detectados",112 "type": "piechart",113 "targets": [{ "expr": "sum by (attack_type) (increase(kyc_spoofing_detected_total[24h]))" }]114 },115 {116 "title": "Logs de Verificaciones Rechazadas",117 "type": "logs",118 "datasource": "Loki",119 "targets": [{ "expr": "{pipeline=\"kyc\"} | json | decision=\"REJECTED\"" }]120 }121 ]122 }123 }124 ```1251265. Configurar provisioning automático de dashboards desde archivos JSON:127 ```yaml128 # grafana/provisioning/dashboards/dashboards.yml129 apiVersion: 1130 providers:131 - name: 'KYC Dashboards'132 orgId: 1133 folder: 'KYC Pipeline'134 type: file135 disableDeletion: false136 editable: true137 options:138 path: /var/lib/grafana/dashboards139 foldersFromFilesStructure: true140 ```1411426. Configurar alertas visuales en Grafana para notificaciones del pipeline KYC:143 ```yaml144 # grafana/provisioning/alerting/contact-points.yml145 apiVersion: 1146 contactPoints:147 - orgId: 1148 name: kyc-ops-team149 receivers:150 - uid: slack-kyc151 type: slack152 settings:153 url: ${SLACK_WEBHOOK_URL}154 channel: "#kyc-alerts"155 - uid: email-kyc156 type: email157 settings:158 addresses: "kyc-ops@company.com"159 ```1601617. Configurar variables de template para filtrado dinámico en los dashboards:162 ```json163 {164 "templating": {165 "list": [166 {167 "name": "module",168 "type": "query",169 "query": "label_values(kyc_verification_requests_total, module)",170 "datasource": "Prometheus"171 },172 {173 "name": "environment",174 "type": "custom",175 "options": [176 { "text": "production", "value": "production" },177 { "text": "staging", "value": "staging" }178 ]179 }180 ]181 }182 }183 ```184185## Notes186187- Organizar los dashboards en folders por dominio (Overview, Liveness, OCR, Face Match, Anti-Fraud) para mantener la navegabilidad a medida que el sistema crece.188- Los dashboards deben incluir links de correlación entre paneles de métricas (Prometheus), logs (Loki) y trazas (Jaeger) para facilitar el drill-down durante incidentes.189- Restringir el acceso a dashboards con datos sensibles de verificación mediante roles y permisos de Grafana; el equipo de operaciones no necesita ver los mismos datos que el equipo de compliance.