Escritos
Notas desde la copa.
Observaciones sobre herramientas de DevOps, observabilidad y las pequeñas carencias del ecosistema que vale la pena cubrir, escritas para los ingenieros que se topan con ellas.
20publicaciones y subiendo.
OpsCanopy8 min de lectura
Aprende DevOps en 90 días: de desarrollador a ingeniero
Por qué creamos Mission: 90 Days DevOps — una ruta gratuita día a día de Linux a Kubernetes con misiones de incidentes jugables, y las decisiones de diseño.
- devops
- career
- learning
OpsCanopy13 min de lectura
Cómo depurar el enrutamiento de Alertmanager
¿Las alertas van al receiver equivocado, o a ninguno? Depura el enrutamiento de Alertmanager: primera coincidencia, continue ausente, regex y catch-all.
- alertmanager
- observability
- alerting
OpsCanopy11 min de lectura
Alertmanager: matchers, agrupación y herencia de rutas
Referencia de la config de rutas de Alertmanager: matchers, match y match_re, regex ancladas, los cuatro campos de agrupación y qué hereda una ruta hija.
- alertmanager
- observability
- alerting
OpsCanopy10 min de lectura
Prometheus descartó mi target: depurando relabel_configs
Un target o una etiqueta desapareció tras el relabeling. Depura relabel_configs frente a metric_relabel_configs, el anclaje de regex y la lógica de keep/drop.
- prometheus
- observability
- relabeling
OpsCanopy9 min de lectura
Por qué tu condición if de GitHub Actions siempre se ejecuta
¿Tu condición if de GitHub Actions siempre se evalúa como verdadera? Es la trampa del texto literal: todo lo que queda fuera de ${{ }} es una cadena truthy.
- github-actions
- ci-cd
OpsCanopy8 min de lectura
Por qué tu workflow de GitHub Actions no se disparó
Por qué tu workflow no se disparó: rama que no coincide, la semántica AND de branches + paths, el glob ** obligatorio y paths-ignore en pull_request.
- github-actions
- ci-cd
- debugging
OpsCanopy11 min de lectura
Actions de relabeling de Prometheus: keep, labelmap, hashmod
Referencia de las 11 actions de relabeling de Prometheus —replace, keep, drop, labelmap, labeldrop, hashmod, keepequal, lowercase— cada una con un ejemplo.
- prometheus
- observability
- relabeling
OpsCanopy10 min de lectura
7 errores comunes en .gitlab-ci.yml (y cómo detectarlos)
Los errores de .gitlab-ci.yml que ponen los pipelines en rojo: stages sin definir, jobs sin script, needs y rules rotos, mal uso de anchors — con su solución.
- gitlab-ci
- ci-cd
- yaml
OpsCanopy10 min de lectura
Cómo validar tu .gitlab-ci.yml antes de hacer push
Deja de subir pipelines rotos. Valida tu .gitlab-ci.yml en busca de errores de YAML y estructurales: antes del commit, no después del pipeline en rojo.
- gitlab-ci
- ci-cd
- yaml
OpsCanopy11 min de lectura
Cuándo usar Docker Compose en lugar de docker run
Cuál elegir y qué cambia de verdad al dar el salto: la red predeterminada, la política de reinicio, el modo desacoplado y la vuelta a una línea run.
- docker
- docker-compose
- containers
OpsCanopy11 min de lectura
Cómo convertir un comando docker run a docker-compose.yml
Convierte cualquier comando docker run en un servicio de docker-compose.yml, flag por flag: puertos, volúmenes, variables de entorno y política de reinicio.
- docker
- docker-compose
- containers
OpsCanopy6 min de lectura
Cómo leer una consulta de PromQL
Una consulta de PromQL se lee de dentro hacia afuera, no de izquierda a derecha. Aprende las cuatro capas: selectores, rangos, funciones y agregaciones.
- promql
- prometheus
- observability
OpsCanopy6 min de lectura
LogQL vs PromQL: la misma consulta en ambos lenguajes
LogQL toma prestada la forma de PromQL, pero parte de líneas de log, no de métricas. Cómo se alinean ambos lenguajes, dónde se traducen bien y dónde no.
- logql
- promql
- observability
OpsCanopy6 min de lectura
Deja de publicar un .env.example desactualizado
Tu .env.example es documentación que se pudre en silencio. Por qué la deriva de variables rompe el onboarding y cómo detectar claves faltantes y sin usar.
- configuration
- developer-experience
- twelve-factor
OpsCanopy5 min de lectura
Escribir expresiones regulares robustas para líneas de log
Una guía práctica para construir regex que parseen líneas de log de forma fiable: anclaje, grupos de captura, escapado, voracidad y los modos de fallo.
- regex
- logs
- parsing
OpsCanopy6 min de lectura
Migrar de cron a temporizadores de systemd
Cómo convertir entradas de crontab en unidades .timer y .service de systemd: sintaxis OnCalendar, logs, retardos aleatorios y ejecuciones de recuperación.
- systemd
- cron
- linux
OpsCanopy7 min de lectura
Leer expresiones cron: una guía campo por campo
Una guía práctica, campo por campo, para leer expresiones cron — los cinco campos de tiempo, rangos, pasos, listas y @macros — y las trampas más habituales.
- cron
- scheduling
- devops
OpsCanopy7 min de lectura
Seguridad en GitHub Actions: lo que los linters no detectan
Los validadores de YAML ven la sintaxis, no la exposición: pull_request_target, inyección de scripts, actions sin fijar y GITHUB_TOKEN demasiado amplio.
- github-actions
- security
- ci-cd
OpsCanopy5 min de lectura
Una CVE, cuatro archivos de exclusión: Trivy, Grype y Snyk
Una supresión de CVE triada hay que recodificarla en .trivyignore, .grype.yaml, .snyk y osv-scanner.toml. La misma supresión en los cuatro formatos.
- security
- vulnerability-management
- devops
OpsCanopy5 min de lectura
Probar reglas de alerta de Loki: el vacío que deja promtool
Prometheus tiene promtool test rules. Loki no tiene nada equivalente. Por qué importa probar las reglas de alerta LogQL y cómo cerrar el vacío hoy.
- loki
- observability
- testing