Puntos de control
Deploy Application
/ 30
Create a logs-based metric
/ 30
Create an alerting policy
/ 40
Depuración de aplicaciones en Google Kubernetes Engine
GSP736
Descripción general
Cloud Logging y su herramienta complementaria, Cloud Monitoring, son productos destacados, integrados de manera completa a Google Kubernetes Engine. Este lab te enseña cómo funciona Cloud Logging con aplicaciones y clústeres de GKE y algunas prácticas recomendadas para la recopilación de registros a través de los casos de uso comunes de registro.
Objetivos
En este lab, aprenderás a hacer lo siguiente:
- Usar Cloud Monitoring para detectar problemas
- Usar Cloud Logging para solucionar problemas de una aplicación activa en GKE
La aplicación de demostración que se usa en el lab
Para usar un ejemplo concreto, solucionarás los problemas de una app de demostración de microservicios de muestra implementada a un clúster de GKE. En esta app de demostración, hay muchos microservicios y dependencias entre ellos. Generarás tráfico con un generador de cargas y, luego, usarás Logging, Monitoring y GKE para encontrar el error (alerta o métricas), identificar la causa raíz con Logging y corregir o confirmar que el problema se haya solucionado con Logging y Monitoring.
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
- Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
- El botón Abrir la consola de Google Cloud
- El tiempo restante
- Las credenciales temporales que debe usar para el lab
- Otra información para completar el lab, si es necesaria
-
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordene las pestañas en ventanas separadas, una junto a la otra.
Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta. -
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}} También puedes encontrar el nombre de usuario en el panel Detalles del lab.
-
Haz clic en Siguiente.
-
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}} También puedes encontrar la contraseña en el panel Detalles del lab.
-
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia Cuenta de Google podría generar cargos adicionales. -
Haga clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Activa Cloud Shell
Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
- Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.
Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. El resultado contiene una línea que declara el PROJECT_ID para esta sesión:
gcloud
es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.
- Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
-
Haz clic en Autorizar.
-
Ahora, el resultado debería verse de la siguiente manera:
Resultado:
- Puedes solicitar el ID del proyecto con este comando (opcional):
Resultado:
Resultado de ejemplo:
gcloud
, consulta la guía con la descripción general de gcloud CLI en Google Cloud.
Configura tu región y zona
Algunos recursos de Compute Engine se encuentran en regiones y zonas. Una región es una ubicación geográfica específica donde puedes ejecutar tus recursos. Cada región tiene una o más zonas.
Ejecuta los siguientes comandos de gcloud en la consola de Cloud para establecer la región y la zona predeterminadas de tu lab:
Tarea 1: Configura la infraestructura
Conéctate a un clúster de Google Kubernetes Engine y verifica que se haya creado correctamente.
- Configura la variable del ID del proyecto:
- Usa el siguiente comando para ver el estado del clúster:
El estado del clúster será PROVISIONING.
-
Espera un momento y vuelve a ejecutar el comando anterior hasta que el estado cambie a RUNNING. Esto puede demorar varios minutos.
-
Verifica si se creaste el clúster llamado
central
.
También puedes supervisar el estado del progreso en la consola de Cloud dirigiéndote a Menú de navegación > Kubernetes Engine > Clústeres.
- Cuando el estado del clúster sea RUNNING, obtén sus credenciales:
Resultado:
- Verifica si se crearon los nodos:
El resultado debería ser similar al siguiente:
Tarea 2: Implementa la aplicación
A continuación, implementa una aplicación de microservicios llamada Hipster Shop en tu clúster para crear una carga de trabajo que puedas supervisar.
- Ejecuta el siguiente comando para clonar el repo:
- Cambia al directorio
microservices-demo
:
- Instala la app con
kubectl
:
- Confirma que todo se ejecute en forma correcta:
El resultado debería ser similar al siguiente:
- Antes de continuar con el paso siguiente, vuelve a ejecutar el comando hasta que todos los Pods tengan el estado Running.
Haz clic en Revisar mi progreso para verificar el objetivo.
- Ejecuta lo siguiente para obtener la IP externa de la aplicación. Este comando solo mostrará la dirección IP una vez que el servicio se haya implementado, por lo que tal vez necesites repetir el comando hasta que haya una dirección IP externa asignada:
- Por último, confirma que la app se esté ejecutando:
La confirmación se verá de la siguiente manera:
Luego de que se haya implementado la aplicación, puedes dirigirte a la consola de Cloud y ver el estado.
En la página de Kubernetes Engine > Cargas de trabajo verás que todos los Pods están correctos.
- Ahora haz clic en Ingress y servicios, y verifica que todos los servicios estén correctos. Quédate en esta pantalla y configura la supervisión para la aplicación.
Tarea 3. Abre la aplicación
- Desplázate a frontend-external y haz clic en las IP de los extremos del servicio.
Con esto debería abrirse la aplicación y verse una página como la siguiente:
Tarea 4. Crea una métrica basada en registros
Ahora configurarás Cloud Logging para crear una métrica basada en registros, que es una métrica personalizada en Cloud Monitoring a partir de entradas de registros. Las métricas basadas en registros son útiles para contabilizar el número de entradas de registro y hacer un seguimiento de la distribución de un valor en sus registros. En este caso, usarás la métrica basada en registros para contabilizar el número de errores en tu servicio de frontend. Puedes usar la métrica en los paneles y en las alertas.
- Vuelve a la consola de Cloud y desde el menú de navegación abre Logging, y haz clic en Explorador de registros (Logs Explorer).
- Habilita Mostrar consultas y en el cuadro Compilador de consultas agrega la siguiente consulta:
- Haz clic en Ejecutar consulta (Run Query).
La consulta que estás usando te permite encontrar todos los errores del Pod de frontend. De todos modos, no deberías ver ningún resultado por el momento, ya que aún no hay errores.
- Para crear las métricas basadas en registros, haz clic en Crear métrica (Create metric).
- Asigna el nombre Error_Rate_SLI a la métrica y haz clic en Crear métrica (Create metric) para guardar la métrica basada en registros:
Ahora puedes ver la métrica en la lista de métricas definidas por el usuario en la página de métricas basadas en registros.
Haz clic en Revisar mi progreso para verificar el objetivo.
Tarea 5: Crea una política de alertas
Las alertas permiten el reconocimiento oportuno de los problemas en tus aplicaciones de la nube, para que puedas resolverlos con rapidez. Ahora podrás usar Cloud Monitoring para supervisar tu disponibilidad de servicio de frontend creando una política de alertas en función de la métrica basada en registros de errores de frontend que creaste con anterioridad. Cuando se reúnen las condiciones de las políticas de alerta, Cloud Monitoring crea y muestra un incidente en la consola de Cloud.
-
En el menú de navegación, abre Monitoring, y haz clic en Alertas.
-
Luego de que el lugar de trabajo se haya creado, haz clic en Crear política (Create Policy) en la parte superior.
-
Haz clic en el menú desplegable Seleccionar una métrica (Select a metric). Inhabilita la opción Mostrar solo recursos y métricas activos (Show only active resources & metrics).
-
En el campo Filtrar por nombre de recurso y métrica (filter by resource and metric name), escribe Error_Rate.
-
Haz clic en Kubernetes Container > Métricas basadas en registros (Logs-based metrics). Selecciona logging/user/Error_Rate_SLI y haz clic en Aplicar (Apply).
En la pantalla deberías ver lo siguiente:
-
Configura la función de ventana progresiva en
Rate
. -
Haz clic en Siguiente.
-
Establece 0.5 como valor del umbral.
Como era de esperar, no se genera ningún error y tu aplicación cumple su objetivo de nivel de servicio (SLO) de disponibilidad.
-
Haz clic en Siguiente otra vez.
-
Inhabilita Usar el canal de notificaciones.
-
Proporciona un nombre de alerta como
Error Rate SLI
y haz clic en Siguiente. -
Revisa la alerta y haz clic en Crear política.
Haz clic en Revisar mi progreso para verificar el objetivo.
Activa un error de aplicación
Ahora usarás un generador de cargas para crear algo de tráfico para tu aplicación web. Como hay un error que se ingresó en forma intencional en esta versión de la aplicación, cierto volumen de tráfico activará errores. Trabajarás paso a paso para identificar y corregir el error.
-
Desde el Menú de navegación, selecciona Kubernetes Engine, y, luego Ingress y servicios (Services & Ingress).
-
Encuentra el servicio
loadgenerator-external
, luego haz clic en el vínculo deendpoints
.
Como alternativa, puedes abrir una ventana o pestaña nueva del navegador, y copiar y pegar la IP en el campo URL, por ejemplo: http://\[loadgenerator-external-ip\]
Ya deberías estar en la página de generador de carga Locust:
Locust es un generador de cargas de código abierto que te permite cargar una aplicación web de prueba. Puedes simular una cantidad determinada de usuarios que alcanza los extremos de tu aplicación de manera simultánea a una tasa determinada.
-
Simula 300 usuarios usando la app con una tasa de generación de 30. Locust agregará 30 usuarios por segundo hasta que alcance los 300 usuarios.
-
Para el campo de host, usarás
frontend-external
. Copia la URL de la página de Ingress y servicios, asegúrate de excluir el puerto. Por ejemplo:
- Haz clic en el botón Start swarming. Deberías tener cerca de 300 usuarios para alcanzar las URL predefinidas en pocos segundos.
- Haz clic en la pestaña Failures para ver los errores que comienzan a aparecer. Puedes ver que hay una gran cantidad del error 500.
Mientras tanto, si haces clic en algún producto de la página principal, verás que está muy lenta o que recibes errores como el siguiente si haces clic en un producto:
Confirma las alertas y los errores de aplicación
-
En la consola de Cloud, desde el Menú de navegación, haz clic en Monitoring y luego en Alertas (Alerting). Deberías ver un incidente de logging/user/Error_Rate_SLI. Si no ves un incidente en el momento, espera un minuto o dos y actualiza la página. Puede tomar hasta 5 minutos que la alerta se active.
-
Haz clic en el vínculo del incidente:
Esto te llevará a la página de detalles.
- Haz clic en el vínculo de VER REGISTROS (VIEW LOGS) para ver los registros del Pod.
- También puedes hacer clic en la etiqueta Error en el campo Logs para consultar solo los errores.
Como alternativa, puedes hacer clic en el campo de vista previa de búsquedas para ver el compilador de consultas, luego haz clic en Gravedad en el menú desplegable y agrega Error a la búsqueda. Haz clic en el botón Agregar y luego haz clic en Ejecutar consulta (Run Query). El menú desplegable permite agregar varios valores de intensidad.
El resultado agregará severity=ERROR
a tu consulta. Una vez que hayas hecho esto, debes tener todos los errores del Pod recommendationservice.
- Revisa los detalles de los errores expandiendo un evento de error. Por ejemplo:
-
Expande
textPayload
. -
Haz clic en el mensaje de error y elige Agregar campo a la línea de resumen (Add field to summary line) para que los mensajes de error aparezcan como un campo de resumen:
Desde ahí puedes confirmar que hay muchos errores del servicio para el servicio recommendationservice. Basado en los mensajes de error, parece que recommendationservice no se pudo conectar a algún servicio para conseguir productos o recomendaciones. De cualquier manera, aún no está claro cuál es la causa raíz de los errores.
Si vuelves a consultar el diagrama de arquitectura, recommendationservice provee una lista de recomendaciones del servicio de frontend. Sin embargo, tanto el servicio de frontend como el de recommendationservice invocan ProductCatalogService para la lista de productos.
Para el próximo paso, examinarás las métricas de la fuente más probable de los problemas, ProductCatalogService, en busca de anomalías. Sin embargo, puedes desglosar los registros para ver estadísticas.
Soluciona problemas con el panel y los registros de Kubernetes
-
Uno de los primeros lugares en donde puedes ver las métricas es en la sección Kubernetes Engine de la consola de Monitoring (Menú de navegación > Monitoring> Paneles > GKE).
-
Consulta la sección Cargas de trabajo (Workloads).
-
Navega hacia Kubernetes Engine > Cargas de trabajo (Workloads) > productcatalogservice. Puedes ver que el Pod del servicio falla y se reinicia de forma constante.
A continuación, observa si hay algo interesante en los registros.
Hay dos modos de llegar con facilidad a tus registros de contenedores:
- Haz clic en la pestaña Registros (Logs) para obtener una vista rápida de los registros más recientes. Luego, haz clic en el botón de vínculo externo en la esquina superior derecha del panel de registros para volver al Explorador de registros.
- En la página de resumen, haz clic en el vínculo Registros de contenedores (Container logs) de la página Detalles de la implementación.
Estás en la página Explorador de registros otra vez, ahora con una consulta predefinida filtrada de forma específica para los registros del contenedor que estuviste viendo en GKE.
Desde el visor de registros, tanto los mensajes de registro como el histograma muestran que el contenedor analiza en forma repetida el catálogo de productos en un corto período. Parece ser muy ineficiente.
En la parte inferior de los resultados de las consultas, puede haber un error de entorno de ejecución como el siguiente:
Esto podría ser la causa de que el Pod falle.
Para entender mejor la razón, busca el mensaje de registro en el código.
- En Cloud Shell, ejecuta el siguiente comando:
Tu resultado debería verse como el siguiente, que tiene el nombre del archivo fuente con un número de línea:
- Para ver el archivo fuente, haz clic en el botón Abrir editor (Open Editor) del menú de Cloud Shell y, luego, en Abrir en una ventana nueva. (Si ves el error No se puede cargar el editor de códigos porque las cookies de terceros no están habilitadas, haz clic en el ojo en la parte superior de la página de Chrome).
- Haz clic en el archivo
microservices-demo/src/productcatalogservice/server.go
, desplázate hasta la línea 237 y encontrarás los registros de método de readCatalogFile con este mensaje:
Con un poco más de esfuerzo puedes ver que la variable booleana reloadCatalog es verdadera y que el servicio vuelve a cargar y analizar el catálogo de productos cada vez que se lo invoca, lo que parece innecesario.
Si buscas en el código la variable reloadCatalog, puedes ver que está controlado por la variable de entorno ENABLE\_RELOAD
y escribe un mensaje de registro para su estado.
Revisa de nuevo los registros, agrega este mensaje a tu consulta y determina si hay alguna entrada existente.
- Vuelve a la pestaña donde tienes abierto el Explorador de registros y agrega la siguiente línea a la consulta:
La consulta completa en tu compilador de consultas será la siguiente:
- Haz clic en Ejecutar consulta una vez más y encontrarás el mensaje "Enable catalog reloading" en el registro contenedor. Esto confirma que la función de volver a cargar el catálogo está habilitada.
En este punto, puedes tener la certeza de que el error es causado por la sobrecarga de volver a cargar el catálogo en cada solicitud. Cuando aumentaste la carga, la sobrecarga hizo que el servicio falle y se genere el error.
Tarea 6. Corrige el problema y verifica el resultado
Sobre la base del código y en lo que ves en los registros, puedes intentar corregir el problema inhabilitando que el catálogo se vuelva a cargar. Ahora quitarás la variable de entorno ENABLE_RELOAD
del servicio de catálogo de productos. Una vez que realices los cambios de variante, puedes volver a implementar la aplicación y verificar que los cambios hayan solucionado el problema en cuestión.
-
Haz clic en el botón Abrir terminal para volver a la terminal de Cloud Shell si se ha cerrado.
-
Ejecuta el siguiente comando:
El resultado mostrará el número de línea de la variable de entorno en el archivo de manifiesto:
- Borra esas dos líneas para inhabilitar que se vuelva a cargar cuando ejecutes lo siguiente:
- Luego vuelve a aplicar el archivo de manifiesto:
Notarás que el productcatalogservice está configurado. Los demás servicios no han cambiado.
- Regresa a la página de detalles de la implementación (Menú de navegación > Kubernetes Engine > Cargas de trabajo > productcatalogservice), y espere hasta que el Pod se ejecute de manera exitosa. Espera de 2 a 3 minutos o hasta que puedas confirmar que dejó de fallar.
- Si haces clic en el vínculo de Registros de contenedores otra vez, verás que los mensajes repetidos de
successfully parsing the catalog json
(análisis exitoso de catálogo json) han desaparecido:
-
Si te diriges de nuevo a la URL de la app web y haces clic en los productos de la página principal, es mucho más responsiva y no deberías encontrar ningún error de HTTP.
-
Vuelve al generador de carga, haz clic en el botón Reset Stats en la parte superior derecha. El porcentaje de fallas se restablece y no deberías ver que se incremente más.
Todo lo anterior indica que el problema se corrigió. Si aún ves el error 500, espera unos minutos más e intenta hacer clic en un producto otra vez.
Felicitaciones
Usaste Cloud Logging y Cloud Monitoring para encontrar un error en una versión mal configurada de manera intencional de la app de demostración de microservicios. Este es un proceso de solución de problemas similar al que usarías para reducir problemas de tus aplicaciones de GKE en un entorno de producción.
Primero, implementaste la app en GKE y configuraste una métrica y una alerta para errores de frontend. Luego generaste una carga y notaste que la alerta se activaba. Desde la alerta, redujiste el problema a servicios particulares con Cloud Logging. Luego, usaste Cloud Monitoring y la IU de GKE para observar las métricas de los servicios GKE. Para solucionar el problema, luego implementaste una configuración actualizada en GKE y confirmaste que la corrección solucionaba los errores en los registros.
Finaliza la Quest
Este lab de autoaprendizaje forma parte de la Quest Google Cloud's Operations Suite on GKE. Una Quest es una serie de labs relacionados que forman una ruta de aprendizaje. Si completas esta Quest, obtendrás una insignia como reconocimiento por tu logro. Puedes hacer públicas tus insignias y agregar vínculos a ellas en tu currículum en línea o en tus cuentas de redes sociales. Inscríbete en esta Quest y obtén un crédito inmediato de realización. Consulta el catálogo de Google Cloud Skills Boost para ver todas las Quests disponibles.
Realiza tu próximo lab
Continúa tu Quest con Cloud Logging en Kubernetes Engine o consulta estas sugerencias:
- Cloud Operations para GKE
- Usa la herramienta de APM de Cloud Monitoring para solucionar problemas relacionados con la confiabilidad de sitios
Próximos pasos/Más información
- Este lab se basa en esta entrada de blog sobre cómo usar Logging para tus aplicaciones ejecutadas en GKE.
- La publicación de seguimiento sobre cómo los equipos de DevOps pueden usar Cloud Monitoring y Logging para detectar problemas con rapidez también puede ser de tu interés.
Capacitación y certificación de Google Cloud
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Última actualización del manual: 31 de julio de 2023
Prueba más reciente del lab: 31 de julio de 2023
Copyright 2024 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.