Resolución de problemas
Cosas que parecen errores y no lo son
Sección titulada «Cosas que parecen errores y no lo son»not available (403) o (404). La función está apagada en ese repositorio,
o el token no la ve. Dependabot, code scanning, las discusiones y el grafo de
dependencias responden así cuando están desactivados. El colector anota el hecho
y sigue: un repositorio con una función apagada no debe detener la pasada de los
otros cuarenta.
Si son todos los repositorios y no uno, es el token. El tráfico necesita
acceso de escritura; las alertas necesitan security_events. Ver
el token.
Una función encendida y nada recogido de ella. Code scanning activado esta mañana, Dependabot encendido, un foro abierto: el colector preguntó antes de que lo hicieras, le dijeron que no, y recuerda ese rechazo un día en vez de pagarlo en cada pasada. Se nota como muy tarde al día siguiente, y reiniciar el proceso vuelve a preguntar en el acto. Ver un rechazo también se recuerda.
still being computed by GitHub (202). GitHub calcula los endpoints
stats/* de forma asíncrona y responde 202 con cuerpo vacío mientras trabaja.
La siguiente pasada suele conseguir los números.
Dos de ellos no lo hacen nunca. En una cuenta personal
stats/code_frequency y stats/contributors devuelven 202 con cuerpo vacío
indefinidamente, que es por lo que este proyecto no los llama: las líneas
añadidas y quitadas salen del colector de commits.
pagination is limited for this resource (422). El final de un feed de
actividad, no un fallo. GitHub sirve tres páginas del feed de eventos y rechaza
la cuarta.
Un repositorio sin tráfico mostrando una ventana que terminó hace semanas. GitHub sigue devolviendo los últimos catorce días que tuvieron datos, no los últimos catorce días. El colector anota lo que le dicen.
Una familia que no aparece nunca en el log. Aún no le toca. Con una cadencia
de doce horas, medio día de logs puede legítimamente no mencionar nunca
account.
Cosas que sí son errores
Sección titulada «Cosas que sí son errores»github.token is empty and GITHUB_TOKEN is unset. Exactamente lo que dice.
every.families.<name>: unknown collector. El nombre no es una familia. El
mensaje lista las treinta y cuatro que existen, en un paréntesis tras los dos
puntos.
groups: is empty. groups: [] no recogería absolutamente nada. Omite la
clave para recogerlo todo, que es lo que significa cuando no está.
groups[N]: "<name>" is not a group. El nombre no es un grupo. El mensaje
lista los que existen, y ghchronicle -groups imprime cada uno con sus familias.
groups[N]: "<name>" is a family, not a group. Familias y grupos son
sustantivos en minúscula de la misma tabla, así que este es fácil de encontrar.
El mensaje nombra el grupo en el que está la familia, que probablemente es lo que
querías, y apunta a every.families.<name>, que es donde vive la cadencia de una
sola familia.
sinks: enable at least one of .... Una ejecución que recoge y tira es casi
nunca lo que alguien quiso. -card-only es la excepción y no necesita ningún
destino.
prometheus exporter: listen tcp :9605: bind: address already in use. Se
informa al arrancar en vez de quedar sepultado en una goroutine, para que un
choque de
puerto no te deje con un colector corriendo y un exportador ausente en silencio.
influx write: 400. Casi siempre una colisión de tipo de columna. InfluxDB
fija una columna como etiqueta o como campo la primera vez que la ve y rechaza
las escrituras posteriores que no coincidan. Si un colector cambió de qué tipo
es un nombre, hay que borrar la tabla: DELETE /api/v3/configure/table.
family failed everywhere, not marking it as run. Fallaron todos los
repositorios en una familia, así que se reintentará en vez de darse por hecha.
Que falle un repositorio es normal; que fallen todos es el token, la red o una
caída.
rate limit reserve reached, family skipped. Una vez está bien. En cada
pasada significa que las cadencias son demasiado rápidas para el número de
repositorios. Alarga artifacts y después actions; ver
coste de una pasada.
Los datos parecen mal
Sección titulada «Los datos parecen mal»Un número es múltiplo del número de pasadas. Algo que es una instantánea se está sumando en el tiempo. Los referrers, las rutas, las etiquetas y los hitos son instantáneas de una ventana sin fecha propia; se sellan al inicio del día UTC para que las pasadas de un día reescriban una fila, y el dashboard toma la más reciente y no la suma.
La mediana de tiempo hasta la primera revisión dice No data. El panel lee
seconds_to_first_human_review, que deja fuera a los bots de revisión y las
respuestas del propio autor; en una cuenta donde nadie más revisa, ninguna pull
request lo lleva y la tarjeta está honestamente vacía. La velocidad de los bots
está en la tabla Reviewers, donde cada uno va marcado como bot: medido, nueve
de cada diez pull requests tuvieron una revisión de un bot en menos de un
minuto.
Los clones son enormes comparados con las visitas. La integración continua
clona un repositorio miles de veces por cada visita humana. Un repositorio
medido aquí tuvo más de cien clones por cada visita. clones no cuenta
personas.
open_issues no cuadra con el número de issues. Ese campo es de GitHub, y
GitHub cuenta las pull requests como issues dentro. La medida gh_issue es la
que cuenta issues.
El almacenamiento de artefactos parece pequeño. Compara el campo walked
con count en gh_artifact_total. Cuando no coinciden, el tamaño vivo es un
suelo: el repositorio tiene más artefactos de los que recorrió el tope de
páginas.
La gráfica de tráfico solo llega catorce días atrás. Eso es una primera pasada. La ventana se reescribe día a día en cada pasada, así que la serie se extiende conforme el colector sigue corriendo. No se puede rellenar: GitHub nunca guardó nada más viejo.
Un panel dice “Query would scan 10000 Parquet files”. InfluxDB 3 Core
escribe un fichero por partición y por petición de escritura, y no los compacta
nunca, así que un almacén alimentado por una versión de esta herramienta
anterior al registro de escrituras guarda sus filas en muchos más ficheros de
los que necesita. Ensanchar el intervalo del panel no ayuda: el límite cuenta
los ficheros que abre el planificador, antes de cualquier agregación. Lo que
ayuda es el registro, que viene encendido y detiene el crecimiento, y después
una de tres cosas para lo ya acumulado: subir --query-file-limit en el
servidor, reescribir las tablas afectadas, o pasar a InfluxDB 3 Enterprise, que
compacta por su cuenta y es gratis para uso doméstico. Ver
solo se escribe lo que ha cambiado.
Un panel de Prometheus muestra una línea plana. Eso es el almacén, no los datos. El exportador sirve valores actuales, así que la ventana de tráfico de catorce días se colapsa a su día más reciente y la historia de estrellas al total actual. Ver la fecha del punto.
No se escribe nada
Sección titulada «No se escribe nada»Ejecuta una pasada en primer plano y lee lo que dice. Después comprueba, en orden:
- que
-listimprime los repositorios que esperas, - que el log de la pasada dice
written, - que el destino es alcanzable.
ghchronicle -config config.yaml -list # los repositorios, y cuáles quedan aparteghchronicle -config config.yaml -once # una pasada en primer plano, y salirjournalctl -u ghchronicle -f # bajo systemddebug añade tres líneas a eso y nada más: el tamaño del libro de escrituras
al arrancar, las familias de cuenta saltadas por falta de targets.user y las
entradas que un destino dejó fuera por viejas. No hay registro por petición en
ningún nivel. Ver registro.
log: level: debugUna familia a la que aún no le toca sencillamente no aparece.
Loki descarta entradas
Sección titulada «Loki descarta entradas»Busca la línea de depuración que las cuenta. Loki rechaza una entrada que esté
más atrasada que su ventana de desorden respecto a la entrada más nueva que ya
hay en ese stream, unas dos horas por omisión, así que el destino deja fuera las
más viejas en vez de perder el envío entero. Sube max_age solo junto al propio
out_of_order_time_window de Loki. Ver Loki.