Registro
log: level: info # debug, info, warn, error format: text # text o json file: /var/log/ghchronicle/ghchronicle.log max_bytes: 67108864 keep: 5Las claves
Sección titulada «Las claves»| Clave | Por omisión | Significado |
|---|---|---|
level | info | debug, info, warn o error; cualquier otro valor se comporta como info |
format | text | text para una persona, json para un agente de envío; cualquier otro valor es text |
file | ninguno | Un fichero rotatorio además de la salida de error |
max_ | 67108864 | Rota a los 64 MiB. Un valor no positivo cae al valor por defecto |
keep | 5 | Cuántos ficheros rotados conservar. Un valor no positivo cae al valor por defecto |
Los dos, nunca en lugar de
Sección titulada «Los dos, nunca en lugar de»Un file configurado no sustituye a la salida de error, se escribe además de
ella. Bajo systemd el journal es donde mira todo el mundo primero, y un fichero
de log que ocupara en silencio el lugar del journal sería una trampa:
journalctl -u ghchronicle se quedaría mudo y la conclusión obvia sería que el
servicio se ha parado.
La rotación es por tamaño con sufijos numerados, así que la retención es un recuento y no una fecha y dos rotaciones en el mismo segundo no pueden chocar. El contador de tamaño se lee del fichero al arrancar, así que un reinicio no lo pone a cero dejando que el fichero crezca sin límite.
Qué dice el log un día bueno
Sección titulada «Qué dice el log un día bueno»level=INFO msg="repositories discovered" count=18level=INFO msg=written sink=influxdb family=traffic points=629level=INFO msg="rate budget" bucket=core remaining=4354 limit=5000Una familia que aún no toca sencillamente no aparece. Eso es normal, y es lo
primero que hay que mirar cuando parece faltar una medida: con una cadencia de
doce horas, medio día de logs puede legítimamente no mencionar nunca account.
Las dos líneas que merecen alerta
Sección titulada «Las dos líneas que merecen alerta»rate limit reserve reached significa que se saltó una familia para
proteger el presupuesto.
level=WARN msg="rate limit reserve reached, family skipped" family=artifactsUna vez está bien. En cada pasada significa que las cadencias son demasiado rápidas para el número de repositorios.
family failed everywhere, not marking it as run significa que fallaron
todos los repositorios en una familia.
level=WARN msg="family failed everywhere, not marking it as run" family=securityLa familia no se marca como hecha a propósito, así que se reintenta en la siguiente cadencia en vez de darse por completa. Esa es la línea que separa “una función está apagada en un repositorio” de “el token ha perdido un permiso”.
Depuración
Sección titulada «Depuración»log: level: debugDebug añade tres líneas, y ninguna más: con cuántos puntos volvió el libro de
escrituras al arrancar, que las familias de cuenta se saltaron porque
targets.user está vacío, y cuántas entradas dejó fuera un destino por ser más
antiguas que su horizonte. Esa última es la única forma de ver que un envío se
recortó en lugar de rechazarse. No hay registro por petición: el cliente de
internal/ghapi no lleva registrador, así que qué endpoint se llamó y qué
respuesta volvió 304 no se ven en ningún nivel.
No confundir con el colector de logs de jobs
Sección titulada «No confundir con el colector de logs de jobs»log es el diario de la propia herramienta. every.joblogs es un colector:
recoge las últimas cuarenta líneas de cada job fallido de GitHub Actions y las
convierte en puntos. Son ajustes sin relación, y el segundo pertenece a un
almacén de logs y no a una base de datos de métricas. Ver
Loki.