Usa Prometheus

Prometheus es una herramienta de supervisión opcional que se suele usar con Kubernetes. Si configuras Stackdriver Kubernetes Monitoring con la asistencia de Prometheus, los servicios que exponen las métricas en el modelo de datos de Prometheus se pueden exportar desde el clúster y hacer visibles como métricas externas en Stackdriver.

En esta página, se muestra un mecanismo para que Stackdriver recopile datos de los clientes de Prometheus que trabajan con Stackdriver Kubernetes Monitoring. El código fuente para la integración está disponible de forma pública.

Antes de comenzar

  • Debes ser propietario del proyecto que contiene tu clúster. Para obtener más información sobre los privilegios de propietario, consulta los tipos de funciones de IAM.

  • Ya debes tener Stackdriver Kubernetes Monitoring instalado en tu clúster. Para obtener instrucciones, consulta Instala Stackdriver Kubernetes Monitoring.

  • Debes ejecutar un servidor de Prometheus y tenerlo configurado para que supervise las aplicaciones en tu clúster. Consulta la matriz de compatibilidad.

La asistencia de Prometheus que se describe aquí no es compatible con la asistencia heredada de Stackdriver que se describe en Monitoring.

Configuración

Stackdriver proporciona un colector que se debe implementar como un archivo adicional en el mismo pod de Kubernetes como un servidor Prometheus en funcionamiento.

Usa los siguientes comandos de shell para instalar el colector de Stackdriver en un clúster nuevo con Stackdriver Kubernetes Monitoring. Si quieres aprender más sobre cómo instalar Prometheus en tu clúster, revisa la guía de introducción de Prometheus. Para obtener más información sobre cómo agregar el archivo adicional a una configuración de servidor de Prometheus existente, consulta la siguiente sección sobre Personalización.

Accede a tu clúster y ejecuta la siguiente secuencia de comandos con las variables de entorno necesarias:

  • KUBE_NAMESPACE: Espacio de nombres para que la secuencia de comandos se ejecute.
  • KUBE_CLUSTER: Parámetro de nombre de clúster para el archivo adicional.
  • GCP_REGION: Parámetro de la región de GCP para el archivo adicional.
  • GCP_PROJECT: Parámetro del proyecto de GCP para el archivo adicional.
  • DATA_DIR: Directorio de datos para el archivo adicional.
  • DATA_VOLUME: Nombre del volumen que contiene datos de Prometheus.
  • SIDECAR_IMAGE_TAG: Versión de imagen de Docker para el archivo adicional. Te recomendamos usar la versión más reciente de Container Registry.
#!/bin/sh

set -e
set -u

usage() {
  echo -e "Usage: $0 <deployment|statefulset> <name>\n"
}

if [  $# -le 1 ]; then
  usage
  exit 1
fi

kubectl -n "${KUBE_NAMESPACE}" patch "$1" "$2" --type strategic --patch "
spec:
  template:
    spec:
      containers:
      - name: sidecar
        image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:${SIDECAR_IMAGE_TAG}
        imagePullPolicy: Always
        args:
        - \"--stackdriver.project-id=${GCP_PROJECT}\"
        - \"--prometheus.wal-directory=${DATA_DIR}/wal\"
        - \"--stackdriver.kubernetes.location=${GCP_REGION}\"
        - \"--stackdriver.kubernetes.cluster-name=${KUBE_CLUSTER}\"
        #- \"--stackdriver.generic.location=${GCP_REGION}\"
        #- \"--stackdriver.generic.namespace=${KUBE_CLUSTER}\"
        ports:
        - name: sidecar
          containerPort: 9091
        volumeMounts:
        - name: ${DATA_VOLUME}
          mountPath: ${DATA_DIR}
"

Valida la configuración

Después de configurar Prometheus, ejecuta el siguiente comando para validar la instalación:

kubectl get deployment,service -n stackdriver

El resultado de este comando mostrará que la implementación de prometheus esté disponible y el servicio esté implementado:

NAME                                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.extensions/prometheus-meta   1         1         1            0           28s

NAME                      TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
service/prometheus-meta   LoadBalancer   10.51.240.103   <pending>     9090:32387/TCP,9091:30182/TCP   28s

El software de Prometheus que instalaste está preconfigurado para comenzar a exportar métricas a Monitoring como métricas externas. Las puedes ver en Stackdriver > Recursos > Explorador de métricas:

IR A EXPLORADOR DE MÉTRICAS

Busca en el tipo de recurso supervisado Contenedor de Kubernetes (k8s_container) las métricas llamadas external/prometheus/.... Una métrica que debería tener algunos datos interesantes es external/prometheus/go_memstats_alloc_bytes. Si tienes más de un clúster en tu lugar de trabajo, es posible que desees filtrar el gráfico en el nombre del clúster, como se muestra en la siguiente captura de pantalla:

Gráfico de Prometheus

Personalización

Si deseas que Stackdriver recopile datos de una implementación existente del servidor de Prometheus, puedes ejecutar el colector de Stackdriver como un archivo adicional en el mismo pod que el servidor de Prometheus:

  1. Asegúrate de que el servidor de Prometheus escriba en un volumen compartido:

    • Asegúrate de que haya un volumen compartido en el pod de Prometheus:

      volumes:
        - name: data-volume
          emptyDir: {}
      
    • Haz que Prometheus active el volumen abajo de /data:

      volumeMounts:
      - name: data-volume
        mountPath: /data
      
    • Indica al servidor de Prometheus que escriba el volumen compartido en /data. Agrega lo siguiente a su contenedor args:

      --storage.tsdb.path=/data
      
  2. Agrega el contenedor colector como un archivo adicional.

    - name: sidecar
      image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:[SIDECAR_IMAGE_TAG]
      args:
      - "--stackdriver.project-id=[PROJECT_ID]"
      - "--prometheus.wal-directory=/data/wal"
      - "--stackdriver.kubernetes.location=[CLUSTER_LOCATION]"
      - "--stackdriver.kubernetes.cluster-name=[CLUSTER_NAME]"
      ports:
      - name: sidecar
        containerPort: 9091
      volumeMounts:
      - name: data-volume
        mountPath: /data
    

Para obtener información adicional sobre cómo configurar el colector, consulta la documentación del archivo adicional de Stackdriver Prometheus.

Problemas de integración de Prometheus

Estoy seguro de que vi algunos tipos de métricas de Prometheus antes, pero ahora no los encuentro.

El software de Prometheus que instalaste está preconfigurado para exportar métricas a Stackdriver Monitoring como métricas externas. Cuando se exportan los datos, Monitoring crea el descriptor de métrica apropiado para la métrica externa. Si posteriormente no se escriben datos de ese tipo de métrica durante al menos 6 semanas, el descriptor de la métrica está sujeto a eliminación.

No garantizamos que los descriptores de métricas no usados se borren después de 6 semanas, pero Monitoring se reserva el derecho de borrar cualquier descriptor de métricas de Prometheus que no se haya usado en las 6 semanas anteriores.

A mis métricas les faltan las etiquetas de Prometheus instance y job.

Las etiquetas de instancia y trabajo de Prometheus pueden aparecer en el recurso supervisado de Stackdriver asociado con los datos de métrica con otros nombres. Si necesitas cambiar esto, busca la sección write_relabel_config en la configuración predeterminada.

La métrica up no tiene datos cuando el extremo no está activo.

Esta es una desviación del comportamiento típico de Prometheus. Si confías en esta métrica para las alertas, puedes usar la condición de alerta de ausencia de métricas en tu política de alertas de Stackdriver.

Hicimos este cambio para evitar otros problemas descritos con más detalles en el problema de series temporales duplicadas.

Modifiqué la configuración predeterminada y los elementos dejaron de funcionar.

El colector de Stackdriver Prometheus genera un objeto MonitoredResource de Stackdriver para tus objetos de Kubernetes a partir de las etiquetas conocidas de Prometheus. Si accidentalmente cambias los descriptores de etiqueta, el colector no podrá escribir las métricas en Stackdriver.

Veo errores de "serie temporal duplicada" o de "escrituras desordenadas" en los registros.

Estos errores se pueden producir por escribir datos de métrica dos veces en las mismas series temporales. Pueden ocurrir si tus extremos de Prometheus exponen los mismos datos de métrica (el mismo conjunto de valores de etiquetas de métricas) dos veces desde un solo recurso supervisado por Stackdriver.

Por ejemplo, un contenedor de Kubernetes podría exponer métricas de Kubernetes en varios puertos. Desde que el recurso supervisado k8s_container de Stackdriver no diferencia recursos según el puerto, Stackdriver detecta que estás escribiendo dos puntos en la misma serie temporal. Una solución alternativa es agregar una etiqueta de métrica en Prometheus que diferencie la serie temporal. Por ejemplo, puedes usar la etiqueta __meta_kubernetes_pod_annotation_prometheus_io_port, porque debe permanecer constante en todos los reinicios de contenedores.

Veo errores de "el tipo de métrica debe ser X, pero es Y" en los registros.

Estos errores se pueden causar por cambiar el tipo de métrica de Prometheus en el código fuente entre el indicador, el contador y otros. Las métricas de Stackdriver están rigurosamente escritas y Stackdriver las aplica de manera estricta, porque la semántica de los datos varía según el tipo.

Si deseas cambiar un tipo de métrica, debes borrar los descriptores de métrica correspondientes, lo que hará que los datos de las series temporales existentes sean inaccesibles.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Stackdriver Monitoring
Si necesitas ayuda, visita nuestra página de asistencia.