En este instructivo, se explica cómo usar Cloud Logging en lugar de un servidor de registro para generar registros específicos de la aplicación. De forma predeterminada, Cloud Logging agrega registros del sistema y de muchas aplicaciones comunes. En el instructivo, también se muestra cómo obtener registros en Cloud Logging desde flujos de trabajo personalizados o aplicaciones que no están en la lista de aplicaciones comunes.
Los trabajadores de corta duración son comunes en varias cargas de trabajo de procesamiento, como en canalizaciones de procesamiento de efectos visuales (VFX) y compilación de sistemas. Este instructivo se enfoca en las cargas de trabajo de VFX y usa el motor de renderizado de VFX independiente V-Ray como ejemplo. En un caso práctico típico, las instancias de VM se crean según la demanda mediante un sistema de colas, se les asigna un trabajo (como uno o más marcos para procesar) y se terminan una vez que se completa el trabajo. Debes capturar los registros no solo del proceso de renderizado, sino también de cualquier trabajo anterior o posterior al renderizado que realice la instancia, como la conversión de archivos o la copia de marcos renderizados de forma local en el almacenamiento común.
Objetivos
- Crear una instancia e instalar el agente de Cloud Logging en la instancia
- Configurar la aplicación o flujo de trabajo personalizado para enviar registros al agente de Cloud Logging
- Usar la biblioteca cliente de Python para enviar registros directamente a Logging
- Ver, filtrar y buscar registros en Logging
- Enrutar registros de Logging a un almacenamiento accesible a largo plazo
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
- Compute Engine
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Consulta Precios de Logging para comprender los costos relacionados con el uso de Cloud Logging en este instructivo.
Antes de comenzar
-
En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Habilita la API de Compute Engine.
Instala el componente de comandos
gcloud beta
:gcloud components install beta
Configura el proyecto predeterminado para que no tengas que proporcionar la marca
--project
con cada comando:gcloud config set project PROJECT_ID
Crea una instancia de Compute Engine
El agente de Cloud Logging funciona en instancias de máquina virtual (VM) de Compute Engine y en instancias de VM de Amazon Elastic Compute Cloud (Amazon EC2). Si deseas obtener más información sobre el agente y las instancias de VM que admite, consulta Agente de registro en la documentación del producto.
A los fines de este instructivo, puedes crear una instancia con un tipo de VM predeterminado. Sin embargo, en producción, debes decidir cuánta potencia de procesamiento requiere la aplicación y elegir una VM en consecuencia.
- En la consola de Google Cloud, ve a la página Crear una instancia.
- En la página Crear una instancia nueva, completa las propiedades que quieras para tu instancia. Para ver las opciones de configuración avanzadas, expande Administración, seguridad, discos, herramientas de redes, usuario único.
- Para crear la VM, haz clic en Crear.
La creación de la instancia nueva toma solo unos minutos. En este instructivo, la instancia de VM se llama sd-tutorial
.
Configura la instancia de Compute Engine
Una vez creada la instancia de VM, con una cuenta que tenga permisos de superusuario, completa estos pasos:
Usa SSH para conectarte a la instancia
sd-tutorial
.gcloud compute ssh sd-tutorial
Instala el agente de Cloud Logging. Para obtener instrucciones detalladas, consulta Instala el agente de Cloud Logging.
Descarga y, luego, instala
pip
.sudo yum install python-pip
Descarga e instala la biblioteca de Python para Cloud Logging:
pip install --user --upgrade google-cloud-logging
Crea el archivo de configuración del agente de Cloud Logging para V-Ray en
/etc/google-fluentd/config.d/vray.conf
con el siguiente contenido:<source> @type tail read_from_head true format /^(\[(?<time>.*?)\])?((?<severity> ?(debug|info|warning|error|critical)): )?(?<message>.*)$/ time_format %Y/%b/%d|%H:%M:%S # Log file names must be of the format SH.SEQ.SHOT.ROLE.log. # For example: myfilm.fba.0050.render.log path /home/*/vray/logs/*.log pos_file /var/lib/google-fluentd/pos/vray.pos tag vray.* </source> <filter vray.**> @type record_transformer <record> # Parse the log file name and add additional key:value records # to aid in filtering and searching logs in Logging. # Assumes you are following the convention in this tutorial. show ${tag_parts[-5]} seq ${tag_parts[-4]} shot ${tag_parts[-3]} role ${tag_parts[-2]} tag ${tag_suffix[1]} # Strip off the "vray." prefix. </record> </filter>
Para obtener más información sobre la configuración de
fluentd
, consulta Sintaxis del archivo de configuración.Vuelve a cargar la configuración del agente de Cloud Logging:
sudo service google-fluentd reload
En una configuración de producción, podrías convertir esta VM configurada en una imagen de VM personalizada que tu canalización podría iniciar según demanda.
Consideraciones especiales para VFX
Cada paquete de software de renderizado genera su propio resultado de registro. Aunque en este instructivo se usa el motor de renderizado independiente V-Ray, puedes adaptar el instructivo a otros motores o aplicaciones que generen stdout/stderr
en el resultado. En este instructivo, se usa una configuración fluentd
generalizada y se espera que el sistema de colas redireccione el resultado del motor de renderizado a un nombre de archivo con un formato específico de búsqueda. Si ejecutas varios trabajos en una sola VM, deberás garantizar nombres de archivo únicos.
Asigna un nombre a los archivos de registro en Logging
Cuando definas la convención de nombres de los registros de Logging, sigue las prácticas recomendadas para las convenciones de nombres en uso en tu estudio. Logging puede buscar en todos los recursos, por lo que usar una convención de nombres coherente garantiza que puedas buscar registros generados a partir de recursos diferentes etiquetados con los mismos datos o similares. En este instructivo, el administrador de colas propaga los siguientes valores en las variables de entorno antes de iniciar el proceso de trabajador de renderizado, que luego se usan para etiquetar los registros y generar un nombre de archivo único:
Nombre del campo | Variable de entorno | Valor |
Mostrar nombre (proyecto) | SHOW |
myfilm |
Nombre de la secuencia | SEQ |
fba |
Número de corte | SHOT |
0050 |
Función | ROLE |
render |
En el ejemplo, estos valores se reúnen en una convención de nombre típica para los flujos de trabajo de efectos visuales:
<SHOW>.<SEQ>.<SHOT>.<ROLE>.log
Por ejemplo, los registros de renderizado para la toma fba0050
se etiquetarían de la siguiente manera:
myfilm.fba.0050.render.log
En este instructivo, se espera que el administrador de colas establezca el nombre de archivo de registro de acuerdo con esta convención, pero se puede modificar con facilidad para que se ajuste a las diferentes necesidades del estudio.
Prueba la configuración de Logging de forma manual
Para verificar tu configuración sin usar un motor de renderizado o un administrador de colas, copia una entrada de registro de muestra en un registro de prueba. Desde tu directorio principal, ingresa los siguientes comandos:
mkdir -p vray/logs/
export SHOW='testshow' SEQ='testseq' SHOT='testshot' ROLE='testrole'
echo "debug: Test log line at `date` from ${HOSTNAME}" >> vray/logs/${SHOW}.${SEQ}.${SHOT}.${ROLE}.log
Esta línea debería aparecer brevemente en el visor de registro.
Verifica la entrega del registro
En la consola, ve a la página Explorador de registros.
Ir a la página Explorador de registros
En el menú Registros, deberías ver una entrada etiquetada con el nombre de registro que creaste (en este caso,
testshow.testseq.testshot.testrole
).Observa este registro para ver el resultado:
También puedes leer registros si usas el comando beta de la CLI de gcloud y reemplazas
[project-id]
y[log-name]
según corresponda:# List all logs. gcloud beta logging logs list # Read the contents of a specific log. gcloud beta logging read projects/[project-id]/logs/[log-name]
Para obtener más información sobre el registro mediante Google Cloud CLI, consulta la documentación sobre la lectura de entradas de registro.
Accede a Logging desde un proceso de renderizado
Con la configuración establecida de forma correcta y verificada, puedes usar una línea de comandos independiente V-Ray como la siguiente para enviar registros a Logging.
En este ejemplo, las marcas de línea de comandos inician el proceso de V-Ray con un resultado optimizado para redireccionar a un archivo. Se espera que el administrador de colas reemplace SCENE_FILE
por la ruta de archivo local correspondiente. También debe propagar las cuatro variables de entorno (SHOW
, SEQ
, SHOT
y ROLE
) que se usan para generar el nombre del registro, como se describe en la sección Nombra los archivos de registro.
vray \
-display=0 \
-showProgress=0 \
-progressUseCR=0 \
-progressUseColor=0 \
-sceneFile SCENE_FILE > vray/logs/${SHOW}.${SEQ}.${SHOT}.${ROLE}.log 2>&1
Accede directamente a la API de Cloud Logging
La mayoría de las canalizaciones de VFX utilizan algún tipo de lenguaje de programación para realizar tareas programáticas, como preparación de activos, publicación, transferencia de datos, procesamiento o transcodificación. Puedes registrar el resultado de estas tareas en Logging mediante una biblioteca cliente. En este instructivo, se usa Python, porque es muy conocido en la industria de VFX.
Puedes enviar registros a Logging desde estaciones de trabajo locales y basadas en la nube. No instalas el agente de Logging para escribir registros de esta manera porque te comunicas con Logging a través de la API de Python.
Escribe un registro en Cloud Logging mediante la biblioteca de Python
Para acceder a Cloud Logging mediante una secuencia de comandos de Python, primero debes hacer lo siguiente:
- Compila los metadatos de registro.
- Proporciona el nivel de severidad.
- Decide a qué tipo de recurso acceder.
La secuencia de comandos realiza las siguientes acciones:
- Verifica para garantizar el uso de convenciones de nombres adecuadas.
- Reúne los datos de registro.
- Escribe el registro a nivel de recursos del proyecto de Google.
Si accedes desde una estación de trabajo o servidor local, debes autenticarte antes de acceder a Logging. Si accedes desde una instancia de nube, la autenticación ya está completa.
Puedes importar el módulo en cualquier secuencia de comandos de Python en tu canalización y ejecutarlo en una estación de trabajo local o en una instancia en la nube:
import logToStackdriver as lts
lts.write( 'This is the text to log.', show='myfilm', seq='slb', shot='0050', role='render' )
De forma predeterminada, todos los registros escriben en el recurso “proyecto”, que puedes encontrar en la consola, en Logging > Registros > Proyecto de Google:
Registros > Proyecto de Google" class="l10n-absolute-url-src screenshot border" l10n-attrs-original-order="src,alt,class" src="https://cloud.google.com/static/architecture/images/stackdriver-project-resource.png" />
Enruta registros
Si deseas conservar los registros después del período de retención de registros, debes enrutarlos.
Para obtener un almacenamiento económico a largo plazo, enruta los registros a los depósitos de Compute Engine. Para realizarles un análisis de macrodatos, enrútalos a un conjunto de datos de BigQuery. En cualquier caso, primero debes crear un objeto llamado receptor. El receptor te permite crear un filtro que selecciona las entradas de registro que deseas enrutar y elige Compute Engine o BigQuery como destino. La creación de un receptor comienza inmediatamente a enrutar los registros especificados al destino indicado. Para obtener más información sobre los registros de enrutamiento en el explorador de registros, consulta Configura y administra receptores.
Enruta a BigQuery
Puedes usar la semántica de SQL para consultar los registros almacenados en BigQuery. Muchas herramientas de estadísticas de terceros admiten estos registros de forma nativa. Realiza los siguientes pasos:
Crea el receptor con un filtro para enrutar registros a esa tabla. Ten en cuenta que
[PROJECT_ID]
en la siguiente línea de comandos se refiere al proyecto de Google Cloud.gcloud beta logging sinks create render-errors-bq \ bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET] \ --log-filter "jsonPayload.SHOW=myfilm AND jsonPayload.SHOT=fba AND severity>=WARNING"
Recibirás un mensaje con el nombre de la cuenta de servicio para agregar a tu conjunto de datos de BigQuery. Puedes usar la IU web. Haz clic en el menú desplegable junto al nombre del conjunto de datos y, luego, en Compartir conjunto de datos.
El siguiente registro enviado a Logging que coincida con este filtro se enviará al conjunto de datos, con una leve demora. Puedes obtener más información en la documentación Cómo funcionan los receptores.
Enruta a Cloud Storage
Para guardar tus registros en un archivo, debes enrutarlos a un bucket de Cloud Storage. Para los depósitos de Cloud Storage, puedes seleccionar una clase de almacenamiento con precios más bajos destinada a archivos con acceso menos frecuente, o aprovechar la asignación de uso gratis. Cloud Storage proporciona un acceso fácil con HTTP o mediante la integración directa con muchos otros productos de Google Cloud.
En los siguientes pasos, se muestra cómo enrutar a Cloud Storage:
- Crear un bucket de Cloud Storage
En Logging, crea un receptor con un filtro para enrutar esos registros a Cloud Storage.
gcloud beta logging sinks create render-errors-gcs \ storage.googleapis.com/my-gcs-bucket \ --log-filter "jsonPayload.SHOW=myfilm AND jsonPayload.SHOT=fba AND severity>=WARNING"
El siguiente registro enviado a Logging que coincida con este filtro se enviará a un archivo en el bucket, con una leve demora. Puedes obtener más información en la documentación Cómo funcionan los receptores.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra tus instancias de Compute Engine
Para borrar una instancia de Compute Engine, sigue estos pasos:
- En la consola de Google Cloud, ve a la página Instancias de VM.
-
Selecciona tu instancia
en la casilla de verificación de es la instancia que deseas borrar.
- Para borrar la instancia, haz clic en Más acciones, haz clic en Borrar y, luego, sigue las instrucciones.
Borra el bucket de Cloud Storage
Para borrar un bucket de Cloud Storage, sigue estos pasos:
- En la consola de Google Cloud, ve a la página Buckets de Cloud Storage.
- Haz clic en la casilla de verificación del bucket que deseas borrar.
- Para borrar el bucket, haz clic en Borrar y sigue las instrucciones.
Próximos pasos
- Consulta la documentación de Cloud Logging.
- Aprende más sobre fluentd.
- Aprende más sobre el archivo de configuración de fluentd.
- Obtén más información sobre las cuotas y límites de Cloud Logging.
- Explora arquitecturas de referencia, diagramas, instructivos y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.