@saulwade/swl-ses 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +238 -0
- package/README.md +560 -0
- package/_userland/agentes/.gitkeep +0 -0
- package/_userland/habilidades/.gitkeep +0 -0
- package/agentes/.evolved.json +9 -0
- package/agentes/accesibilidad-wcag-swl.md +692 -0
- package/agentes/arquitecto-swl.md +238 -0
- package/agentes/auto-evolucion-swl.md +854 -0
- package/agentes/backend-api-swl.md +470 -0
- package/agentes/backend-csharp-swl.md +418 -0
- package/agentes/backend-go-swl.md +388 -0
- package/agentes/backend-java-swl.md +279 -0
- package/agentes/backend-node-swl.md +477 -0
- package/agentes/backend-python-swl.md +608 -0
- package/agentes/backend-rust-swl.md +362 -0
- package/agentes/backend-workers-swl.md +480 -0
- package/agentes/cloud-infra-swl.md +485 -0
- package/agentes/consolidador-swl.md +539 -0
- package/agentes/datos-swl.md +584 -0
- package/agentes/depurador-swl.md +349 -0
- package/agentes/devops-ci-swl.md +374 -0
- package/agentes/disenador-ui-swl.md +558 -0
- package/agentes/documentador-swl.md +343 -0
- package/agentes/evals/arquitecto-swl.evals.json +56 -0
- package/agentes/evals/auto-evolucion-swl.evals.json +68 -0
- package/agentes/evals/implementador-swl.evals.json +56 -0
- package/agentes/evals/orquestador-swl.evals.json +60 -0
- package/agentes/evals/perfilador-usuario-swl.evals.json +60 -0
- package/agentes/evals/red-team-swl.evals.json +59 -0
- package/agentes/evals/revisor-codigo-swl.evals.json +59 -0
- package/agentes/frontend-angular-swl.md +627 -0
- package/agentes/frontend-css-swl.md +720 -0
- package/agentes/frontend-react-swl.md +696 -0
- package/agentes/frontend-swl.md +500 -0
- package/agentes/frontend-tailwind-swl.md +830 -0
- package/agentes/implementador-swl.md +328 -0
- package/agentes/investigador-swl.md +430 -0
- package/agentes/investigador-ux-swl.md +500 -0
- package/agentes/llm-apps-swl.md +276 -0
- package/agentes/migrador-swl.md +417 -0
- package/agentes/mobile-android-swl.md +509 -0
- package/agentes/mobile-cross-swl.md +539 -0
- package/agentes/mobile-ios-swl.md +500 -0
- package/agentes/mobile-testing-swl.md +300 -0
- package/agentes/notificador-swl.md +916 -0
- package/agentes/observabilidad-swl.md +436 -0
- package/agentes/orquestador-swl.md +884 -0
- package/agentes/pagos-swl.md +283 -0
- package/agentes/perfilador-usuario-swl.md +306 -0
- package/agentes/planificador-swl.md +402 -0
- package/agentes/producto-prd-swl.md +587 -0
- package/agentes/red-team-swl.md +216 -0
- package/agentes/release-manager-swl.md +568 -0
- package/agentes/rendimiento-swl.md +714 -0
- package/agentes/resolutor-build-swl.md +243 -0
- package/agentes/revisor-angular-swl.md +276 -0
- package/agentes/revisor-codigo-swl.md +348 -0
- package/agentes/revisor-csharp-swl.md +262 -0
- package/agentes/revisor-go-swl.md +257 -0
- package/agentes/revisor-java-swl.md +255 -0
- package/agentes/revisor-kotlin-swl.md +271 -0
- package/agentes/revisor-nextjs-swl.md +279 -0
- package/agentes/revisor-php-swl.md +269 -0
- package/agentes/revisor-react-swl.md +276 -0
- package/agentes/revisor-rust-swl.md +344 -0
- package/agentes/revisor-seguridad-swl.md +390 -0
- package/agentes/revisor-swift-swl.md +266 -0
- package/agentes/revisor-typescript-swl.md +344 -0
- package/agentes/sre-swl.md +265 -0
- package/agentes/tdd-qa-swl.md +354 -0
- package/agentes/ux-disenador-swl.md +501 -0
- package/bin/lib/bot-comandos.js +1030 -0
- package/bin/lib/bot-discovery.js +182 -0
- package/bin/lib/bot-git.js +142 -0
- package/bin/swl-ses.js +325 -0
- package/bin/swl-telegram-bot.js +442 -0
- package/bin/swl-telegram-bot.plist +21 -0
- package/bin/swl-telegram-bot.service +14 -0
- package/comandos/swl/.evolved.json +23 -0
- package/comandos/swl/actualizar.md +174 -0
- package/comandos/swl/adoptar-proyecto.md +207 -0
- package/comandos/swl/aprender.md +701 -0
- package/comandos/swl/auditar-deps.md +134 -0
- package/comandos/swl/autoresearch.md +170 -0
- package/comandos/swl/ayuda.md +224 -0
- package/comandos/swl/brainstorm.md +50 -0
- package/comandos/swl/checkpoint.md +330 -0
- package/comandos/swl/compactar.md +283 -0
- package/comandos/swl/configurar-ci.md +227 -0
- package/comandos/swl/contexto.md +112 -0
- package/comandos/swl/contribuir.md +233 -0
- package/comandos/swl/crear-skill.md +292 -0
- package/comandos/swl/cron.md +196 -0
- package/comandos/swl/dashboard.md +146 -0
- package/comandos/swl/discutir-fase.md +230 -0
- package/comandos/swl/ejecutar-fase.md +135 -0
- package/comandos/swl/evaluar-skill.md +487 -0
- package/comandos/swl/evolucion-estado.md +142 -0
- package/comandos/swl/evolucionar.md +259 -0
- package/comandos/swl/exportar-vault.md +189 -0
- package/comandos/swl/gateway.md +158 -0
- package/comandos/swl/inbox.md +116 -0
- package/comandos/swl/instalar.md +220 -0
- package/comandos/swl/instintos.md +86 -0
- package/comandos/swl/mapear-codebase.md +312 -0
- package/comandos/swl/mcp-status.md +175 -0
- package/comandos/swl/metricas.md +270 -0
- package/comandos/swl/modelo.md +102 -0
- package/comandos/swl/notificaciones.md +396 -0
- package/comandos/swl/nuevo-proyecto.md +154 -0
- package/comandos/swl/planear-fase.md +221 -0
- package/comandos/swl/plugins.md +256 -0
- package/comandos/swl/reflect-skills.md +125 -0
- package/comandos/swl/release.md +217 -0
- package/comandos/swl/revisar-impacto.md +206 -0
- package/comandos/swl/revisar.md +330 -0
- package/comandos/swl/salud.md +363 -0
- package/comandos/swl/sesiones.md +200 -0
- package/comandos/swl/skill-search.md +113 -0
- package/comandos/swl/verificar.md +585 -0
- package/comandos/swl/wiki.md +620 -0
- package/contextos/dev.md +32 -0
- package/contextos/research.md +30 -0
- package/contextos/review.md +31 -0
- package/habilidades/accesibilidad-a11y/SKILL.md +201 -0
- package/habilidades/accesibilidad-a11y/evals/evals.json +56 -0
- package/habilidades/accesibilidad-a11y/recursos/ejemplos-y-checklist-completo.md +441 -0
- package/habilidades/agent-browser/SKILL.md +218 -0
- package/habilidades/agentes-como-servicio/SKILL.md +218 -0
- package/habilidades/ai-runtime-security/SKILL.md +273 -0
- package/habilidades/angular-avanzado/SKILL.md +164 -0
- package/habilidades/angular-avanzado/recursos/ejemplos-avanzados.md +219 -0
- package/habilidades/angular-moderno/SKILL.md +186 -0
- package/habilidades/angular-moderno/evals/evals.json +45 -0
- package/habilidades/angular-moderno/recursos/ejemplos-avanzados.md +106 -0
- package/habilidades/api-rest-diseno/SKILL.md +191 -0
- package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
- package/habilidades/api-rest-diseno/recursos/referencia-api.md +140 -0
- package/habilidades/aprendizaje-continuo/SKILL.md +151 -0
- package/habilidades/aprendizaje-continuo/evals/evals.json +53 -0
- package/habilidades/aprendizaje-continuo/recursos/referencia-instintos.md +290 -0
- package/habilidades/async-python/SKILL.md +149 -0
- package/habilidades/async-python/evals/evals.json +47 -0
- package/habilidades/async-python/recursos/patrones-y-ejemplos-completos.md +292 -0
- package/habilidades/auth-patrones/.evolved.json +9 -0
- package/habilidades/auth-patrones/SKILL.md +413 -0
- package/habilidades/auth-patrones/recursos/implementaciones-completas.md +229 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -0
- package/habilidades/auto-evolucion-protocolo/evals/evals.json +55 -0
- package/habilidades/auto-evolucion-protocolo/recursos/referencia-completa.md +145 -0
- package/habilidades/autoresearch/SKILL.md +268 -0
- package/habilidades/autoresearch/evals/evals.json +41 -0
- package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
- package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
- package/habilidades/azure-cloud/SKILL.md +308 -0
- package/habilidades/azure-cloud/recursos/aks.md +327 -0
- package/habilidades/backend-mcp-servidor/SKILL.md +270 -0
- package/habilidades/backend-production-resilience/SKILL.md +288 -0
- package/habilidades/brainstorming/SKILL.md +295 -0
- package/habilidades/brainstorming/recursos/componentes-html.md +247 -0
- package/habilidades/build-errors-cpp/SKILL.md +270 -0
- package/habilidades/build-errors-csharp/SKILL.md +265 -0
- package/habilidades/build-errors-go/SKILL.md +306 -0
- package/habilidades/build-errors-java/SKILL.md +278 -0
- package/habilidades/build-errors-kotlin/SKILL.md +303 -0
- package/habilidades/build-errors-nextjs/SKILL.md +312 -0
- package/habilidades/build-errors-php/SKILL.md +270 -0
- package/habilidades/build-errors-python/SKILL.md +292 -0
- package/habilidades/build-errors-rust/SKILL.md +284 -0
- package/habilidades/build-errors-swift/SKILL.md +272 -0
- package/habilidades/build-errors-typescript/SKILL.md +369 -0
- package/habilidades/checklist-calidad/SKILL.md +271 -0
- package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
- package/habilidades/checklist-seguridad/SKILL.md +285 -0
- package/habilidades/checkpoints-verificacion/SKILL.md +298 -0
- package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
- package/habilidades/ci-cd-pipelines/SKILL.md +157 -0
- package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
- package/habilidades/ci-cd-pipelines/recursos/pipelines-completos.md +487 -0
- package/habilidades/cloud-aws/SKILL.md +142 -0
- package/habilidades/cloud-aws/recursos/servicios-aws-referencia.md +321 -0
- package/habilidades/compactacion-contexto/SKILL.md +247 -0
- package/habilidades/contenedores-docker/SKILL.md +137 -0
- package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
- package/habilidades/contenedores-docker/recursos/ejemplos-y-configuraciones.md +327 -0
- package/habilidades/context-builder/SKILL.md +170 -0
- package/habilidades/control-profundidad/SKILL.md +128 -0
- package/habilidades/csharp-experto/SKILL.md +322 -0
- package/habilidades/csharp-patrones/SKILL.md +316 -0
- package/habilidades/csharp-testing/SKILL.md +286 -0
- package/habilidades/css-moderno/SKILL.md +166 -0
- package/habilidades/css-moderno/evals/evals.json +43 -0
- package/habilidades/css-moderno/recursos/ejemplos-y-patrones-completos.md +337 -0
- package/habilidades/datos-etl/SKILL.md +129 -0
- package/habilidades/datos-etl/recursos/implementaciones-completas.md +322 -0
- package/habilidades/dbml-experto/SKILL.md +339 -0
- package/habilidades/dbml-experto/evals/evals.json +56 -0
- package/habilidades/dependencias-auditoria/SKILL.md +320 -0
- package/habilidades/deprecacion-migracion/SKILL.md +169 -0
- package/habilidades/deprecacion-migracion/recursos/implementaciones-completas.md +220 -0
- package/habilidades/design-tokens/SKILL.md +158 -0
- package/habilidades/design-tokens/recursos/tokens-y-configuracion.md +363 -0
- package/habilidades/devsecops-pipeline-security/SKILL.md +309 -0
- package/habilidades/diagrama-arquitectura/SKILL.md +165 -0
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -0
- package/habilidades/discutir-fase/SKILL.md +188 -0
- package/habilidades/diseno-herramientas-agente/SKILL.md +199 -0
- package/habilidades/diseno-responsivo/SKILL.md +186 -0
- package/habilidades/diseno-responsivo/recursos/ejemplos-layouts.md +156 -0
- package/habilidades/django-experto/SKILL.md +205 -0
- package/habilidades/django-experto/recursos/async-django.md +390 -0
- package/habilidades/django-experto/recursos/drf-patrones.md +438 -0
- package/habilidades/django-experto/recursos/orm-avanzado.md +382 -0
- package/habilidades/django-experto/recursos/referencia-completa.md +188 -0
- package/habilidades/django-experto/recursos/testing-django.md +415 -0
- package/habilidades/doc-sync/SKILL.md +280 -0
- package/habilidades/drift-detection/SKILL.md +179 -0
- package/habilidades/ejecutar-fase/SKILL.md +468 -0
- package/habilidades/estilo-sin-ai-isms/SKILL.md +775 -0
- package/habilidades/estilo-sin-ai-isms/evals/evals.json +63 -0
- package/habilidades/estilo-sin-ai-isms/scripts/detectar_aiisms.py +500 -0
- package/habilidades/estructura-proyecto-claude/SKILL.md +215 -0
- package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
- package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +176 -0
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +289 -0
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
- package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
- package/habilidades/evaluacion-agentes/SKILL.md +314 -0
- package/habilidades/event-driven/SKILL.md +153 -0
- package/habilidades/event-driven/recursos/implementaciones-completas.md +423 -0
- package/habilidades/extraccion-documentos/SKILL.md +221 -0
- package/habilidades/extractor-de-aprendizajes/.evolved.json +9 -0
- package/habilidades/extractor-de-aprendizajes/SKILL.md +311 -0
- package/habilidades/extractor-de-aprendizajes/evals/evals.json +55 -0
- package/habilidades/fastapi-experto/SKILL.md +221 -0
- package/habilidades/fastapi-experto/recursos/async-patterns.md +438 -0
- package/habilidades/fastapi-experto/recursos/dependency-injection.md +330 -0
- package/habilidades/fastapi-experto/recursos/referencia-completa.md +79 -0
- package/habilidades/fastapi-experto/recursos/testing-httpx.md +420 -0
- package/habilidades/filament-admin/SKILL.md +290 -0
- package/habilidades/frontend-avanzado/SKILL.md +257 -0
- package/habilidades/frontend-avanzado/recursos/apis-nativas-ejemplos.md +341 -0
- package/habilidades/gcp-cloud/SKILL.md +260 -0
- package/habilidades/gcp-cloud/recursos/gke.md +234 -0
- package/habilidades/gcp-cloud/recursos/terraform-gcp.md +307 -0
- package/habilidades/generacion-mermaid/SKILL.md +229 -0
- package/habilidades/git-worktrees-paralelo/SKILL.md +270 -0
- package/habilidades/go-experto/SKILL.md +305 -0
- package/habilidades/go-patrones/SKILL.md +299 -0
- package/habilidades/go-testing/SKILL.md +291 -0
- package/habilidades/graphql-experto/SKILL.md +323 -0
- package/habilidades/guardrail-semantico/SKILL.md +282 -0
- package/habilidades/harness-claude-code/SKILL.md +299 -0
- package/habilidades/iam-secretos/SKILL.md +265 -0
- package/habilidades/iam-secretos/recursos/implementaciones-completas.md +356 -0
- package/habilidades/infra-github-actions/SKILL.md +166 -0
- package/habilidades/instalar-sistema/.evolved.json +9 -0
- package/habilidades/instalar-sistema/SKILL.md +221 -0
- package/habilidades/java-experto/SKILL.md +290 -0
- package/habilidades/java-patrones/SKILL.md +275 -0
- package/habilidades/java-testing/SKILL.md +288 -0
- package/habilidades/kotlin-compose/SKILL.md +278 -0
- package/habilidades/kotlin-compose/recursos/animaciones-performance.md +93 -0
- package/habilidades/kotlin-experto/SKILL.md +318 -0
- package/habilidades/kotlin-testing/SKILL.md +267 -0
- package/habilidades/kotlin-testing/recursos/testing-avanzado.md +74 -0
- package/habilidades/kubernetes-orquestacion/SKILL.md +152 -0
- package/habilidades/kubernetes-orquestacion/recursos/manifiestos-completos.md +452 -0
- package/habilidades/langchain-langraph/SKILL.md +386 -0
- package/habilidades/langchain-langraph/recursos/evaluacion-rag.md +321 -0
- package/habilidades/langchain-langraph/recursos/rag-maturity-model.md +225 -0
- package/habilidades/langchain-langraph/recursos/vectorstores.md +306 -0
- package/habilidades/legacy-code-rescue/SKILL.md +267 -0
- package/habilidades/likec4-experto/SKILL.md +412 -0
- package/habilidades/likec4-experto/evals/evals.json +69 -0
- package/habilidades/manejo-errores/.evolved.json +9 -0
- package/habilidades/manejo-errores/SKILL.md +407 -0
- package/habilidades/manejo-errores/recursos/implementaciones-completas.md +248 -0
- package/habilidades/mapear-codebase/SKILL.md +275 -0
- package/habilidades/memoria-busqueda/SKILL.md +194 -0
- package/habilidades/memoria-busqueda/evals/evals.json +44 -0
- package/habilidades/meta-skills-estandar/SKILL.md +298 -0
- package/habilidades/meta-skills-estandar/recursos/anti-patrones-y-leyes.md +205 -0
- package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +107 -0
- package/habilidades/meta-skills-estandar/recursos/idiomas-framework.md +60 -0
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -0
- package/habilidades/microservicios/SKILL.md +155 -0
- package/habilidades/microservicios/recursos/patrones-y-ejemplos-completos.md +325 -0
- package/habilidades/mobile-flutter/SKILL.md +199 -0
- package/habilidades/mobile-flutter/recursos/ejemplos-completos.md +319 -0
- package/habilidades/mobile-react-native/SKILL.md +176 -0
- package/habilidades/mobile-react-native/recursos/ejemplos-completos.md +216 -0
- package/habilidades/mongodb-experto/SKILL.md +302 -0
- package/habilidades/monitoring-alertas/SKILL.md +201 -0
- package/habilidades/monitoring-alertas/recursos/instrumentacion-y-alertas.md +301 -0
- package/habilidades/nestjs-experto/SKILL.md +307 -0
- package/habilidades/nestjs-experto/recursos/guards-interceptors.md +339 -0
- package/habilidades/nestjs-experto/recursos/modulos-di.md +287 -0
- package/habilidades/nestjs-experto/recursos/testing-nestjs.md +354 -0
- package/habilidades/nextjs-experto/SKILL.md +335 -0
- package/habilidades/nextjs-patrones/SKILL.md +303 -0
- package/habilidades/nextjs-testing/SKILL.md +331 -0
- package/habilidades/node-experto/.evolved.json +9 -0
- package/habilidades/node-experto/SKILL.md +266 -0
- package/habilidades/node-experto/recursos/patrones-completos.md +283 -0
- package/habilidades/notificaciones-multicanal/SKILL.md +159 -0
- package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
- package/habilidades/notificaciones-multicanal/recursos/configuracion-y-templates.md +303 -0
- package/habilidades/nuevo-proyecto/SKILL.md +204 -0
- package/habilidades/orquestacion-async/SKILL.md +303 -0
- package/habilidades/paid-media-tracking/SKILL.md +269 -0
- package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +220 -0
- package/habilidades/paid-media-tracking/recursos/google-ads-api.md +215 -0
- package/habilidades/patrones-python/SKILL.md +228 -0
- package/habilidades/patrones-python/evals/evals.json +56 -0
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -0
- package/habilidades/patrones-python/recursos/referencia-completa.md +202 -0
- package/habilidades/perfil-usuario/SKILL.md +200 -0
- package/habilidades/perfil-usuario/evals/evals.json +55 -0
- package/habilidades/performance-baseline/SKILL.md +297 -0
- package/habilidades/php-experto/SKILL.md +291 -0
- package/habilidades/php-patrones/SKILL.md +306 -0
- package/habilidades/php-testing/SKILL.md +280 -0
- package/habilidades/planear-fase/SKILL.md +269 -0
- package/habilidades/postgresql-experto/SKILL.md +151 -0
- package/habilidades/postgresql-experto/evals/evals.json +53 -0
- package/habilidades/postgresql-experto/recursos/referencia-completa.md +215 -0
- package/habilidades/prevencion-racionalizacion/SKILL.md +175 -0
- package/habilidades/prevencion-sobreingenieria/SKILL.md +323 -0
- package/habilidades/privacy-memoria/SKILL.md +141 -0
- package/habilidades/privacy-memoria/evals/evals.json +43 -0
- package/habilidades/prompt-engineering/SKILL.md +518 -0
- package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +467 -0
- package/habilidades/rag-arquitectura/SKILL.md +338 -0
- package/habilidades/rails-experto/SKILL.md +237 -0
- package/habilidades/rails-experto/recursos/active-record.md +260 -0
- package/habilidades/rails-experto/recursos/hotwire-turbo.md +293 -0
- package/habilidades/rails-experto/recursos/testing-rspec.md +362 -0
- package/habilidades/react-experto/SKILL.md +209 -0
- package/habilidades/react-experto/evals/evals.json +55 -0
- package/habilidades/react-experto/recursos/patrones-y-ejemplos-completos.md +240 -0
- package/habilidades/react-optimizacion/SKILL.md +174 -0
- package/habilidades/react-optimizacion/recursos/patrones-avanzados.md +138 -0
- package/habilidades/redis-experto/SKILL.md +305 -0
- package/habilidades/release-semver/.evolved.json +9 -0
- package/habilidades/release-semver/SKILL.md +248 -0
- package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
- package/habilidades/rust-experto/SKILL.md +400 -0
- package/habilidades/rust-patrones/SKILL.md +296 -0
- package/habilidades/rust-testing/SKILL.md +311 -0
- package/habilidades/seguridad-skills-ia/SKILL.md +262 -0
- package/habilidades/sql-optimizacion/SKILL.md +200 -0
- package/habilidades/sql-optimizacion/evals/evals.json +54 -0
- package/habilidades/sql-optimizacion/recursos/patrones-sql-avanzados.md +131 -0
- package/habilidades/sre-patrones/SKILL.md +333 -0
- package/habilidades/sre-patrones/recursos/chaos-engineering.md +241 -0
- package/habilidades/sre-patrones/recursos/oncall-design.md +236 -0
- package/habilidades/stripe-pagos/SKILL.md +550 -0
- package/habilidades/stripe-pagos/recursos/errores-reintentos.md +390 -0
- package/habilidades/stripe-pagos/recursos/stripe-connect.md +290 -0
- package/habilidades/structured-outputs/SKILL.md +343 -0
- package/habilidades/swift-experto/SKILL.md +320 -0
- package/habilidades/swift-experto/recursos/keychain-y-wrappers.md +110 -0
- package/habilidades/swift-patrones/SKILL.md +313 -0
- package/habilidades/swift-patrones/recursos/tca-ejemplo-completo.md +113 -0
- package/habilidades/swift-testing/SKILL.md +254 -0
- package/habilidades/swift-testing/recursos/xcuitest-planes.md +143 -0
- package/habilidades/swl-dashboard/SKILL.md +370 -0
- package/habilidades/swl-markitdown/SKILL.md +285 -0
- package/habilidades/swl-markitdown/evals/evals.json +52 -0
- package/habilidades/swl-revisar-impacto/SKILL.md +233 -0
- package/habilidades/tailwind-experto/SKILL.md +240 -0
- package/habilidades/tailwind-experto/recursos/referencia-completa.md +184 -0
- package/habilidades/tdd-workflow/SKILL.md +293 -0
- package/habilidades/terraform-experto/SKILL.md +321 -0
- package/habilidades/testing-python/SKILL.md +340 -0
- package/habilidades/testing-python/recursos/ejemplos-completos.md +167 -0
- package/habilidades/threat-model-lite/SKILL.md +246 -0
- package/habilidades/tracing-processor/SKILL.md +212 -0
- package/habilidades/tracking-measurement/SKILL.md +239 -0
- package/habilidades/tracking-measurement/recursos/consent-mode.md +231 -0
- package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +216 -0
- package/habilidades/tracking-measurement/recursos/meta-capi.md +262 -0
- package/habilidades/typescript-avanzado/SKILL.md +144 -0
- package/habilidades/typescript-avanzado/evals/evals.json +55 -0
- package/habilidades/typescript-avanzado/recursos/patrones-y-ejemplos-completos.md +298 -0
- package/habilidades/typescript-diagnosticos/SKILL.md +513 -0
- package/habilidades/ux-diseno/SKILL.md +116 -0
- package/habilidades/ux-diseno/evals/evals.json +43 -0
- package/habilidades/ux-diseno/recursos/patrones-ux-referencia.md +214 -0
- package/habilidades/validacion-ci-sistema/SKILL.md +136 -0
- package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +369 -0
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
- package/habilidades/verificacion-evidencia/SKILL.md +160 -0
- package/habilidades/verificar-trabajo/SKILL.md +303 -0
- package/habilidades/verificar-trabajo/recursos/plantilla-verificacion.md +60 -0
- package/habilidades/wiki-conocimiento/SKILL.md +276 -0
- package/habilidades/wireframes-flujos/SKILL.md +212 -0
- package/habilidades/wireframes-flujos/recursos/referencia-completa.md +192 -0
- package/habilidades/workflow-claude-code/SKILL.md +260 -0
- package/habilidades/workflow-claude-code/recursos/referencia-completa.md +109 -0
- package/hooks/_run-hook.sh +57 -0
- package/hooks/actualizar-perfil-usuario.js +364 -0
- package/hooks/agente-lifecycle.js +71 -0
- package/hooks/aiisms-detector.js +173 -0
- package/hooks/audit-trail.js +204 -0
- package/hooks/auto-background.js +97 -0
- package/hooks/auto-consolidacion.js +178 -0
- package/hooks/auto-evolucion.js +666 -0
- package/hooks/auto-restaurar-settings.js +360 -0
- package/hooks/calidad-pre-commit.js +929 -0
- package/hooks/calidad-typescript.js +511 -0
- package/hooks/captura-feedback-usuario.js +148 -0
- package/hooks/check-update.js +211 -0
- package/hooks/clasificador-mensajes.js +271 -0
- package/hooks/degradacion-instintos.js +272 -0
- package/hooks/escaneo-secretos.js +389 -0
- package/hooks/extraccion-aprendizajes.js +763 -0
- package/hooks/grafo-contexto.js +129 -0
- package/hooks/graph-update.js +67 -0
- package/hooks/guardrail-modelo.js +247 -0
- package/hooks/inbox-aviso.js +75 -0
- package/hooks/inyeccion-contexto.js +246 -0
- package/hooks/lib/abort-registry.js +214 -0
- package/hooks/lib/agent-backend.js +210 -0
- package/hooks/lib/agent-comms.js +263 -0
- package/hooks/lib/agent-issue-codes.js +284 -0
- package/hooks/lib/agent-matcher.js +189 -0
- package/hooks/lib/async-hook-registry.js +252 -0
- package/hooks/lib/atomic-write.js +130 -0
- package/hooks/lib/auto-consolidator.js +335 -0
- package/hooks/lib/canary-skills.js +187 -0
- package/hooks/lib/consolidation-lock.js +291 -0
- package/hooks/lib/context-builder.js +430 -0
- package/hooks/lib/context-compressor.js +657 -0
- package/hooks/lib/convergence-detector.js +105 -0
- package/hooks/lib/delegation-tracker.js +198 -0
- package/hooks/lib/detectar-package-manager.js +423 -0
- package/hooks/lib/edit-accumulator.js +171 -0
- package/hooks/lib/error-classifier.js +308 -0
- package/hooks/lib/event-bus.js +112 -0
- package/hooks/lib/evolution-tracker.js +442 -0
- package/hooks/lib/execution-state.js +316 -0
- package/hooks/lib/fingerprint-id.js +135 -0
- package/hooks/lib/gateway-notify.js +116 -0
- package/hooks/lib/graph-security.js +75 -0
- package/hooks/lib/guardrail-metrics.js +202 -0
- package/hooks/lib/hook-circuit-breaker.js +206 -0
- package/hooks/lib/loop-detector.js +267 -0
- package/hooks/lib/mcp-health.js +184 -0
- package/hooks/lib/mcp-pool.js +436 -0
- package/hooks/lib/memory-search.js +506 -0
- package/hooks/lib/merkle-audit.js +96 -0
- package/hooks/lib/model-router.js +222 -0
- package/hooks/lib/normalize-error.js +324 -0
- package/hooks/lib/normalize-input.js +65 -0
- package/hooks/lib/nudge-tracker.js +306 -0
- package/hooks/lib/otlp-exporter.js +365 -0
- package/hooks/lib/performance-marks.js +239 -0
- package/hooks/lib/privacy-filter.js +128 -0
- package/hooks/lib/prompt-injection-scanner.js +209 -0
- package/hooks/lib/provenance-tracker.js +183 -0
- package/hooks/lib/rate-limit-tracker.js +253 -0
- package/hooks/lib/reflect-classifier.js +164 -0
- package/hooks/lib/resource-quota.js +122 -0
- package/hooks/lib/retry-jitter.js +165 -0
- package/hooks/lib/risk-engine.js +368 -0
- package/hooks/lib/run-log.js +408 -0
- package/hooks/lib/session-fts.js +379 -0
- package/hooks/lib/session-store.js +293 -0
- package/hooks/lib/singleton-guard.js +159 -0
- package/hooks/lib/skill-auditor.js +588 -0
- package/hooks/lib/sync-status.js +228 -0
- package/hooks/lib/taint-tracker.js +107 -0
- package/hooks/lib/task-service.js +295 -0
- package/hooks/lib/tech-skills-map.js +146 -0
- package/hooks/lib/telegram-cliente.js +159 -0
- package/hooks/lib/telegram-config.js +170 -0
- package/hooks/lib/token-budget.js +156 -0
- package/hooks/lib/token-estimator.js +420 -0
- package/hooks/lib/toon-compressor.js +245 -0
- package/hooks/lib/usage-model.js +183 -0
- package/hooks/lib/variable-resolver.js +230 -0
- package/hooks/linea-estado.js +324 -0
- package/hooks/metricas-evolucion.js +209 -0
- package/hooks/monitor-contexto.js +325 -0
- package/hooks/notificacion-sesion-stop.js +198 -0
- package/hooks/notificacion-telegram-notification.js +4 -0
- package/hooks/notificacion-telegram-subagent.js +4 -0
- package/hooks/notificacion-telegram.js +267 -0
- package/hooks/preservar-estado-pre-compact.js +150 -0
- package/hooks/proteccion-rutas.js +366 -0
- package/hooks/registro-turnos.js +209 -0
- package/hooks/resumen-sesion.js +249 -0
- package/hooks/risk-scoring.js +323 -0
- package/hooks/rotar-audit-auto.js +122 -0
- package/hooks/sugerir-regenerar-inventario.js +170 -0
- package/hooks/telemetria-agentes.js +167 -0
- package/hooks/tracking-costos.js +688 -0
- package/instintos/global.yaml +8 -0
- package/instintos/perfil-usuario.yaml +53 -0
- package/instintos/prompt-appendices.yaml +57 -0
- package/instintos/proyecto.yaml +372 -0
- package/manifiestos/gateway-config.json +77 -0
- package/manifiestos/handoff-context.json +223 -0
- package/manifiestos/hook-profiles.json +44 -0
- package/manifiestos/hooks-config.json +360 -0
- package/manifiestos/modulos.json +1173 -0
- package/manifiestos/perfiles.json +404 -0
- package/package.json +86 -0
- package/plantillas/ESTADO.md +109 -0
- package/plantillas/HOJA-RUTA.md +143 -0
- package/plantillas/PROYECTO.md +122 -0
- package/plantillas/REQUISITOS.md +132 -0
- package/plantillas/auditor-veto-template.md +105 -0
- package/plantillas/github-workflows/README.md +47 -0
- package/plantillas/github-workflows/release-please.yml +44 -0
- package/plantillas/github-workflows/swl-ci.yml +107 -0
- package/plantillas/github-workflows/swl-security.yml +51 -0
- package/plantillas/mcp-mineru.json +13 -0
- package/plantillas/research/ARQUITECTURA.md +220 -0
- package/plantillas/research/FUNCIONALIDADES.md +175 -0
- package/plantillas/research/RESUMEN.md +165 -0
- package/plantillas/research/STACK.md +233 -0
- package/plantillas/research/TRAMPAS.md +299 -0
- package/plantillas/skill-evals-template.json +44 -0
- package/plugin.json +343 -0
- package/reglas/accesibilidad.md +269 -0
- package/reglas/api-diseno.md +400 -0
- package/reglas/arquitectura.md +352 -0
- package/reglas/brevedad-output.md +124 -0
- package/reglas/cloud-infra.md +247 -0
- package/reglas/docs.md +245 -0
- package/reglas/estilo-codigo.md +201 -0
- package/reglas/git-workflow.md +245 -0
- package/reglas/gobernanza.md +271 -0
- package/reglas/harness-claude-code.md +213 -0
- package/reglas/hooks.md +186 -0
- package/reglas/lenguajes/csharp/estilo-codigo.md +231 -0
- package/reglas/lenguajes/csharp/hooks.md +281 -0
- package/reglas/lenguajes/csharp/patrones.md +226 -0
- package/reglas/lenguajes/csharp/seguridad.md +258 -0
- package/reglas/lenguajes/csharp/testing.md +176 -0
- package/reglas/lenguajes/go/estilo-codigo.md +195 -0
- package/reglas/lenguajes/go/hooks.md +249 -0
- package/reglas/lenguajes/go/patrones.md +249 -0
- package/reglas/lenguajes/go/seguridad.md +225 -0
- package/reglas/lenguajes/go/testing.md +272 -0
- package/reglas/lenguajes/java/estilo-codigo.md +217 -0
- package/reglas/lenguajes/java/hooks.md +251 -0
- package/reglas/lenguajes/java/patrones.md +226 -0
- package/reglas/lenguajes/java/seguridad.md +233 -0
- package/reglas/lenguajes/java/testing.md +238 -0
- package/reglas/lenguajes/kotlin/estilo-codigo.md +208 -0
- package/reglas/lenguajes/kotlin/hooks.md +245 -0
- package/reglas/lenguajes/kotlin/patrones.md +201 -0
- package/reglas/lenguajes/kotlin/seguridad.md +202 -0
- package/reglas/lenguajes/kotlin/testing.md +236 -0
- package/reglas/lenguajes/nextjs/estilo-codigo.md +175 -0
- package/reglas/lenguajes/nextjs/hooks.md +186 -0
- package/reglas/lenguajes/nextjs/patrones.md +225 -0
- package/reglas/lenguajes/nextjs/seguridad.md +216 -0
- package/reglas/lenguajes/nextjs/testing.md +193 -0
- package/reglas/lenguajes/php/estilo-codigo.md +228 -0
- package/reglas/lenguajes/php/hooks.md +165 -0
- package/reglas/lenguajes/php/patrones.md +233 -0
- package/reglas/lenguajes/php/seguridad.md +186 -0
- package/reglas/lenguajes/php/testing.md +205 -0
- package/reglas/lenguajes/rust/estilo-codigo.md +207 -0
- package/reglas/lenguajes/rust/hooks.md +240 -0
- package/reglas/lenguajes/rust/patrones.md +250 -0
- package/reglas/lenguajes/rust/seguridad.md +221 -0
- package/reglas/lenguajes/rust/testing.md +194 -0
- package/reglas/lenguajes/swift/estilo-codigo.md +238 -0
- package/reglas/lenguajes/swift/hooks.md +257 -0
- package/reglas/lenguajes/swift/patrones.md +235 -0
- package/reglas/lenguajes/swift/seguridad.md +248 -0
- package/reglas/lenguajes/swift/testing.md +242 -0
- package/reglas/markitdown.md +60 -0
- package/reglas/memoria-consolidada.md +209 -0
- package/reglas/patrones.md +225 -0
- package/reglas/performance.md +195 -0
- package/reglas/pruebas.md +159 -0
- package/reglas/seguridad-agentes.md +351 -0
- package/reglas/seguridad.md +151 -0
- package/reglas/skills-estandar.md +373 -0
- package/reglas/testing.md +193 -0
- package/schemas/agent-contract.json +176 -0
- package/schemas/agent-frontmatter.schema.json +149 -0
- package/schemas/agent-message.schema.json +53 -0
- package/schemas/agent-output-implementacion.schema.json +85 -0
- package/schemas/agent-output-planificacion.schema.json +113 -0
- package/schemas/agent-output-review.schema.json +78 -0
- package/schemas/diary-entry.schema.json +80 -0
- package/schemas/hook-profiles.schema.json +39 -0
- package/schemas/hooks-config.schema.json +74 -0
- package/schemas/instinct.schema.json +115 -0
- package/schemas/modulos.schema.json +29 -0
- package/schemas/perfiles.schema.json +28 -0
- package/schemas/plugin.schema.json +64 -0
- package/schemas/skill-evals.schema.json +95 -0
- package/schemas/skill-frontmatter.schema.json +170 -0
- package/scripts/actualizar.js +145 -0
- package/scripts/audit-skills.sh +78 -0
- package/scripts/auditar-agentes-gaps.js +149 -0
- package/scripts/auditar-cobertura-frameworks.js +241 -0
- package/scripts/auditar-skills-gaps.js +206 -0
- package/scripts/bootstrap-instintos.js +259 -0
- package/scripts/check-update.js +109 -0
- package/scripts/comandos/agents.js +105 -0
- package/scripts/comandos/info.js +108 -0
- package/scripts/comandos/install-asistido.js +186 -0
- package/scripts/comandos/skills.js +211 -0
- package/scripts/configurar-branch-protection.js +418 -0
- package/scripts/daemon-swl.py +388 -0
- package/scripts/desinstalar.js +130 -0
- package/scripts/doctor.js +559 -0
- package/scripts/field-report.js +199 -0
- package/scripts/generar-inventario.js +317 -0
- package/scripts/inbox-tmux-inject.js +161 -0
- package/scripts/inferir-herramientas-permitidas.js +586 -0
- package/scripts/inicializar.js +133 -0
- package/scripts/instalador.js +1031 -0
- package/scripts/instalar-git-hook.js +122 -0
- package/scripts/lib/agp-frontmatter.js +222 -0
- package/scripts/lib/append-con-marcadores.js +199 -0
- package/scripts/lib/artefactos-python.js +43 -0
- package/scripts/lib/audit-query.js +221 -0
- package/scripts/lib/autostart-linux.js +347 -0
- package/scripts/lib/autostart-macos.js +360 -0
- package/scripts/lib/autostart-windows.js +307 -0
- package/scripts/lib/budget-enforcer.js +252 -0
- package/scripts/lib/claude-sessions.js +285 -0
- package/scripts/lib/configurar-ci.js +380 -0
- package/scripts/lib/console-span-exporter.js +92 -0
- package/scripts/lib/contadores-inventario.js +217 -0
- package/scripts/lib/dashboard-widgets.js +290 -0
- package/scripts/lib/detectar-runtime.js +279 -0
- package/scripts/lib/detectar-stack.js +187 -0
- package/scripts/lib/diary-entry.js +234 -0
- package/scripts/lib/drift-detector.js +545 -0
- package/scripts/lib/estado.js +124 -0
- package/scripts/lib/gestor-componentes.js +243 -0
- package/scripts/lib/gitignore-manifest.js +305 -0
- package/scripts/lib/graph-analyze.py +556 -0
- package/scripts/lib/graph-builder.py +485 -0
- package/scripts/lib/graph-cluster.py +259 -0
- package/scripts/lib/health-row.js +168 -0
- package/scripts/lib/hooks-settings.js +789 -0
- package/scripts/lib/manifiestos.js +138 -0
- package/scripts/lib/mc-client.js +137 -0
- package/scripts/lib/notificaciones-telegram.js +1107 -0
- package/scripts/lib/npm-version.js +261 -0
- package/scripts/lib/paquetes-conocidos.js +50 -0
- package/scripts/lib/preservar-usuario.js +586 -0
- package/scripts/lib/prompt-builder.js +264 -0
- package/scripts/lib/resolver-externo.js +332 -0
- package/scripts/lib/schedule-parser.js +305 -0
- package/scripts/lib/scoring-instintos.js +240 -0
- package/scripts/lib/seguridad.js +160 -0
- package/scripts/lib/selector-interactivo.js +152 -0
- package/scripts/lib/semantic-search.js +242 -0
- package/scripts/lib/skill-discovery.js +234 -0
- package/scripts/lib/skill-metrics.js +246 -0
- package/scripts/lib/skill-normalizer.js +112 -0
- package/scripts/lib/skills-hub.js +340 -0
- package/scripts/lib/span-schema.js +134 -0
- package/scripts/lib/tool-cost-analyzer.js +255 -0
- package/scripts/lib/tracing-processor-interface.js +286 -0
- package/scripts/lib/transformadores/base.js +80 -0
- package/scripts/lib/transformadores/claude.js +124 -0
- package/scripts/lib/transformadores/codex.js +115 -0
- package/scripts/lib/transformadores/copilot.js +106 -0
- package/scripts/lib/transformadores/gemini.js +74 -0
- package/scripts/lib/transformadores/index.js +35 -0
- package/scripts/lib/transformadores/opencode.js +75 -0
- package/scripts/lib/ui.js +259 -0
- package/scripts/limpiar-artefactos-python.js +131 -0
- package/scripts/mcp-orchestrator.py +386 -0
- package/scripts/mcp-pool-manager.py +352 -0
- package/scripts/mcp-telemetry.py +378 -0
- package/scripts/poblar-evolvable.js +226 -0
- package/scripts/publicar.js +287 -0
- package/scripts/reflect-skills.js +403 -0
- package/scripts/rotar-audit-logs.js +185 -0
- package/scripts/run-skill-evals.js +242 -0
- package/scripts/smoke-test.js +374 -0
- package/scripts/token-analysis.py +471 -0
- package/scripts/validar-manifest.js +195 -0
- package/scripts/validar-memoria.js +321 -0
- package/scripts/validar-tests-aislamiento.js +184 -0
- package/scripts/validar-tokens-test.js +208 -0
- package/scripts/validar.js +147 -0
- package/scripts/validate-markdown.py +339 -0
- package/scripts/validate-skills.py +385 -0
- package/scripts/vendor/claude-usage/README.md +116 -0
- package/scripts/vendor/claude-usage/cli.py +334 -0
- package/scripts/vendor/claude-usage/dashboard.py +795 -0
- package/scripts/vendor/claude-usage/scanner.py +467 -0
- package/scripts/vendor/markitdown/cli.py +194 -0
- package/scripts/verificar-evolucion.js +289 -0
- package/scripts/verificar-release.js +494 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: monitoring-alertas
|
|
3
|
+
description: >
|
|
4
|
+
Observabilidad y alertas: Prometheus, Grafana, OpenTelemetry, logging estructurado,
|
|
5
|
+
métricas RED/USE, SLIs/SLOs/SLAs, reglas de alerting, runbooks, dashboards,
|
|
6
|
+
distributed tracing. Anti-patrones de alerting.
|
|
7
|
+
version: "1.0.1"
|
|
8
|
+
evolved: true
|
|
9
|
+
evolved-from: "5.0.3"
|
|
10
|
+
evolved-at: "2026-04-23"
|
|
11
|
+
evolved-by: "aprender"
|
|
12
|
+
evolved-note: "Patrón nuevo: logging.Filter para silenciar 404 esperados en endpoints semánticos"
|
|
13
|
+
herramientasPermitidas: [Read, Grep]
|
|
14
|
+
evolvable: true # default para skill estandar
|
|
15
|
+
exclusiones:
|
|
16
|
+
- "No cargar para configuración de infraestructura de monitoreo en la nube (CloudWatch Dashboards, Azure Monitor, GCP Cloud Monitoring) sin relación con la aplicación — para cloud monitoring nativo cargar el skill de la nube correspondiente."
|
|
17
|
+
- "No cargar para notificaciones de agentes SWL hacia el usuario (Telegram, desktop notifications) — para notificaciones de agentes cargar `notificaciones-multicanal`."
|
|
18
|
+
- "No cargar para profiling de rendimiento de aplicación (flamegraphs, CPU profiling, memory leaks) — para profiling cargar `performance-baseline`."
|
|
19
|
+
- "No cargar para logs de auditoría de negocio (quién aprobó una factura, historial de cambios de usuario) — para audit logs de dominio usar el patrón de event log de la app, no Prometheus."
|
|
20
|
+
---
|
|
21
|
+
# Observabilidad y Alertas — Guía de Producción
|
|
22
|
+
|
|
23
|
+
## Cuándo NO cargar
|
|
24
|
+
|
|
25
|
+
- La tarea es configurar CloudWatch, Azure Monitor o GCP Cloud Monitoring sin relación con la instrumentación de la aplicación: cargar el skill de la nube correspondiente.
|
|
26
|
+
- La tarea es notificaciones de agentes SWL al usuario (Telegram, desktop): cargar `notificaciones-multicanal`.
|
|
27
|
+
- La tarea es profiling de rendimiento (flamegraphs, CPU profiling, memory leaks): cargar `performance-baseline`.
|
|
28
|
+
- La tarea es audit log de negocio (historial de cambios de dominio): usar el patrón de event log de la aplicación, no Prometheus.
|
|
29
|
+
|
|
30
|
+
## Los Tres Pilares de la Observabilidad
|
|
31
|
+
|
|
32
|
+
La observabilidad responde la pregunta: **¿por qué se comporta el sistema así?**
|
|
33
|
+
|
|
34
|
+
| Pilar | Qué captura | Herramientas |
|
|
35
|
+
|-------|------------|--------------|
|
|
36
|
+
| **Métricas** | Valores numéricos en el tiempo | Prometheus, DataDog |
|
|
37
|
+
| **Logs** | Eventos discretos con contexto | Loki, CloudWatch, ELK |
|
|
38
|
+
| **Trazas** | Flujo de una petición a través de servicios | Jaeger, Tempo, X-Ray |
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Reglas Obligatorias
|
|
43
|
+
|
|
44
|
+
1. **Cada endpoint instrumentado con métricas RED** (Rate, Errors, Duration).
|
|
45
|
+
2. **Trazas OpenTelemetry propagadas** de entrada a salida (incluyendo BD y servicios externos).
|
|
46
|
+
3. **Logs estructurados en JSON** con `request_id` en cada línea.
|
|
47
|
+
4. **Cada alerta tiene `for` clause, severidad y URL de runbook** — alertas sin runbook no se crean.
|
|
48
|
+
5. **NUNCA alertar "latencia promedio"** — el promedio oculta percentiles altos. Usar p99 SIEMPRE.
|
|
49
|
+
6. **Solo alertar lo que requiere acción humana** — demasiadas alertas causa alert fatigue.
|
|
50
|
+
7. **Crítico = acción ahora, Advertencia = acción en 24h** — no todo es "crítico".
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Metodologías de Métricas
|
|
55
|
+
|
|
56
|
+
### RED (para servicios orientados a peticiones)
|
|
57
|
+
|
|
58
|
+
| Métrica | Descripción | Ejemplo PromQL |
|
|
59
|
+
|---------|-------------|----------------|
|
|
60
|
+
| **Rate** | Peticiones por segundo | `rate(http_requests_total[5m])` |
|
|
61
|
+
| **Errors** | Tasa de errores | `rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m])` |
|
|
62
|
+
| **Duration** | Latencia p50, p95, p99 | `histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))` |
|
|
63
|
+
|
|
64
|
+
### USE (para recursos de infraestructura)
|
|
65
|
+
|
|
66
|
+
| Métrica | Descripción | Ejemplo |
|
|
67
|
+
|---------|-------------|---------|
|
|
68
|
+
| **Utilization** | % de tiempo ocupado | CPU idle rate |
|
|
69
|
+
| **Saturation** | Cola / trabajo pendiente | `node_load1` |
|
|
70
|
+
| **Errors** | Errores del recurso | disk I/O errors |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## SLIs, SLOs y SLAs
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
SLA (Service Level Agreement) — Contrato legal con el cliente
|
|
78
|
+
+-- SLO (Service Level Objective) — Meta interna (más estricto que el SLA)
|
|
79
|
+
+-- SLI (Service Level Indicator) — Métrica que mide el cumplimiento
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Definir SLIs correctamente
|
|
83
|
+
|
|
84
|
+
```yaml
|
|
85
|
+
# MAL — SLI vago
|
|
86
|
+
sli: "el servicio debe estar disponible"
|
|
87
|
+
|
|
88
|
+
# BIEN — SLI medible y específico
|
|
89
|
+
slis:
|
|
90
|
+
disponibilidad:
|
|
91
|
+
definicion: >
|
|
92
|
+
Proporción de peticiones HTTP al endpoint /api/* que retornan
|
|
93
|
+
código de estado < 500 en los últimos 30 días.
|
|
94
|
+
query: >
|
|
95
|
+
sum(rate(http_requests_total{status!~"5.."}[30d]))
|
|
96
|
+
/ sum(rate(http_requests_total[30d]))
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Presupuesto de Error
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
Error Budget = 1 - SLO
|
|
103
|
+
|
|
104
|
+
Si SLO = 99.9% disponibilidad en 30 días:
|
|
105
|
+
Error Budget = 0.1% = 43.8 minutos de caída permitida
|
|
106
|
+
|
|
107
|
+
Si el budget está al 50% a mitad del mes -> congelar deploys riesgosos
|
|
108
|
+
Si el budget está al 0% -> modo emergencia, solo fixes críticos
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Anti-Patrones de Alerting
|
|
114
|
+
|
|
115
|
+
| Anti-patrón | Problema | Solución |
|
|
116
|
+
|-------------|----------|----------|
|
|
117
|
+
| **Alertas sin runbook** | El oncall no sabe qué hacer | Cada alerta tiene URL de runbook |
|
|
118
|
+
| **Umbral fijo sin `for`** | Falsos positivos por picos | Usar `for: 5m` para confirmar |
|
|
119
|
+
| **Alerta de "latencia promedio"** | Oculta percentiles altos | Usar p99 siempre |
|
|
120
|
+
| **Demasiadas alertas** | Alert fatigue — se ignoran todas | Solo alertar acción humana |
|
|
121
|
+
| **Alertas de síntoma, no de causa** | "CPU alto" no dice acción | Alertar efectos en el usuario |
|
|
122
|
+
| **Severidades mal usadas** | Todo es "crítico" | Crítico = ahora, Advertencia = 24h |
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Dashboard Grafana — Paneles Mínimos
|
|
127
|
+
|
|
128
|
+
1. **Panel de disponibilidad** — Tasa de éxito (gauge + serie de tiempo).
|
|
129
|
+
2. **Panel RED** — Rate, Errors, Duration en una vista.
|
|
130
|
+
3. **Panel de latencia** — p50, p95, p99 en serie de tiempo.
|
|
131
|
+
4. **Panel de saturación** — CPU, memoria, conexiones activas.
|
|
132
|
+
5. **Panel de errores por tipo** — 4xx vs 5xx separados.
|
|
133
|
+
6. **Anotaciones de deploys** — Marcas verticales en cada despliegue.
|
|
134
|
+
7. **Panel de error budget** — Consumo del presupuesto de error del SLO.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Checklist de Revisión — Observabilidad
|
|
139
|
+
|
|
140
|
+
- [ ] Cada endpoint instrumentado con métricas RED.
|
|
141
|
+
- [ ] Trazas OpenTelemetry propagadas de entrada a salida.
|
|
142
|
+
- [ ] Logs estructurados en JSON con `request_id`.
|
|
143
|
+
- [ ] SLIs definidos como queries PromQL verificables.
|
|
144
|
+
- [ ] SLOs documentados con su error budget calculado.
|
|
145
|
+
- [ ] Cada alerta tiene `for` clause, severidad y URL de runbook.
|
|
146
|
+
- [ ] No hay alertas de "síntoma" sin correlación con impacto en usuario.
|
|
147
|
+
- [ ] Runbooks actualizados y probados en el último trimestre.
|
|
148
|
+
- [ ] Dashboard de servicio con los 7 paneles mínimos.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
Para ejemplos completos de instrumentación Prometheus en Python, trazas OpenTelemetry, logging estructurado con structlog, reglas de alerting para Alertmanager y plantilla de runbook, ver [recursos/instrumentacion-y-alertas.md](recursos/instrumentacion-y-alertas.md).
|
|
153
|
+
|
|
154
|
+
## Gotchas / Errores comunes no obvios
|
|
155
|
+
|
|
156
|
+
**`histogram_quantile(0.99, ...)` en Prometheus produce percentiles incorrectos cuando los buckets del histograma no cubren el rango real de valores observados**: si el histograma tiene buckets hasta `le="1.0"` segundos y hay requests que tardan 3 segundos, Prometheus reporta el p99 como "aproximadamente 1.0s" (el bucket máximo) en lugar del valor real. Causa: Prometheus calcula percentiles por interpolación dentro de los buckets definidos. Si el valor real excede todos los buckets, lo aplana al último. Fix: definir los buckets explícitamente según el perfil de latencia esperado del servicio: `buckets=[0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0]`. Verificar con `histogram_quantile(1, ...)` que no devuelve `+Inf` en producción.
|
|
157
|
+
|
|
158
|
+
**Las trazas OpenTelemetry se propagan correctamente en requests HTTP pero se pierden al cruzar un mensaje de cola (Kafka, RabbitMQ) porque el consumidor no extrae el contexto del header del mensaje**: el `traceparent` y `tracestate` se envían como headers del mensaje pero el handler del consumidor crea un nuevo span sin parent, rompiendo la traza distribuida. Causa: las librerías de OTel para brokers de mensajes requieren extracción explícita del contexto: `tracer.extract(carrier=message.headers)`. Fix: en el consumidor de la cola, extraer el contexto antes de crear el span: `ctx = propagate.extract(dict(message.headers))` y pasar ese contexto al `tracer.start_as_current_span()`.
|
|
159
|
+
|
|
160
|
+
**Las alertas con `for: 5m` no se disparan cuando Prometheus tiene un `scrape_interval` de 30 segundos y la condición se cumple durante exactamente 5 minutos pero con gaps de datos**: si el target no responde en 2 de los 10 scrapes dentro de los 5 minutos, Prometheus resetea el contador de `for` y la alerta nunca llega a `FIRING`. Causa: `for` requiere que la condición sea verdadera en TODOS los scrapes del período, sin gaps. Fix: usar `for` con al menos 2× el `scrape_interval`. Para `scrape_interval: 30s`, usar `for: 3m` como mínimo. Documentar en el runbook el tiempo real de propagación esperado.
|
|
161
|
+
|
|
162
|
+
**Un dashboard de Grafana con `refresh: 5s` en producción genera una carga de queries sobre Prometheus que puede afectar el rendimiento del propio sistema monitoreado**: si el dashboard tiene 20 paneles y cada panel hace 3 queries, se ejecutan 60 queries por refresh = 720 queries/minuto por usuario del dashboard abierto. Con 5 usuarios simultáneos viendo el dashboard, son 3,600 queries/minuto. Causa: el intervalo de refresh corto es intuitivo para debugging pero destructivo en producción con dashboards complejos. Fix: usar `refresh: 30s` o `60s` en dashboards de producción. Para debugging en tiempo real, crear un dashboard separado simplificado con pocas métricas y refresh corto.
|
|
163
|
+
|
|
164
|
+
## Patrón — Filtro de log para 404 REST esperados (auto-fetch de recuperación)
|
|
165
|
+
|
|
166
|
+
### SIEMPRE: silenciar con `logging.Filter` los 404 que la semántica REST requiere como normales
|
|
167
|
+
|
|
168
|
+
Cuando un endpoint `GET` se usa como "pregunta de existencia" (ej: recuperar el resultado anterior al recargar la UI, verificar si un recurso existe antes de operar), el 404 es la respuesta esperada al inicio de cada sesión y ensucia los logs del desarrollador con mensajes rojos sin información.
|
|
169
|
+
|
|
170
|
+
**Regla**: NO cambiar el status code a 200 para acallar el log (rompe la semántica REST). En lugar de eso, agregar un filtro de logging específico que silencie el combo exacto "método + path + status" esperado.
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
import logging
|
|
174
|
+
import re
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class _Silenciar404AutoFetch(logging.Filter):
|
|
178
|
+
"""Silencia el 404 esperado del auto-fetch de recuperación.
|
|
179
|
+
|
|
180
|
+
Solo silencia el combo exacto: GET <path> → 404. Cualquier otro 404
|
|
181
|
+
(de otro endpoint o con otro método) sigue apareciendo en el log.
|
|
182
|
+
"""
|
|
183
|
+
_PATRON = re.compile(
|
|
184
|
+
r'"GET\s+/api/v1/cases/[^/]+/analisis(?:\?[^"\s]*)?\s+HTTP/[\d.]+"\s+404\b'
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
def filter(self, record: logging.LogRecord) -> bool:
|
|
188
|
+
return not self._PATRON.search(record.getMessage())
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
logging.getLogger("uvicorn.access").addFilter(_Silenciar404AutoFetch())
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Criterios para aplicar este filtro** (cumplir los 4):
|
|
195
|
+
|
|
196
|
+
1. El 404 es la respuesta **esperada** en el flujo normal (no bug).
|
|
197
|
+
2. La semántica REST del endpoint requiere 404 (ej: `GET /items/{id}` de existencia).
|
|
198
|
+
3. El volumen de 404 esperados es alto (≥1 por sesión de usuario).
|
|
199
|
+
4. El 404 no requiere acción del ops team (no hay impacto al usuario).
|
|
200
|
+
|
|
201
|
+
**Anti-patrón opuesto**: NO cambiar el endpoint a devolver `200 {"exists": false}` solo para que el log quede limpio — rompe HATEOAS y los clientes que esperan el contrato REST estándar. Arreglar el síntoma en el canal correcto (filtro de log), no cambiar la semántica del API.
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# Observabilidad y Alertas — Instrumentación y Alertas Completas
|
|
2
|
+
|
|
3
|
+
Referencia extendida de la skill `monitoring-alertas`. Contiene ejemplos completos
|
|
4
|
+
de instrumentación Prometheus, OpenTelemetry, logging estructurado, reglas de
|
|
5
|
+
alerting y runbooks.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Prometheus — Instrumentación en Python
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
# instrumentacion.py
|
|
13
|
+
from prometheus_client import Counter, Histogram, Gauge, start_http_server
|
|
14
|
+
import time
|
|
15
|
+
|
|
16
|
+
# Contadores — valores que solo suben
|
|
17
|
+
PETICIONES_TOTALES = Counter(
|
|
18
|
+
"http_requests_total",
|
|
19
|
+
"Total de peticiones HTTP",
|
|
20
|
+
labelnames=["metodo", "endpoint", "codigo_estado"],
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
ERRORES_TOTALES = Counter(
|
|
24
|
+
"errores_aplicacion_total",
|
|
25
|
+
"Total de errores de la aplicacion",
|
|
26
|
+
labelnames=["tipo", "servicio"],
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# Histograma — distribucion de latencia
|
|
30
|
+
DURACION_PETICION = Histogram(
|
|
31
|
+
"http_request_duration_seconds",
|
|
32
|
+
"Duracion de peticiones HTTP en segundos",
|
|
33
|
+
labelnames=["metodo", "endpoint"],
|
|
34
|
+
buckets=[0.01, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0],
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# Gauge — valores que suben y bajan
|
|
38
|
+
TAMANIO_COLA = Gauge(
|
|
39
|
+
"cola_tareas_actual",
|
|
40
|
+
"Numero de tareas pendientes en la cola",
|
|
41
|
+
labelnames=["tipo_cola"],
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
# Middleware FastAPI para instrumentacion automatica
|
|
45
|
+
from fastapi import Request, Response
|
|
46
|
+
import asyncio
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
async def middleware_metricas(request: Request, call_next):
|
|
50
|
+
inicio = time.perf_counter()
|
|
51
|
+
respuesta = None
|
|
52
|
+
|
|
53
|
+
try:
|
|
54
|
+
respuesta = await call_next(request)
|
|
55
|
+
return respuesta
|
|
56
|
+
finally:
|
|
57
|
+
duracion = time.perf_counter() - inicio
|
|
58
|
+
codigo = str(respuesta.status_code) if respuesta else "500"
|
|
59
|
+
|
|
60
|
+
PETICIONES_TOTALES.labels(
|
|
61
|
+
metodo=request.method,
|
|
62
|
+
endpoint=request.url.path,
|
|
63
|
+
codigo_estado=codigo,
|
|
64
|
+
).inc()
|
|
65
|
+
|
|
66
|
+
DURACION_PETICION.labels(
|
|
67
|
+
metodo=request.method,
|
|
68
|
+
endpoint=request.url.path,
|
|
69
|
+
).observe(duracion)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## OpenTelemetry — Trazas Distribuidas en Python
|
|
75
|
+
|
|
76
|
+
```python
|
|
77
|
+
# telemetria.py
|
|
78
|
+
from opentelemetry import trace
|
|
79
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
80
|
+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
81
|
+
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
|
82
|
+
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
|
|
83
|
+
from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor
|
|
84
|
+
from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor
|
|
85
|
+
|
|
86
|
+
def configurar_telemetria(nombre_servicio: str, endpoint_otlp: str) -> None:
|
|
87
|
+
proveedor = TracerProvider()
|
|
88
|
+
exportador = OTLPSpanExporter(endpoint=endpoint_otlp)
|
|
89
|
+
proveedor.add_span_processor(BatchSpanProcessor(exportador))
|
|
90
|
+
trace.set_tracer_provider(proveedor)
|
|
91
|
+
|
|
92
|
+
FastAPIInstrumentor.instrument()
|
|
93
|
+
SQLAlchemyInstrumentor().instrument()
|
|
94
|
+
HTTPXClientInstrumentor().instrument()
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
tracer = trace.get_tracer(__name__)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
async def procesar_pago(pedido_id: str, monto: float) -> dict:
|
|
101
|
+
with tracer.start_as_current_span("procesar_pago") as span:
|
|
102
|
+
span.set_attribute("pedido.id", pedido_id)
|
|
103
|
+
span.set_attribute("pedido.monto", monto)
|
|
104
|
+
span.set_attribute("servicio.nombre", "pagos")
|
|
105
|
+
|
|
106
|
+
try:
|
|
107
|
+
with tracer.start_as_current_span("validar_fondos"):
|
|
108
|
+
fondos_ok = await verificar_fondos(pedido_id, monto)
|
|
109
|
+
span.set_attribute("fondos.suficientes", fondos_ok)
|
|
110
|
+
|
|
111
|
+
if not fondos_ok:
|
|
112
|
+
span.set_status(trace.StatusCode.ERROR, "Fondos insuficientes")
|
|
113
|
+
raise ErrorValidacion("Fondos insuficientes")
|
|
114
|
+
|
|
115
|
+
with tracer.start_as_current_span("gateway_pago"):
|
|
116
|
+
resultado = await gateway.cobrar(monto)
|
|
117
|
+
span.add_event("pago_completado", {"transaccion_id": resultado["id"]})
|
|
118
|
+
return resultado
|
|
119
|
+
|
|
120
|
+
except Exception as exc:
|
|
121
|
+
span.record_exception(exc)
|
|
122
|
+
span.set_status(trace.StatusCode.ERROR)
|
|
123
|
+
raise
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Logging Estructurado en Producción
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
# logging_config.py
|
|
132
|
+
import structlog
|
|
133
|
+
import logging
|
|
134
|
+
import sys
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
def configurar_logging(nivel: str = "INFO", formato: str = "json") -> None:
|
|
138
|
+
procesadores_compartidos = [
|
|
139
|
+
structlog.contextvars.merge_contextvars,
|
|
140
|
+
structlog.processors.add_log_level,
|
|
141
|
+
structlog.processors.TimeStamper(fmt="iso", utc=True),
|
|
142
|
+
structlog.stdlib.add_logger_name,
|
|
143
|
+
]
|
|
144
|
+
|
|
145
|
+
if formato == "json":
|
|
146
|
+
procesadores_compartidos.append(structlog.processors.JSONRenderer())
|
|
147
|
+
else:
|
|
148
|
+
procesadores_compartidos.append(structlog.dev.ConsoleRenderer())
|
|
149
|
+
|
|
150
|
+
structlog.configure(
|
|
151
|
+
processors=procesadores_compartidos,
|
|
152
|
+
wrapper_class=structlog.make_filtering_bound_logger(
|
|
153
|
+
logging.getLevelName(nivel)
|
|
154
|
+
),
|
|
155
|
+
logger_factory=structlog.PrintLoggerFactory(sys.stdout),
|
|
156
|
+
cache_logger_on_first_use=True,
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
import structlog
|
|
161
|
+
|
|
162
|
+
logger = structlog.get_logger()
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
async def middleware_logging(request: Request, call_next):
|
|
166
|
+
structlog.contextvars.clear_contextvars()
|
|
167
|
+
structlog.contextvars.bind_contextvars(
|
|
168
|
+
request_id=request.headers.get("X-Request-ID", str(uuid.uuid4())),
|
|
169
|
+
metodo=request.method,
|
|
170
|
+
ruta=request.url.path,
|
|
171
|
+
ip_cliente=request.client.host if request.client else None,
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
logger.info("peticion_recibida")
|
|
175
|
+
|
|
176
|
+
inicio = time.perf_counter()
|
|
177
|
+
respuesta = await call_next(request)
|
|
178
|
+
duracion_ms = (time.perf_counter() - inicio) * 1000
|
|
179
|
+
|
|
180
|
+
logger.info(
|
|
181
|
+
"peticion_completada",
|
|
182
|
+
codigo_estado=respuesta.status_code,
|
|
183
|
+
duracion_ms=round(duracion_ms, 2),
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
return respuesta
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Reglas de Alerting — Prometheus Alertmanager
|
|
192
|
+
|
|
193
|
+
```yaml
|
|
194
|
+
# alerts/api.yml
|
|
195
|
+
groups:
|
|
196
|
+
- name: api_slos
|
|
197
|
+
rules:
|
|
198
|
+
- alert: DisponibilidadBajaSLO
|
|
199
|
+
expr: |
|
|
200
|
+
(
|
|
201
|
+
sum(rate(http_requests_total{status!~"5.."}[5m]))
|
|
202
|
+
/
|
|
203
|
+
sum(rate(http_requests_total[5m]))
|
|
204
|
+
) < 0.999
|
|
205
|
+
for: 5m
|
|
206
|
+
labels:
|
|
207
|
+
severidad: critica
|
|
208
|
+
equipo: backend
|
|
209
|
+
annotations:
|
|
210
|
+
resumen: "Disponibilidad por debajo del SLO"
|
|
211
|
+
descripcion: >
|
|
212
|
+
La disponibilidad actual es {{ $value | humanizePercentage }},
|
|
213
|
+
por debajo del SLO de 99.9%.
|
|
214
|
+
runbook: "https://wiki.empresa.com/runbooks/disponibilidad-baja"
|
|
215
|
+
|
|
216
|
+
- alert: LatenciaAltaP99
|
|
217
|
+
expr: |
|
|
218
|
+
histogram_quantile(0.99,
|
|
219
|
+
sum(rate(http_request_duration_seconds_bucket[5m])) by (le, endpoint)
|
|
220
|
+
) > 1.0
|
|
221
|
+
for: 3m
|
|
222
|
+
labels:
|
|
223
|
+
severidad: advertencia
|
|
224
|
+
equipo: backend
|
|
225
|
+
annotations:
|
|
226
|
+
resumen: "P99 de latencia supera 1 segundo"
|
|
227
|
+
runbook: "https://wiki.empresa.com/runbooks/latencia-alta"
|
|
228
|
+
|
|
229
|
+
- alert: TasaErroresAlta
|
|
230
|
+
expr: |
|
|
231
|
+
sum(rate(http_requests_total{status=~"5.."}[5m])) by (endpoint)
|
|
232
|
+
/
|
|
233
|
+
sum(rate(http_requests_total[5m])) by (endpoint)
|
|
234
|
+
> 0.05
|
|
235
|
+
for: 2m
|
|
236
|
+
labels:
|
|
237
|
+
severidad: critica
|
|
238
|
+
equipo: backend
|
|
239
|
+
annotations:
|
|
240
|
+
resumen: "Tasa de errores 5xx supera 5%"
|
|
241
|
+
runbook: "https://wiki.empresa.com/runbooks/errores-5xx"
|
|
242
|
+
|
|
243
|
+
- name: infraestructura
|
|
244
|
+
rules:
|
|
245
|
+
- alert: UsoMemoriaAlto
|
|
246
|
+
expr: |
|
|
247
|
+
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes)
|
|
248
|
+
/ node_memory_MemTotal_bytes > 0.90
|
|
249
|
+
for: 10m
|
|
250
|
+
labels:
|
|
251
|
+
severidad: advertencia
|
|
252
|
+
annotations:
|
|
253
|
+
resumen: "Uso de memoria superior al 90%"
|
|
254
|
+
runbook: "https://wiki.empresa.com/runbooks/memoria-alta"
|
|
255
|
+
|
|
256
|
+
- alert: UsoCPUAlto
|
|
257
|
+
expr: |
|
|
258
|
+
100 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100 > 85
|
|
259
|
+
for: 15m
|
|
260
|
+
labels:
|
|
261
|
+
severidad: advertencia
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Runbook — Plantilla Mínima
|
|
267
|
+
|
|
268
|
+
```markdown
|
|
269
|
+
# Runbook: TasaErroresAlta
|
|
270
|
+
|
|
271
|
+
## Sintoma
|
|
272
|
+
Alerta `TasaErroresAlta` disparada. Tasa de errores 5xx > 5% en endpoint X.
|
|
273
|
+
|
|
274
|
+
## Impacto
|
|
275
|
+
- Usuarios afectados: ~N% de trafico
|
|
276
|
+
- Funcionalidad degradada: [describir]
|
|
277
|
+
|
|
278
|
+
## Diagnostico (en orden)
|
|
279
|
+
|
|
280
|
+
### 1. Verificar despliegues recientes
|
|
281
|
+
kubectl rollout history deployment/api-backend
|
|
282
|
+
|
|
283
|
+
### 2. Ver logs de errores
|
|
284
|
+
kubectl logs -l app=api-backend --since=10m | grep "ERROR"
|
|
285
|
+
|
|
286
|
+
### 3. Revisar dependencias externas
|
|
287
|
+
- Base de datos: verificar conexiones
|
|
288
|
+
- Cache Redis: redis-cli ping
|
|
289
|
+
|
|
290
|
+
## Acciones de remediacion
|
|
291
|
+
|
|
292
|
+
### Si fue un deploy reciente:
|
|
293
|
+
kubectl rollout undo deployment/api-backend
|
|
294
|
+
|
|
295
|
+
### Si la BD esta saturada:
|
|
296
|
+
- Activar modo de solo lectura (feature flag DB_READ_ONLY=true)
|
|
297
|
+
|
|
298
|
+
## Escalar a
|
|
299
|
+
- Si no resuelve en 15 minutos: notificar a #oncall-senior
|
|
300
|
+
- Si hay perdida de datos: escalar a CTO inmediatamente
|
|
301
|
+
```
|