En esta página, se muestra cómo configurar un clúster para clústeres de Anthos en equipos físicos a fin de que los registros y métricas personalizados de las aplicaciones de usuario se envíen a Cloud Logging y Cloud Monitoring y al servicio administrado para Prometheus.
Habilita el servicio administrado para Prometheus
La configuración del servicio administrado para Prometheus se especifica en un objeto Stackdriver
llamado stackdriver
. Si deseas obtener información adicional, incluidas las prácticas recomendadas y la solución de problemas, consulta la documentación del servicio administrado para Prometheus.
Si deseas configurar el objeto stackdriver
a fin de habilitar el servicio administrado de Google Cloud para Prometheus, haz lo siguiente:
Abre el objeto de Stackdriver para editarlo:
kubectl --kubeconfig=CLUSTER_KUBECONFIG \ --namespace kube-system edit stackdriver stackdriver
Reemplaza
CLUSTER_KUBECONFIG
por la ruta del archivo kubeconfig del clúster de administrador.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
Guarda y cierra el archivo editado.
Los componentes de Prometheus administrados por Google comienzan de forma automática en el clúster en el espacio de nombres
gmp-system
.Verifica los componentes de Prometheus administrados por Google:
kubectl --kubeconfig=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
El servicio administrado proporciona un manifiesto para una aplicación de ejemplo, prom-example
, que emite métricas de Prometheus en su puerto metrics
. La aplicación usa tres réplicas.
Para implementar la aplicación, haz lo siguiente:
Crea el espacio de nombres
gmp-test
para los recursos que crees como parte de la aplicación de ejemplo:kubectl --kubeconfig=CLUSTER_KUBECONFIG create ns gmp-test
Aplica el manifiesto de la aplicación con el siguiente comando:
kubectl -n gmp-test apply \ -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml
Configura un recurso PodMonitoring
En esta sección, configurarás un recurso personalizado PodMonitoring
para capturar los datos de métricas emitidos por la aplicación de ejemplo y enviarlos al servicio administrado para Prometheus. El recurso personalizado PodMonitoring
usa la extracción de datos objetivo. En este caso, los agentes de colector extraen el extremo /metrics
al que la aplicación de muestra emite datos.
Un recurso personalizado PodMonitoring
recopila objetivos en el espacio de nombres en el que se implementa solamente. Para recopilar objetivos en varios espacios de nombres, implementa el mismo
recurso personalizado PodMonitoring
en cada espacio de nombres. Para verificar que el recurso PodMonitoring
esté instalado en el espacio de nombres previsto, ejecuta el siguiente comando:
kubectl --kubeconfig CLUSTER_KUBECONFIG get podmonitoring -A
Para ver la documentación de referencia sobre todos los servicios personalizados de los servicios administrados 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 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 los datos de Prometheus se exporten es usar consultas de PromQL en el Explorador de métricas de Google Cloud Console.
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 el lenguaje de consulta de Prometheus (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 de idiomas 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 grandes cantidades de datos, te recomendamos filtrar las métricas exportadas para mantener los costos bajos.
Habilita Cloud Logging para aplicaciones de usuario
La configuración de Cloud Logging y Cloud Monitoring se conserva en un objeto de Stackdriver llamado stackdriver
.
Abre el objeto de Stackdriver para editarlo:
kubectl --kubeconfig=CLUSTER_KUBECONFIG \ --namespace kube-system edit stackdriver stackdriver
Reemplaza
CLUSTER_KUBECONFIG
con la ruta de tu archivo kubeconfig del clúster de usuario.En la sección
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
Guarda y cierra el archivo editado.
Ejecuta una aplicación de ejemplo
En esta sección, crearás una aplicación que escriba registros personalizados.
Guarda los siguientes manifiestos de Gateway en un archivo llamados
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 objeto Deployment
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
Ver los registros de la aplicación
Consola
Ve al Explorador de registros en la consola de Google Cloud.
Haz clic en Recurso. En el menú TODOS LOS TIPOS DE RECURSOS, selecciona Contenedor de Kubernetes.
En CLUSTER_NAME, selecciona el nombre de tu clúster de usuario.
En NAMESPACE_NAME, selecciona predeterminado.
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" }
CLI de 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
por el ID de tu proyecto.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'
Habilita Logging y Monitoring para aplicaciones de usuario (heredada)
Ten en cuenta que se recomienda usar enableGMPForApplications
y enableCloudLoggingForApplications
para habilitar la supervisión y el registro de las aplicaciones de los usuarios.
Los siguientes pasos siguen funcionando, pero no se recomiendan. Lee este problema conocido antes de seguir los pasos que se indican a continuación.
A fin de habilitar Logging y Monitoring para tus aplicaciones, usa el campo spec.clusterOperations.enableApplication
en el archivo de configuración del clúster.
Actualiza el archivo de configuración del clúster para establecer
enableApplication
entrue
:apiVersion: v1 kind: Namespace metadata: name: cluster-user-basic --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-basic namespace: cluster-user-basic spec: type: user ... clusterOperations: projectID: project-fleet location: us-central1 enableApplication: true ...
Usa
bmctl update
para aplicar los cambios:bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=ADMIN_KUBECONFIG
Reemplaza lo siguiente:
CLUSTER_NAME
: el nombre del clúster que se actualizaráADMIN_KUBECONFIG
es la ruta al archivo kubeconfig del clúster de administrador.
Anota las cargas de trabajo
Para habilitar la recopilación de métricas personalizadas de una aplicación, agrega la anotación prometheus.io/scrape: "true"
al manifiesto de servicio o Pod de la aplicación, o bien agrega la misma anotación a la sección spec.template
en el manifiesto de Deployment o DaemonSet para pasarlo a sus Pods.
Ejecuta una aplicación de ejemplo
En esta sección, crearás una aplicación que escriba registros personalizados y exponga una métrica personalizada.
Guarda los siguientes manifiestos de Service y Deployment en un archivo llamado
my-app.yaml
. Ten en cuenta que el Service tiene la anotaciónprometheus.io/scrape: "true"
:kind: Service apiVersion: v1 metadata: name: "monitoring-example" namespace: "default" annotations: prometheus.io/scrape: "true" spec: selector: app: "monitoring-example" ports: - name: http port: 9090 --- 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 y el Service:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
Ver los registros de la aplicación
Consola
Ve al Explorador de registros en la consola de Google Cloud.
Haz clic en Recurso. En TODOS LOS TIPOS DE RECURSOS, selecciona Contenedor de Kubernetes.
En CLUSTER_NAME, selecciona el nombre de tu clúster de usuario.
En NAMESPACE_NAME, selecciona predeterminado.
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" }
CLI de 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
por el ID de tu proyecto.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'
Ve las métricas de la aplicación en la consola de Google Cloud
Tu aplicación de ejemplo expone una métrica personalizada llamada example_monitoring_up
.
Puedes ver los valores de esa métrica en la consola de Google Cloud.
Ve al Explorador de métricas en la consola de Google Cloud.
En Tipo de recurso, selecciona
Kubernetes Pod
oKubernetes Container
.En métrica, selecciona
external.googleapis.com/prometheus/example_monitoring_up
.En el gráfico, puedes ver que
example_monitoring_up
tiene un valor repetido de 1.