En esta página, se muestra cómo configurar un clúster de usuario para Google Distributed Cloud, de modo que los registros y las métricas personalizados de las aplicaciones de usuario se envíen a Cloud Logging y Cloud Monitoring. Las métricas de las aplicaciones de los usuarios se recopilan con Google Cloud Managed Service para Prometheus.
Habilita el servicio administrado para Prometheus en las aplicaciones de los usuarios
La configuración del servicio administrado para Prometheus se conserva en un objeto de Stackdriver llamado stackdriver
.
Abre el objeto
stackdriver
para editarlo:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Reemplaza USER_CLUSTER_KUBECONFIG con la ruta de tu archivo kubeconfig del clúster de usuario.
En
spec
, configuraenableGMPForApplications
comotrue
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableGMPForApplications: true enableVPC: ... optimizedMetrics: true
Cierra el archivo editado. De esta manera, se comenzarán a ejecutar los componentes de Prometheus (GMP) administrados por Google en el clúster.
Para verificar los componentes, ejecuta el siguiente comando:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace gmp-system get pods
El resultado de este comando es similar al siguiente:
NAME READY STATUS RESTARTS AGE collector-abcde 2/2 Running 1 (5d18h ago) 5d18h collector-fghij 2/2 Running 1 (5d18h ago) 5d18h collector-klmno 2/2 Running 1 (5d18h ago) 5d18h gmp-operator-68d49656fc-abcde 1/1 Running 0 5d18h rule-evaluator-7c686485fc-fghij 2/2 Running 1 (5d18h ago) 5d18h
El servicio administrado para Prometheus admite la evaluación de reglas y las alertas. Para configurar la evaluación de reglas, consulta Evaluación de reglas.
Ejecuta una aplicación de ejemplo
En esta sección, crearás una aplicación que emita métricas de Prometheus y usarás Prometheus administrado por Google para recopilarlas. Si deseas obtener más información, consulta Google Cloud Managed Service para Prometheus.
Implementa la aplicación de ejemplo
Crea el espacio de nombres
gmp-test
para los recursos que crees como parte de la aplicación de ejemplo:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG create ns gmp-test
El servicio administrado proporciona un manifiesto para una aplicación de ejemplo que emite métricas de Prometheus en su puerto
metrics
. La aplicación usa tres réplicas.Para implementar la aplicación de ejemplo, ejecuta el siguiente comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml
Configura un recurso PodMonitoring
Para transferir los datos de métricas que emite la aplicación de ejemplo, usa la recopilación de objetivos. El servicio administrado usa recursos personalizados (CR) de PodMonitoring para configurar la recopilación de objetivos y la transferencia de métricas. Puedes convertir tus recursos de operador de Prometheus existentes en CR de PodMonitoring.
Un CR de PodMonitoring recopila objetivos solo en el espacio de nombres en el que se implementa el CR. Para recopilar objetivos en varios espacios de nombres, implementa el mismo CR de PodMonitoring en cada espacio de nombres. Para verificar que el recurso PodMonitoring esté instalado en el espacio de nombres deseado, ejecuta el siguiente comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get podmonitoring -A
A fin de obtener documentación de referencia sobre todos los servicios administrados para las CR de Prometheus, consulta la referencia de prometheus-engine/doc/api.
El siguiente manifiesto define un recurso PodMonitoring, prom-example
, en el espacio de nombres gmp-test
. El recurso encuentra todos los pods en el espacio de nombres que tienen la etiqueta app
con el valor prom-example
. Los Pods coincidentes se copian en un puerto llamado metrics
, cada 30 segundos, en la ruta HTTP /metrics
.
apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: prom-example spec: selector: matchLabels: app: prom-example endpoints: - port: metrics interval: 30s
Para aplicar este recurso, ejecuta el siguiente comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n gmp-test apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/pod-monitoring.yaml
El servicio administrado para Prometheus ahora recopila los Pods coincidentes.
Consulta datos de métricas
La forma más sencilla de verificar que se exporten los datos de Prometheus es usar consultas de PromQL en el Explorador de métricas en la consola de Google Cloud.
Para ejecutar una consulta de PromQL, haz lo siguiente:
En la consola de Google Cloud, ve a la página Monitoring o haz clic en el siguiente botón:
En el panel de navegación, selecciona Explorador de métricas.
Usa Prometheus Query Language (PromQL) para especificar los datos que se mostrarán en el gráfico:
En la barra de herramientas del panel Seleccionar una métrica, selecciona Editor de código.
Selecciona PromQL en el botón de activación Idioma. El botón de activación del idioma se encuentra en la parte inferior del panel Editor de código.
Ingresa tu consulta en el Editor de consultas. Por ejemplo, para graficar la cantidad promedio de segundos de CPU que se usaron en cada modo durante la última hora, usa la siguiente consulta:
avg(rate(kubernetes_io:anthos_container_cpu_usage_seconds_total {monitored_resource="k8s_node"}[1h]))
Para obtener más información sobre el uso de PromQL, consulta PromQL en Cloud Monitoring.
En la siguiente captura de pantalla, se muestra un gráfico con la métrica anthos_container_cpu_usage_seconds_total
:
Si recopilas muchos datos, es posible que desees filtrar las métricas exportadas para mantener los costos bajos.
Habilita Cloud Logging para aplicaciones de usuario
La configuración de Logging se mantiene en un objeto de Stackdriver llamado Stackdriver.
Abre el objeto
stackdriver
para editarlo:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Reemplaza USER_CLUSTER_KUBECONFIG con la ruta de tu archivo kubeconfig del clúster de usuario.
En
spec
, configuraenableCloudLoggingForApplications
comotrue
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableCloudLoggingForApplications: true enableVPC: ... optimizedMetrics: true
Cierra el archivo editado.
Ejecuta una aplicación de ejemplo
En esta sección, crearás una aplicación que escriba registros personalizados.
Guarda el siguiente manifiesto de Gateway en un archivo llamado
my-app.yaml
.apiVersion: apps/v1 kind: Deployment metadata: name: "monitoring-example" namespace: "default" labels: app: "monitoring-example" spec: replicas: 1 selector: matchLabels: app: "monitoring-example" template: metadata: labels: app: "monitoring-example" spec: containers: - image: gcr.io/google-samples/prometheus-dummy-exporter:latest name: prometheus-example-exporter imagePullPolicy: Always command: - /bin/sh - -c - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090 resources: requests: cpu: 100m
Crea el Deployment:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
Ve registros de aplicaciones
Console
Ve al Explorador de registros en la consola de Google Cloud.
Haz clic en Recurso. En ALL_RESOURCE_TYPES, selecciona
Kubernetes Container
.En CLUSTER_NAME, selecciona el nombre de tu clúster de usuario.
En NAMESPACE_NAME, selecciona
default
.Haz clic en Agregar y, luego, en Ejecutar consulta.
En Resultados de la consulta, puedes ver las entradas de registro del Deployment
monitoring-example
. Por ejemplo:{ "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n", "insertId": "1oa4vhg3qfxidt", "resource": { "type": "k8s_container", "labels": { "pod_name": "monitoring-example-7685d96496-xqfsf", "cluster_name": ..., "namespace_name": "default", "project_id": ..., "location": "us-west1", "container_name": "prometheus-example-exporter" } }, "timestamp": "2020-11-14T01:24:24.358600252Z", "labels": { "k8s-pod/pod-template-hash": "7685d96496", "k8s-pod/app": "monitoring-example" }, "logName": "projects/.../logs/stdout", "receiveTimestamp": "2020-11-14T01:24:39.562864735Z" }
gcloud
Ejecuta este comando:
gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \ resource.type="k8s_container" AND resource.labels.namespace_name="default"'
Reemplaza PROJECT_ID con el ID de tu proyecto de registro y supervisión.
En el resultado, puedes ver las entradas de registro del Deployment
monitoring-example
. Por ejemplo:insertId: 1oa4vhg3qfxidt labels: k8s-pod/app: monitoring-example k8s- pod/pod-template-hash: 7685d96496 logName: projects/.../logs/stdout receiveTimestamp: '2020-11-14T01:24:39.562864735Z' resource: labels: cluster_name: ... container_name: prometheus-example-exporter location: us-west1 namespace_name: default pod_name: monitoring-example-7685d96496-xqfsf project_id: ... type: k8s_container textPayload: | 2020/11/14 01:24:24 Starting to listen on :9090 timestamp: '2020-11-14T01:24:24.358600252Z'
Filtrar registros de aplicaciones
El filtrado de registros de aplicaciones puede reducir la facturación del registro de aplicaciones y el tráfico de red del clúster a Cloud Logging. A partir de la versión 1.15.0 de Google Distributed Cloud, cuando enableCloudLoggingForApplications
se establece en true
, puedes filtrar los registros de aplicaciones según los siguientes criterios:
- Etiquetas de Pod (
podLabelSelectors
) - Espacios de nombres (
namespaces
) - Expresiones regulares para el contenido del registro (
contentRegexes
)
Google Distributed Cloud envía solo los resultados del filtro a Cloud Logging.
Define filtros de registro de la aplicación
La configuración de Logging se especifica en un objeto de Stackdriver llamado stackdriver
.
Abre el objeto
stackdriver
para editarlo:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ edit stackdriver stackdriver
Reemplaza USER_CLUSTER_KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster de usuario.
Agrega una sección
appLogFilter
aspec
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: enableCloudLoggingForApplications: true projectID: ... clusterName: ... clusterLocation: ... appLogFilter: keepLogRules: - namespaces: - prod ruleName: include-prod-logs dropLogRules: - podLabelSelectors: - disableGCPLogging=yes ruleName: drop-logs
Guarda y cierra el archivo editado.
Si usas
podLabelSelectors
, reinicia el DaemonSetstackdriver-log-forwarder
para aplicar los cambios lo antes posible (opcional):kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system \ rollout restart daemonset stackdriver-log-forwarder
Por lo general, las
podLabelSelectors
son eficaces después de 10 minutos. Reiniciar el DaemonSetstackdriver-log-forwarder
hace que los cambios se apliquen más rápido.
Ejemplo: Incluye registros ERROR
o WARN
solo en el espacio de nombres prod
En el siguiente ejemplo, se ilustra el funcionamiento de un filtro de registro de la aplicación. Debes definir un filtro que use un espacio de nombres (prod
), una expresión regular (.*(ERROR|WARN).*
) y una etiqueta de Pod (disableGCPLogging=yes
). Luego, para verificar que el filtro funcione, ejecuta un Pod en el espacio de nombres prod
para probar estas condiciones del filtro.
Para definir y probar un filtro de registro de la aplicación, haz lo siguiente:
Especifica un filtro de registro de aplicación en el objeto de Stackdriver:
En el siguiente ejemplo de
appLogFilter
, solo se conservan los registrosERROR
oWARN
en el espacio de nombresprod
. Se descarta cualquier registro de Pods con la etiquetadisableGCPLogging=yes
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: ... appLogFilter: keepLogRules: - namespaces: - prod contentRegexes: - ".*(ERROR|WARN).*" ruleName: include-prod-logs dropLogRules: - podLabelSelectors: - disableGCPLogging=yes # kubectl label pods pod disableGCPLogging=yes ruleName: drop-logs ...
Implementa un Pod en el espacio de nombres
prod
y ejecuta una secuencia de comandos que genere entradas de registroERROR
yINFO
:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG run pod1 \ --image gcr.io/cloud-marketplace-containers/google/debian10:latest \ --namespace prod --restart Never --command -- \ /bin/sh -c "while true; do echo 'ERROR is 404\\nINFO is not 404' && sleep 1; done"
Los registros filtrados solo deben contener las entradas
ERROR
, no las entradasINFO
.Agrega la etiqueta
disableGCPLogging=yes
al Pod:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG label pods pod1 \ --namespace prod disableGCPLogging=yes
El registro filtrado ya no debe contener ninguna entrada para el Pod
pod1
.
Definición de la API de filtro de registro de la aplicación
La definición del filtro de registro de la aplicación se declara dentro de la definición de recursos personalizados de Stackdriver.
Para obtener la definición de recurso personalizado de Stackdriver, ejecuta el siguiente comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get crd stackdrivers.addons.gke.io \
--namespace kube-system -o yaml