Compartir a través de


Creación y validación del archivo de configuración personalizado para métricas de Prometheus en Azure Monitor

Además de los destinos de extracción predeterminados que el agente de Prometheus de Azure Monitor extrae de forma predeterminada, siga estos pasos para proporcionar una configuración de extracción adicional al agente mediante un ConfigMap. El agente de Prometheus de Azure Monitor no entiende ni procesa los CRD de operador para la configuración de la extracción, sino que usa la configuración nativa de Prometheus tal como se define en la configuración de Prometheus.

Los tres ConfigMap que se pueden usar para la extracción de destinos personalizados son:

  • ama-metrics-prometheus-config (recomendado): cuando se crea un ConfigMap con este nombre, los trabajos de extracción definidos en él se ejecutan desde el pod de réplica de métricas de Azure Monitor que se ejecuta en el clúster.
  • ama-metrics-prometheus-config-node (avanzado): cuando se crea un ConfigMap con este nombre, los trabajos de extracción definidos en él se ejecutan desde cada pod de DaemonSet de Linux que se ejecuta en el clúster. Para obtener más información, consulte la Configuración avanzada.
  • ama-metrics-prometheus-config-node-windows (avanzado): cuando se crea un ConfigMap con este nombre, los trabajos de extracción definidos en él se ejecutan desde cada DaemonSet de Windows. Para obtener más información, consulte la Configuración avanzada.

Creación de un archivo de configuración de Prometheus

Una manera más sencilla de crear trabajos de configuración de extracción de Prometheus:

  • Paso 1: Use un archivo de configuración (yaml) para crear o definir trabajos de extracción
  • Paso 2: Valide el archivo de configuración de extracción mediante una herramienta personalizada (como se especifica en este artículo) y, después, convierta ese archivo configfile en configmap
  • Paso 3: Implemente el archivo de configuración de extracción como configmap en los clústeres.

Esto es más fácil que crear la configuración de yaml (que es extremadamente sensible con los espacios) e intentar no agregar espacios no deseados, ya que crea directamente la configuración de extracción dentro del ConfigMap.

Cree un archivo de configuración de extracción de Prometheus denominado prometheus-config. Para más información, consulte las sugerencias y ejemplos de configuración, que proporcionan más detalles sobre la creación de la configuración de extracción para Prometheus. También puede consultar la referencia de configuración de extracción de Prometheus.io. El archivo de configuración muestra las configuraciones de extracción en la sección scrape_configs y, como opción, puede usar la sección global para establecer el valor global scrape_interval, scrape_timeout y external_labels.

Sugerencia

Los cambios en la sección global repercutirán en las configuraciones predeterminadas y la configuración personalizada.

Aquí se muestra un archivo de configuración de extracción de Prometheus:

global:
  scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
  scrape_interval: 60s
  static_configs:
    - targets: ['my-static-service.svc.cluster.local:1234']

- job_name: prometheus_example_app
  scheme: http
  kubernetes_sd_configs:
    - role: service
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_name]
      action: keep
      regex: "prometheus-example-service"

Validación del archivo de configuración de extracción

El agente usa una herramienta promconfigvalidator personalizada para validar la configuración de Prometheus que se le ha dado mediante el archivo ConfigMap. Si la configuración no es válida, el agente de complemento rechaza la configuración personalizada especificada. Una vez que tenga el archivo de configuración de Prometheus, puede usar opcionalmente la herramienta promconfigvalidator para validar la configuración antes de crear un archivo configmap que consuma el agente.

La herramienta promconfigvalidator se envía dentro de los pods del complemento de métricas de Azure Monitor. Puede usar cualquiera de los pods ama-metrics-node-* en el espacio de nombres kube-system del clúster para descargar la herramienta para la validación. Use kubectl cp para descargar la herramienta y su configuración:

for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator;  kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done

Después de copiar el archivo ejecutable y yaml, busque la ruta de acceso del archivo de configuración de Prometheus que ha creado. Luego, reemplace <config path> en el comando y ejecute el validador por el comando:

./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"

Al ejecutar el validador, se genera el archivo de configuración combinado merged-otel-config.yaml si no se proporciona ninguna ruta de acceso con el parámetro output opcional. No use este archivo combinado generado automáticamente como configuración para el agente del recopilador de métricas, ya que solo se usa con fines de validación y depuración de herramientas.

Implementación del archivo de configuración como configmap

El archivo de configuración de Prometheus se consume como un campo denominado prometheus-config dentro de los ConfigMap del complemento de métricas ama-metrics-prometheus-config (o) ama-metrics-prometheus-config-node (o) ama-metrics-prometheus-config-node-windows en el espacio de nombres kube-system. Puede crear un ConfigMap desde el archivo de configuración de extracción que ha creado anteriormente, cambiando el nombre del archivo de configuración de Prometheus a prometheus-config (sin extensión de archivo) y ejecutando uno o varios de los siguientes comandos, en función de qué ConfigMap quiera crear para la configuración de los trabajos de extracción personalizados.

Por ejemplo, para crear un ConfigMap que utilizará replicsset

kubectl create configmap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system

Esto crea un ConfigMap denominado ama-metrics-prometheus-config en el espacio de nombres kube-system. El pod de réplica de métricas de Azure Monitor se reinicia en 30-60 segundos para aplicar la nueva configuración. Para ver si hay algún problema con la validación, el procesamiento o la combinación de la configuración, puede examinar los pods de réplica ama-metrics

Por ejemplo, para crear un ConfigMap que utilizará el DaemonSet de Linux

kubectl create configmap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system

Esto crea un ConfigMap denominado ama-metrics-prometheus-config-node en el espacio de nombres kube-system. Cada pod de DaemonSet de Linux de métricas de Azure Monitor se reinicia en 30-60 segundos para aplicar la nueva configuración. Para ver si hay algún problema con la validación, el procesamiento o la combinación de la configuración, puede examinar los pods de deamonset de Linux ama-metrics-node

Por ejemplo, para crear un ConfigMap que utilizará el DaemonSet de Windows

kubectl create configmap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system

Esto crea un ConfigMap denominado ama-metrics-prometheus-config-node-windows en el espacio de nombres kube-system. Cada pod de DaemonSet de Windows de métricas de Azure Monitor se reinicia en 30-60 segundos para aplicar la nueva configuración. Para ver si hay algún problema con la validación, el procesamiento o la combinación de la configuración, puede examinar los pods de deamonset de Windows ama-metrics-win-node

Asegúrese de que el archivo de configuración de Prometheus se llame prometheus-config antes de ejecutar el comando siguiente, ya que el nombre de archivo se usa como nombre de configuración del configmap.

Esto crea un ConfigMap denominado ama-metrics-prometheus-config en el espacio de nombres kube-system. Luego, el pod de métricas de Azure Monitor se reinicia para aplicar la nueva configuración. Para ver si hay algún problema con la validación, el procesamiento o la combinación de la configuración, puede examinar los pods ama-metrics.

ama-metrics-prometheus-configAquí se muestra un ejemplo del archivo configmap .

Solución de problemas

Si ha creado correctamente el ConfigMap (ama-metrics-prometheus-config or ama-metrics-prometheus-config-node) en el espacio de nombres de kube-system y todavía no ve los destinos personalizados que se extraen, compruebe si hay errores en los registros del pod de réplica para el ConfigMap ama-metrics-prometheus-config o los registros del pod de DaemonSet para el ConfigMap ama-metrics-prometheus-config-node utilizando los registros de kubectl y asegúrese de que no hay errores en la sección Comenzar a combinar la configuración predeterminada y personalizada de Prometheus con el prefijo prometheus-config-merger

Nota:

Configuración avanzada: Configuración de trabajos de extracción personalizados de Prometheus para el DaemonSet

El pod de réplica ama-metrics consume la configuración personalizada de Prometheus y extrae los destinos especificados. Para un clúster con un gran número de nodos y pods y un volumen grande de métricas para extraer, algunos de los destinos de extracción personalizados aplicables se pueden descargar desde el pod de réplica único ama-metrics al pod del DaemonSet ama-metrics.

El configmap ama-metrics-prometheus-config-node es similar al configmap replica-set, y se puede crear para tener configuraciones de extracción estáticas en cada nodo. La configuración de extracción solo debe tener como destino un solo nodo y no debería usar la detección de servicios/anotaciones de pod. De lo contrario, cada nodo intenta extraer todos los destinos y realiza muchas llamadas al servidor de API de Kubernetes.

Los destinos de extracción personalizados pueden seguir el mismo formato usando static_configs con destinos que usan la variable de entorno $NODE_IP y especifican el puerto que se va a extraer. Cada pod del DaemonSet toma la configuración, extrae las métricas y las envía para ese nodo.

Ejemplo: la configuración node-exporter que se muestra a continuación es uno de los destinos predeterminados para los pods del DaemonSet. Usa la variable de entorno $NODE_IP, que ya está establecida para cada contenedor de complementos ama-metrics para establecer como destino un puerto específico en el nodo.

- job_name: nodesample
  scrape_interval: 30s
  scheme: http
  metrics_path: /metrics
  relabel_configs:
  - source_labels: [__metrics_path__]
    regex: (.*)
    target_label: metrics_path
  - source_labels: [__address__]
    replacement: '$NODE_NAME'
    target_label: instance
  static_configs:
  - targets: ['$NODE_IP:9100']

Pasos siguientes