log_retention_policies
Define e implementa políticas de retención de logs diferenciadas según el tipo y la sensibilidad de los datos para el sistema de verificación de identidad. Establece períodos de retención escalonados: logs de auditoría KYC (1 año por requisitos regulatorios), logs operacionales (30 días), y logs de debug (7 días). Garantiza el cumplimiento normativo GDPR/LOPD mientras optimiza el uso de almacenamiento.
When to use
Usar este skill cuando el observability_agent necesite configurar las políticas de retención y eliminación automática de logs del pipeline KYC, asegurando cumplimiento regulatorio y eficiencia de almacenamiento.
Instructions
Clasificar los logs del pipeline KYC en tres categorías con sus períodos de retención:
# log-retention-config.yaml
retention_policies:
audit:
description: "Logs de auditoría: decisiones KYC, verificaciones, resultados"
retention_days: 365
includes:
- "verification_decision"
- "identity_confirmed"
- "identity_rejected"
- "manual_review_triggered"
storage_class: "cold"
operational:
description: "Logs operacionales: rendimiento, errores, métricas de servicio"
retention_days: 30
includes:
- "request_processed"
- "service_error"
- "module_latency"
- "ocr_extraction"
- "face_match_score"
storage_class: "warm"
debug:
description: "Logs de debug: trazas detalladas, datos de desarrollo"
retention_days: 7
includes:
- "debug_trace"
- "model_inference_detail"
- "image_preprocessing_step"
storage_class: "hot"
Configurar la retención en Grafana Loki usando table_manager o compactor:
# loki-config.yaml
compactor:
working_directory: /loki/compactor
shared_store: filesystem
retention_enabled: true
retention_delete_delay: 2h
limits_config:
retention_period: 720h # 30 días default
# Per-tenant overrides para logs de auditoría
overrides:
kyc-audit:
retention_period: 8760h # 365 días
kyc-debug:
retention_period: 168h # 7 días
Configurar ILM en Elasticsearch para las tres categorías de retención:
PUT _ilm/policy/kyc-audit-policy
{
"policy": {
"phases": {
"hot": { "actions": { "rollover": { "max_age": "1d" } } },
"warm": { "min_age": "30d", "actions": { "shrink": { "number_of_shards": 1 }, "forcemerge": { "max_num_segments": 1 } } },
"cold": { "min_age": "90d", "actions": { "allocate": { "require": { "data": "cold" } } } },
"delete": { "min_age": "365d", "actions": { "delete": {} } }
}
}
}
PUT _ilm/policy/kyc-operational-policy
{
"policy": {
"phases": {
"hot": { "actions": { "rollover": { "max_age": "1d" } } },
"delete": { "min_age": "30d", "actions": { "delete": {} } }
}
}
}
PUT _ilm/policy/kyc-debug-policy
{
"policy": {
"phases": {
"hot": { "actions": { "rollover": { "max_age": "1d" } } },
"delete": { "min_age": "7d", "actions": { "delete": {} } }
}
}
}
Implementar el etiquetado de logs en el código Python del pipeline para clasificarlos automáticamente:
import logging
class RetentionClassifier(logging.Filter):
AUDIT_EVENTS = {"verification_decision", "identity_confirmed", "identity_rejected"}
DEBUG_EVENTS = {"debug_trace", "model_inference_detail"}
def filter(self, record):
event_type = getattr(record, "event_type", "")
if event_type in self.AUDIT_EVENTS:
record.retention_class = "audit"
elif event_type in self.DEBUG_EVENTS:
record.retention_class = "debug"
else:
record.retention_class = "operational"
return True
Configurar alertas para monitorizar el cumplimiento de las políticas de retención:
# alerting-rules.yaml
groups:
- name: log_retention
rules:
- alert: AuditLogsRetentionRisk
expr: loki_compactor_oldest_undeleted_chunk_timestamp_seconds{tenant="kyc-audit"} < (time() - 365*24*3600)
for: 1h
labels:
severity: critical
annotations:
summary: "Los logs de auditoría KYC podrían no estar cumpliendo la retención de 365 días"
Crear un script de verificación periódica que valide que las políticas se aplican correctamente:
#!/bin/bash
# verify-retention.sh
echo "=== Verificación de retención de logs KYC ==="
# Verificar logs de auditoría (deben existir hasta 365 días)
OLDEST_AUDIT=$(curl -s "http://loki:3100/loki/api/v1/query" \
--data-urlencode 'query={retention_class="audit"} | json' \
--data-urlencode 'direction=FORWARD' --data-urlencode 'limit=1' | jq -r '.data.result[0].values[0][0]')
echo "Log de auditoría más antiguo: $(date -d @${OLDEST_AUDIT:0:10})"
# Verificar que logs de debug mayores a 7 días fueron eliminados
OLD_DEBUG=$(curl -s "http://loki:3100/loki/api/v1/query_range" \
--data-urlencode 'query={retention_class="debug"}' \
--data-urlencode "start=$(date -d '8 days ago' +%s)000000000" \
--data-urlencode "end=$(date -d '7 days ago' +%s)000000000" | jq '.data.result | length')
echo "Logs de debug antiguos (>7d) encontrados: $OLD_DEBUG"
Notes
- Los logs de auditoría con decisiones KYC (VERIFICADO/RECHAZADO) deben retenerse al menos 1 año para cumplir con requisitos regulatorios GDPR/LOPD y posibles auditorías; nunca reducir este período sin aprobación legal.
- Los logs de debug pueden contener datos sensibles temporales (scores parciales, resultados intermedios); su retención corta de 7 días minimiza la exposición, pero deben sanitizarse igualmente.
- Monitorizar el consumo de almacenamiento por categoría de retención y ajustar las políticas de compactación para evitar crecimiento descontrolado, especialmente en los logs de auditoría de largo plazo.
1---2name: log-retention-policies3description: Políticas de retención de logs diferenciadas por tipo y sensibilidad para el pipeline KYC.4---56# log_retention_policies78Define e implementa políticas de retención de logs diferenciadas según el tipo y la sensibilidad de los datos para el sistema de verificación de identidad. Establece períodos de retención escalonados: logs de auditoría KYC (1 año por requisitos regulatorios), logs operacionales (30 días), y logs de debug (7 días). Garantiza el cumplimiento normativo GDPR/LOPD mientras optimiza el uso de almacenamiento.910## When to use1112Usar este skill cuando el observability_agent necesite configurar las políticas de retención y eliminación automática de logs del pipeline KYC, asegurando cumplimiento regulatorio y eficiencia de almacenamiento.1314## Instructions15161. Clasificar los logs del pipeline KYC en tres categorías con sus períodos de retención:17 ```yaml18 # log-retention-config.yaml19 retention_policies:20 audit:21 description: "Logs de auditoría: decisiones KYC, verificaciones, resultados"22 retention_days: 36523 includes:24 - "verification_decision"25 - "identity_confirmed"26 - "identity_rejected"27 - "manual_review_triggered"28 storage_class: "cold"2930 operational:31 description: "Logs operacionales: rendimiento, errores, métricas de servicio"32 retention_days: 3033 includes:34 - "request_processed"35 - "service_error"36 - "module_latency"37 - "ocr_extraction"38 - "face_match_score"39 storage_class: "warm"4041 debug:42 description: "Logs de debug: trazas detalladas, datos de desarrollo"43 retention_days: 744 includes:45 - "debug_trace"46 - "model_inference_detail"47 - "image_preprocessing_step"48 storage_class: "hot"49 ```50512. Configurar la retención en Grafana Loki usando table_manager o compactor:52 ```yaml53 # loki-config.yaml54 compactor:55 working_directory: /loki/compactor56 shared_store: filesystem57 retention_enabled: true58 retention_delete_delay: 2h5960 limits_config:61 retention_period: 720h # 30 días default6263 # Per-tenant overrides para logs de auditoría64 overrides:65 kyc-audit:66 retention_period: 8760h # 365 días67 kyc-debug:68 retention_period: 168h # 7 días69 ```70713. Configurar ILM en Elasticsearch para las tres categorías de retención:72 ```json73 PUT _ilm/policy/kyc-audit-policy74 {75 "policy": {76 "phases": {77 "hot": { "actions": { "rollover": { "max_age": "1d" } } },78 "warm": { "min_age": "30d", "actions": { "shrink": { "number_of_shards": 1 }, "forcemerge": { "max_num_segments": 1 } } },79 "cold": { "min_age": "90d", "actions": { "allocate": { "require": { "data": "cold" } } } },80 "delete": { "min_age": "365d", "actions": { "delete": {} } }81 }82 }83 }8485 PUT _ilm/policy/kyc-operational-policy86 {87 "policy": {88 "phases": {89 "hot": { "actions": { "rollover": { "max_age": "1d" } } },90 "delete": { "min_age": "30d", "actions": { "delete": {} } }91 }92 }93 }9495 PUT _ilm/policy/kyc-debug-policy96 {97 "policy": {98 "phases": {99 "hot": { "actions": { "rollover": { "max_age": "1d" } } },100 "delete": { "min_age": "7d", "actions": { "delete": {} } }101 }102 }103 }104 ```1051064. Implementar el etiquetado de logs en el código Python del pipeline para clasificarlos automáticamente:107 ```python108 import logging109110 class RetentionClassifier(logging.Filter):111 AUDIT_EVENTS = {"verification_decision", "identity_confirmed", "identity_rejected"}112 DEBUG_EVENTS = {"debug_trace", "model_inference_detail"}113114 def filter(self, record):115 event_type = getattr(record, "event_type", "")116 if event_type in self.AUDIT_EVENTS:117 record.retention_class = "audit"118 elif event_type in self.DEBUG_EVENTS:119 record.retention_class = "debug"120 else:121 record.retention_class = "operational"122 return True123 ```1241255. Configurar alertas para monitorizar el cumplimiento de las políticas de retención:126 ```yaml127 # alerting-rules.yaml128 groups:129 - name: log_retention130 rules:131 - alert: AuditLogsRetentionRisk132 expr: loki_compactor_oldest_undeleted_chunk_timestamp_seconds{tenant="kyc-audit"} < (time() - 365*24*3600)133 for: 1h134 labels:135 severity: critical136 annotations:137 summary: "Los logs de auditoría KYC podrían no estar cumpliendo la retención de 365 días"138 ```1391406. Crear un script de verificación periódica que valide que las políticas se aplican correctamente:141 ```bash142 #!/bin/bash143 # verify-retention.sh144 echo "=== Verificación de retención de logs KYC ==="145146 # Verificar logs de auditoría (deben existir hasta 365 días)147 OLDEST_AUDIT=$(curl -s "http://loki:3100/loki/api/v1/query" \148 --data-urlencode 'query={retention_class="audit"} | json' \149 --data-urlencode 'direction=FORWARD' --data-urlencode 'limit=1' | jq -r '.data.result[0].values[0][0]')150 echo "Log de auditoría más antiguo: $(date -d @${OLDEST_AUDIT:0:10})"151152 # Verificar que logs de debug mayores a 7 días fueron eliminados153 OLD_DEBUG=$(curl -s "http://loki:3100/loki/api/v1/query_range" \154 --data-urlencode 'query={retention_class="debug"}' \155 --data-urlencode "start=$(date -d '8 days ago' +%s)000000000" \156 --data-urlencode "end=$(date -d '7 days ago' +%s)000000000" | jq '.data.result | length')157 echo "Logs de debug antiguos (>7d) encontrados: $OLD_DEBUG"158 ```159160## Notes161162- Los logs de auditoría con decisiones KYC (VERIFICADO/RECHAZADO) deben retenerse al menos 1 año para cumplir con requisitos regulatorios GDPR/LOPD y posibles auditorías; nunca reducir este período sin aprobación legal.163- Los logs de debug pueden contener datos sensibles temporales (scores parciales, resultados intermedios); su retención corta de 7 días minimiza la exposición, pero deben sanitizarse igualmente.164- Monitorizar el consumo de almacenamiento por categoría de retención y ajustar las políticas de compactación para evitar crecimiento descontrolado, especialmente en los logs de auditoría de largo plazo.