Habilitar el registro y la supervisión de la aplicación

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:

  1. 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.

  2. En spec, configura enableGMPForApplications como true:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      projectID: ...
      clusterName: ...
      clusterLocation: ...
      proxyConfigSecretName: ...
      enableGMPForApplications: true
      enableVPC: ...
      optimizedMetrics: true
    
  3. 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.

  4. 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:

  1. 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
    
  2. 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:

  1. En la consola de Google Cloud, ve a la página Monitoring o haz clic en el siguiente botón:

    Ir a Monitoring

  2. En el panel de navegación, selecciona Explorador de métricas.

  3. Usa el lenguaje de consulta de Prometheus (PromQL) para especificar los datos que se mostrarán en el gráfico:

    1. En la barra de herramientas del panel Seleccionar una métrica, selecciona Editor de código.

    2. 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.

    3. 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:

Gráfico de servicio administrado para Prometheus para la métrica “anthos_container_cpu_usage_seconds_total” de Prometheus.

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.

  1. 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.

  2. En la sección spec, configura enableCloudLoggingForApplications como true:

    apiVersion: addons.gke.io/v1alpha1
      kind: Stackdriver
      metadata:
        name: stackdriver
        namespace: kube-system
      spec:
        projectID: ...
        clusterName: ...
        clusterLocation: ...
        proxyConfigSecretName: ...
        enableCloudLoggingForApplications: true
        enableVPC: ...
        optimizedMetrics: true
    
  3. 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.

  1. 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
    
  2. Crea el objeto Deployment

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
    

Ver los registros de la aplicación

Consola

  1. Ve al Explorador de registros en la consola de Google Cloud.

    Ve al Explorador de registros.

  2. Haz clic en Recurso. En el menú TODOS LOS TIPOS DE RECURSOS, selecciona Contenedor de Kubernetes.

  3. En CLUSTER_NAME, selecciona el nombre de tu clúster de usuario.

  4. En NAMESPACE_NAME, selecciona predeterminado.

  5. Haz clic en Agregar y, luego, en Ejecutar consulta.

  6. 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

  1. 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.

  2. 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.

  1. Actualiza el archivo de configuración del clúster para establecer enableApplication en true:

    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
        ...
    
  2. 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.

  1. Guarda los siguientes manifiestos de Service y Deployment en un archivo llamado my-app.yaml. Ten en cuenta que el Service tiene la anotación prometheus.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
    
  2. Crea el Deployment y el Service:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
    

Ver los registros de la aplicación

Consola

  1. Ve al Explorador de registros en la consola de Google Cloud.

    Ve al Explorador de registros.

  2. Haz clic en Recurso. En TODOS LOS TIPOS DE RECURSOS, selecciona Contenedor de Kubernetes.

  3. En CLUSTER_NAME, selecciona el nombre de tu clúster de usuario.

  4. En NAMESPACE_NAME, selecciona predeterminado.

  5. Haz clic en Agregar y, luego, en Ejecutar consulta.

  6. 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

  1. 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.

  2. 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.

  1. Ve al Explorador de métricas en la consola de Google Cloud.

    Ir al Explorador de métricas

  2. En Tipo de recurso, selecciona Kubernetes Pod o Kubernetes Container.

  3. En métrica, selecciona external.googleapis.com/prometheus/example_monitoring_up.

  4. En el gráfico, puedes ver que example_monitoring_up tiene un valor repetido de 1.