Me he sumergido en una integración de Stackdriver Trace en Google Cloud Run. Puedo hacer que funcione con el agente, pero me molestan algunas preguntas.
Dado que
- El agente Stackdriver agrega trazas en un pequeño búfer y las envía periódicamente.
- El acceso a la CPU está restringido cuando un servicio Cloud Run no maneja una solicitud.
- No hay gancho de apagado para los servicios de Cloud Run; no puede borrar el búfer antes del apagado: el contenedor solo recibe un SIGKILL . Esta es una señal que no puede captar de su aplicación.
- La ejecución de un proceso en segundo plano que envía información fuera del ciclo de solicitud-respuesta parece violar el contrato de Knative Container Runtime
- Las colecciones de datos de registro están documentadas y no requieren que ejecute un agente, pero no existe tal solución para la telemetría.
- Encontré un informe de alguien experimentando rastros perdidos en Cloud Run usando el enfoque basado en agentes
Cómo lo hace Google
Entré en el código fuente de Cloud Endpoints ESP (la integración de Cloud Run está en beta) para ver si lo resuelven de una manera diferente, pero se usa el mismo patrón: hay un búfer con trazas (1s) y Se borra periódicamente.
Pregunta
Si bien mi integración de rastreo parece funcionar en mi configuración de prueba, me preocupan los rastreos incompletos y faltantes cuando ejecuto esto en un entorno de producción.
¿Es este un problema hipotético o un problema real?
Parece que la forma correcta de abordar esto es escribir telemetría en los registros, en lugar de utilizar un proceso de agente. ¿Es eso compatible con Stackdriver Trace?