En esta página se explica cómo exportar registros y métricas de un clúster adjunto a Cloud Logging y Cloud Monitoring.
Cómo funciona
Google Cloud Observability es la solución de observabilidad integrada deGoogle Cloud. Para exportar la telemetría a nivel de clúster de un clúster adjunto a Google Cloud, debes implementar los siguientes agentes de exportación de código abierto en tu clúster:
- Agregador de registros de Stackdriver (stackdriver-log-aggregator-*): un StatefulSet de Fluentd que envía registros a la API de Cloud Logging (antes Stackdriver Logging).
- Stackdriver Log Forwarder (stackdriver-log-forwarder-*): un daemonset de Fluentbit que reenvía los registros de cada nodo de Kubernetes al agregador de registros de Stackdriver.
- Recogedor de métricas de Stackdriver (stackdriver-prometheus-k8s-*): un StatefulSet de Prometheus configurado con un contenedor sidecar de exportación de Stackdriver para enviar métricas de Prometheus a la API de Cloud Monitoring (antes Stackdriver Monitoring). El sidecar es otro contenedor que se encuentra en el mismo pod y que lee las métricas que el servidor de Prometheus almacena en el disco y las reenvía a la API de Cloud Monitoring.
Requisitos previos
Un Google Cloud proyecto con la facturación habilitada. Consulta nuestra guía de precios para obtener información sobre los costes de Cloud Operations.
Un clúster adjunto registrado siguiendo esta guía. Ejecuta el siguiente comando para verificar que tu clúster está registrado.
gcloud container fleet memberships list
Ejemplo:
NAME EXTERNAL_ID eks ae7b76b8-7922-42e9-89cd-e46bb8c4ffe4
Un entorno local desde el que puedes acceder a tu clúster y ejecutar comandos
kubectl
. Consulta la guía de inicio rápido de GKE para obtener instrucciones sobre cómo instalarkubectl
mediante gcloud. Ejecuta el siguiente comando para verificar que puedes acceder al clúster adjunto mediantekubectl
.kubectl cluster-info
Ejemplo:
Kubernetes master is running at https://[redacted].gr7.us-east-2.eks.amazonaws.com
Configuración
Clona el repositorio de muestra y ve al directorio de esta guía.
git clone https://github.com/GoogleCloudPlatform/anthos-samples cd anthos-samples/attached-logging-monitoring
Asigna a la variable de ID de proyecto el proyecto en el que has registrado tu clúster.
PROJECT_ID="your-project-id"
Crea una Google Cloud cuenta de servicio con permisos para escribir métricas y registros en las APIs Cloud Monitoring y Cloud Logging. Añadirás la clave de esta cuenta de servicio a las cargas de trabajo implementadas en la siguiente sección.
gcloud iam service-accounts create anthos-lm-forwarder gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com" \ --role=roles/monitoring.metricWriter
Crea y descarga una clave JSON para la cuenta de servicio que acabas de crear y, a continuación, crea un secreto de Kubernetes en tu clúster con esa clave.
gcloud iam service-accounts keys create credentials.json \ --iam-account anthos-lm-forwarder@${PROJECT_ID}.iam.gserviceaccount.com kubectl create secret generic google-cloud-credentials -n kube-system --from-file credentials.json
Instalar el agente de registro
Cambia al directorio
logging/
.cd logging/
Abre
aggregator.yaml
. En la parte inferior del archivo, asigna a las siguientes variables el valor correspondiente a tu proyecto y clúster:project_id [PROJECT_ID] k8s_cluster_name [CLUSTER_NAME] k8s_cluster_location [CLUSTER_LOCATION]
Para encontrar la ubicación de tu clúster, ejecuta el siguiente comando con el nombre de miembro del clúster adjunto y obtén la ubicación que aparece en
/locations/<location>
.gcloud container fleet memberships describe eks | grep name
Resultado:
name: projects/my-project/locations/global/memberships/eks
En
aggregator.yaml
, envolumeClaimTemplates/spec
, especifica elstorageClassName
PersistentVolumeClaim de tu clúster. Hemos proporcionado valores predeterminados para EKS y AKS que puedes descomentar según corresponda. Si usas EKS, esta es lagp2
. En el caso de AKS, esdefault
.Si has configurado una clase de almacenamiento de Kubernetes personalizada en AWS o Azure, quieres usar una clase de almacenamiento que no sea la predeterminada o estás usando otro tipo de clúster conforme, puedes añadir tu propio
storageClassName
. ElstorageClassName
adecuado se basa en el tipo de PersistentVolume (PV) que ha aprovisionado un administrador para el clúster medianteStorageClass
. Puedes consultar más información sobre las clases de almacenamiento y las clases de almacenamiento predeterminadas de otros proveedores importantes de Kubernetes en la documentación de Kubernetes.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Despliega el agregador y el reenviador de registros en el clúster.
kubectl apply -f aggregator.yaml kubectl apply -f forwarder.yaml
Verifica que los pods se hayan iniciado. Deberías ver dos pods de agregador y un pod de reenvío por cada nodo de trabajador de Kubernetes. Por ejemplo, en un clúster de 4 nodos, deberías ver 4 pods de reenvío.
kubectl get pods -n kube-system | grep stackdriver-log
Resultado:
stackdriver-log-aggregator-0 1/1 Running 0 139m stackdriver-log-aggregator-1 1/1 Running 0 139m stackdriver-log-forwarder-2vlxb 1/1 Running 0 139m stackdriver-log-forwarder-dwgb7 1/1 Running 0 139m stackdriver-log-forwarder-rfrdk 1/1 Running 0 139m stackdriver-log-forwarder-sqz7b 1/1 Running 0 139m
Obtén los registros del agregador y verifica que se envían a Google Cloud.
kubectl logs stackdriver-log-aggregator-0 -n kube-system
Resultado:
2020-10-12 14:35:40 +0000 [info]: #3 [google_cloud] Successfully sent gRPC to Stackdriver Logging API.
Despliega una aplicación de prueba en tu clúster. Se trata de un servidor web HTTP básico con un generador de carga.
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
Comprueba que puedes ver los registros de tu clúster adjunto en el panel de control de Cloud Logging. Ve al Explorador de registros de la Google Cloud consola:
En Explorador de registros, copia la consulta de ejemplo que aparece a continuación en el campo Generador de consultas y sustituye
${your-cluster-name}
por el nombre de tu clúster. Haz clic en Ejecutar consulta. Deberías ver los registros recientes del clúster en Resultados de la consulta.resource.type="k8s_container" resource.labels.cluster_name="${your-cluster-name}"
Instalar el agente de monitorización
Sal del directorio
logging/
y ve al directoriomonitoring/
.cd ../monitoring
Abre
prometheus.yaml
. Enstackdriver-prometheus-sidecar/args
, define las siguientes variables para que coincidan con tu entorno."--stackdriver.project-id=[PROJECT_ID]" "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]" "--stackdriver.generic.location=[CLUSTER_LOCATION]" "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
En prometheus.yaml, en
volumeClaimTemplates/spec
, descomenta elstorageClassName
que coincida con tu proveedor de nube, tal como se describe en Instalar el agente de registro.# storageClassName: standard #Google Cloud # storageClassName: gp2 #AWS EKS # storageClassName: default #Azure AKS
Despliega el StatefulSet stackdriver-prometheus, configurado con el sidecar del exportador, en tu clúster.
kubectl apply -f server-configmap.yaml kubectl apply -f sidecar-configmap.yaml kubectl apply -f prometheus.yaml
Comprueba que el pod
stackdriver-prometheus
se esté ejecutando. Resultado:watch kubectl get pods -n kube-system | grep stackdriver-prometheus
stackdriver-prometheus-k8s-0 2/2 Running 0 5h24m
Obtén los registros del contenedor sidecar de Stackdriver Prometheus para verificar que el pod se ha iniciado.
Resultado:kubectl logs stackdriver-prometheus-k8s-0 -n kube-system stackdriver-prometheus-sidecar
level=info ts=2020-11-18T21:37:24.819Z caller=main.go:598 msg="Web server started" level=info ts=2020-11-18T21:37:24.819Z caller=main.go:579 msg="Stackdriver client started"
Verifica que las métricas del clúster se exportan correctamente a Cloud Monitoring. Ve a Explorador de métricas en la Google Cloud consola:
Haz clic en Editor de consultas y, a continuación, copia el siguiente comando. Sustituye
${your-project-id}
y${your-cluster-name}
por la información de tu proyecto y clúster. A continuación, haz clic en Ejecutar consulta. Deberías ver1.0.
fetch k8s_container | metric 'kubernetes.io/anthos/up' | filter resource.project_id == '${your-project-id}' && (resource.cluster_name =='${your-cluster-name}') | group_by 1m, [value_up_mean: mean(value.up)] | every 1m
Limpieza
Para eliminar todos los recursos creados en esta guía, sigue estos pasos:
kubectl delete -f logging kubectl delete -f monitoring kubectl delete secret google-cloud-credentials -n kube-system kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml rm -r credentials.json gcloud compute service-accounts delete anthos-lm-forwarder
Siguientes pasos
Consulta información sobre Cloud Logging:
- Resumen de Cloud Logging
- Usar el Explorador de registros
- Crear consultas para Cloud Logging
- Crear métricas basadas en registros