Compartir a través de


Envío de métricas de Prometheus al área de trabajo de Log Analytics con Container Insights

En este artículo se describe cómo enviar métricas de Prometheus desde el clúster de Kubernetes supervisado por Container Insights a un área de trabajo de Log Analytics. Antes de realizar esta configuración, primero debe asegurarse de que va a extraer las métricas de Prometheus del clúster mediante el servicio administrado de Azure Monitor para Prometheus, que es el método recomendado para supervisar los clústeres. Use la configuración descrita en este artículo solo si también desea enviar estos mismos datos a un área de trabajo de Log Analytics donde pueda analizarlos mediante consultas de registro y alertas de búsqueda de registro.

Esta opción requiere configurar el complemento de supervisión del agente de Azure Monitor, que es el mismo que usa Container Insights para enviar datos a un área de trabajo de Log Analytics. Esto requiere exponer el punto de conexión de las métricas de Prometheus a través de los exportadores o pods y, a continuación, configurar el complemento de supervisión para el agente de Azure Monitor que usa Container Insights, tal como se muestra en el diagrama siguiente.

Diagrama de la arquitectura de supervisión de contenedores que envía métricas de Prometheus a los registros de Azure Monitor.

Configuración de extracción de Prometheus (para métricas almacenadas como registros)

La extracción activa de métricas de Prometheus se realiza desde una de las dos perspectivas siguientes y las métricas se envían al área de trabajo de Log Analytics configurada:

  • Todo el clúster: se define en la sección ConfigMap [Prometheus data_collection_settings.cluster].
  • Todo el nodo: se define en la sección ConfigMap [Prometheus data_collection_settings.cluster].
Punto de conexión Ámbito Ejemplo
Anotación de pod En todo el clúster prometheus.io/scrape: "true"
prometheus.io/path: "/mymetrics"
prometheus.io/port: "8000"
prometheus.io/scheme: "http"
Servicio Kubernetes En todo el clúster http://my-service-dns.my-namespace:9100/metrics
http://metrics-server.kube-system.svc.cluster.local/metrics
Punto de conexión o dirección URL Por nodo o en todo el clúster http://myurl:9101/metrics

Cuando se especifica una dirección URL, Container Insights solo extrae el punto de conexión. Cuando se especifica el servicio Kubernetes, el nombre del servicio se resuelve con el servidor DNS del clúster para obtener la dirección IP. A continuación, se extrae el servicio resuelto.

Ámbito Clave Tipo de datos Value Descripción
En todo el clúster Especifique uno de los tres métodos siguientes para extraer los puntos de conexión para las métricas.
urls String Matriz separada por comas Punto de conexión HTTP (dirección IP o ruta de acceso de dirección URL válida especificada). Por ejemplo: urls=[$NODE_IP/metrics]. ($NODE_IP es un parámetro de Container Insights específico y se puede usar en lugar de una dirección IP del nodo. Tiene que estar todo en mayúsculas).
kubernetes_services String Matriz separada por comas Una matriz de servicios de Kubernetes para extraer las métricas de las métricas de kube-state-metrics. Aquí se deben usar nombres de dominio completos. Por ejemplo: kubernetes_services = ["http://metrics-server.kube-system.svc.cluster.local/metrics",http://my-service-dns.my-namespace.svc.cluster.local:9100/metrics]
monitor_kubernetes_pods Boolean true o false Cuando se establece en true en la configuración de todo el clúster, el agente de Container insights rastrea los pods de Kubernetes en todo el clúster en busca de las siguientes anotaciones de Prometheus:
prometheus.io/scrape:
prometheus.io/scheme:
prometheus.io/path:
prometheus.io/port:
prometheus.io/scrape Boolean true o false Habilita la extracción del pod y monitor_kubernetes_pods debe establecerse en true.
prometheus.io/scheme String http De manera predeterminada, se hace la extracción mediante HTTP.
prometheus.io/path String Matriz separada por comas La ruta de acceso del recurso HTTP a partir del que se van a capturar las métricas. Si la ruta de acceso de las métricas no es /metrics, defínala con esta anotación.
prometheus.io/port String 9102 Especifique un puerto del que extraer. Si el puerto no está configurado, el valor predeterminado es 9102.
monitor_kubernetes_pods_namespaces String Matriz separada por comas Una lista de permitidos de espacios de nombres para extraer las métricas de los pods de Kubernetes.
Por ejemplo: monitor_kubernetes_pods_namespaces = ["default1", "default2", "default3"]
En todo el nodo urls String Matriz separada por comas Punto de conexión HTTP (dirección IP o ruta de acceso de dirección URL válida especificada). Por ejemplo: urls=[$NODE_IP/metrics]. ($NODE_IP es un parámetro de Container Insights específico y se puede usar en lugar de una dirección IP del nodo. Tiene que estar todo en mayúsculas).
En todo el nodo o en todo el clúster interval String 60 s El valor predeterminado del intervalo de recopilación es de un minuto (60 segundos). Puede modificar la recopilación de [prometheus_data_collection_settings. node] o [prometheus_data_collection_settings. cluster] a unidades de tiempo como s, m y h.
En todo el nodo o en todo el clúster fieldpass
fielddrop
String Matriz separada por comas Puede especificar determinadas métricas para que se recopilen o no desde el punto de conexión estableciendo la lista de permitir (fieldpass) y no permitir (fielddrop). Tiene que establecer primero la lista de permitidos.

Configuración de ConfigMaps para especificar la configuración de extracción de Prometheus (para métricas almacenadas como registros)

Realice los pasos siguientes para configurar el archivo de configuración ConfigMap para el clúster. ConfigMaps es una lista global y solo puede haber una instancia de ConfigMap aplicada al agente. No puede tener otra instancia de ConfigMaps que anule las colecciones.

  1. Descargue el archivo YAML ConfigMap de plantilla y guárdelo como container-azm-ms-agentconfig.yaml. Si ya ha implementado ConfigMap para el clúster y desea actualizarlo con una configuración más reciente, puede editar el archivo ConfigMap que usó antes.

  2. Edite el archivo YAML ConfigMap con sus personalizaciones para extraer métricas de Prometheus.

    Para recopilar los servicios de Kubernetes en todo el clúster, configure el archivo ConfigMap con el siguiente ejemplo:

    prometheus-data-collection-settings: |- ​
    # Custom Prometheus metrics data collection settings
    [prometheus_data_collection_settings.cluster] ​
    interval = "1m"  ## Valid time units are s, m, h.
    fieldpass = ["metric_to_pass1", "metric_to_pass12"] ## specify metrics to pass through ​
    fielddrop = ["metric_to_drop"] ## specify metrics to drop from collecting
    kubernetes_services = ["http://my-service-dns.my-namespace:9102/metrics"]
    
  3. Ejecute el siguiente comando de kubectl: kubectl apply -f <configmap_yaml_file.yaml>.

    Ejemplo: kubectl apply -f container-azm-ms-agentconfig.yaml.

El cambio de configuración puede tardar unos minutos en finalizar antes de surtir efecto. Se reiniciarán todos los pods ama-logs del clúster. Cuando los reinicios finalizan, aparece un mensaje similar al siguiente e incluye el resultado: configmap "container-azm-ms-agentconfig" created.

Comprobación de la configuración

Para comprobar que la configuración se ha aplicado correctamente en un clúster, use el comando siguiente para revisar los registros de un pod de agente: kubectl logs ama-logs-fdf58 -n=kube-system.

Si hay errores de configuración de los pods Azure Monitor Agent, la salida muestra errores similares al siguiente ejemplo:

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

Los errores relacionados con la aplicación de cambios de configuración también están disponibles para su revisión. Las siguientes opciones están disponibles para solucionar problemas adicionales de los cambios de configuración y la extracción de métricas de Prometheus:

  • Desde los registros de pod del agente que usan el mismo comando kubectl logs.

  • De datos en directo. Los registros de Live Data muestran errores similares al ejemplo siguiente:

    2019-07-08T18:55:00Z E! [inputs.prometheus]: Error in plugin: error making HTTP request to http://invalidurl:1010/metrics: Get http://invalidurl:1010/metrics: dial tcp: lookup invalidurl on 10.0.0.10:53: no such host
    
  • Desde la tabla KubeMonAgentEvents en el área de trabajo de Log Analytics. Los datos se envían cada hora con gravedad Advertencia para los errores de extracción y gravedad Error para los errores de configuración. Si no hay errores, la entrada de la tabla tiene datos con la gravedad Info, que informa de que no hay errores. La propiedad Tags contiene más información sobre el pod y el identificador de contenedor en el que se ha producido el error, así como la primera repetición, la última y el recuento en la última hora.

  • En el caso de las versiones 3.x y 4.x de Red Hat OpenShift en Azure, compruebe los registros del agente de Azure Monitor; para ello, busque en la tabla ContainerLog para comprobar si está habilitada la recopilación de registros de openshift-azure-logging.

Los errores impiden que el agente de Azure Monitor analice el archivo, lo que hace que se reinicie y use la configuración predeterminada. Después de corregir los errores en ConfigMap en los clústeres que no son de Red Hat OpenShift en Azure v3.x, guarde el archivo YAML y aplique la versión actualizada de ConfigMaps mediante la ejecución del comando: kubectl apply -f <configmap_yaml_file.yaml.

Para Red Hat OpenShift en Azure v3.x, edite y guarde la versión actualizada de ConfigMaps mediante la ejecución del comando: oc edit configmaps container-azm-ms-agentconfig -n openshift-azure-logging.

Consulta de los datos de las métricas de Prometheus

Para ver las métricas de Prometheus que ha extraído Azure Monitor y los errores de configuración o de extracción que ha comunicado el agente, revise Consultar datos de métricas de Prometheus.

Ver métricas de Prometheus en Grafana

Container Insights admite la visualización de métricas almacenadas en el área de trabajo de Log Analytics en los paneles de Grafana. Hemos proporcionado una plantilla que puede descargar desde el repositorio de paneles de Grafana. Utilice la plantilla para empezar y consúltela para obtener información sobre cómo consultar otros datos de los clústeres supervisados para visualizarlos en paneles personalizados de Grafana.

Pasos siguientes