Envío de métricas: Check personalizado del Agent

Las funciones se utilizan para enviar métricas con un check personalizado del Agent. Existen diferentes funciones disponibles según el tipo de métrica. Dependiendo de la función utilizada, el tipo de envío y el tipo de métrica real almacenada en Datadog pueden variar.

Funciones

monotonic_count()

Esta función se utiliza para realizar el seguimiento de una métrica COUNT sin procesar que siempre aumenta. El Datadog Agent calcula el delta entre cada envío. Las muestras que tienen un valor más bajo que la muestra anterior se ignoran. Los valores más bajos suelen indicar que la métrica COUNT sin procesar subyacente se ha reiniciado. La función puede ser llamada varias veces durante la ejecución de un check.

Por ejemplo, al enviar las muestras 2, 3, 6, 7, se envía un valor de 5 (7-2) durante la primera ejecución del check. El envío de las muestras 10, 11, en el mismo monotonic_count, envía un valor de 4 (11-7) durante la segunda ejecución del check.

Nota: Las métricas enviadas con esta función se almacenan con un tipo de métrica COUNT en Datadog. Cada valor de la serie temporal almacenada es un delta del valor de la métrica entre muestras (no normalizadas en el tiempo).

Plantilla de funciones:

self.monotonic_count(name, value, tags=None, hostname=None, device_name=None)
ParámetroTipoObligatorioValor por defectoDescripción
nameCadena-Nombre de la métrica.
valueFlotante-Valor de la métrica.
tagsLista de cadenasNo-Lista de etiquetas (tags) para asociar a esta métrica.
hostnameCadenaNoHost actualNombre de host para asociar a esta métrica.
device_nameCadenaNo-Obsoleto. Añade una etiqueta con la forma device:<DEVICE_NAME> a la lista de etiquetas, en su lugar.

count()

Esta función envía el número de eventos que han ocurrido durante el intervalo del check. Es posible llamarla varias veces durante la ejecución de un check, y cada muestra se añade al valor que se envía.

Nota: Las métricas enviadas con esta función se almacenan con un tipo de métrica COUNT en Datadog. Cada valor de la serie temporal almacenada es un delta del valor de la métrica entre muestras (no normalizadas en el tiempo).

Plantilla de funciones:

self.count(name, value, tags=None, hostname=None, device_name=None)
ParámetroTipoObligatorioValor por defectoDescripción
nameCadena-Nombre de la métrica.
valueFlotante-Valor de la métrica.
tagsLista de cadenasNo-Lista de etiquetas para asociar a esta métrica.
hostnameCadenaNoHost actualNombre de host para asociar a esta métrica.
device_nameCadenaNo-Obsoleto. Añade una etiqueta con el formato device:<DEVICE_NAME> a la lista de etiquetas, en su lugar.

gauge()

Esta función envía el valor de una métrica en una marca de tiempo dada. Si se la llama varias veces durante la ejecución de un check de una métrica, sólo se utiliza la última muestra.

Nota: Las métricas enviadas con esta función se almacenan con un tipo de métrica GAUGE en Datadog.

Plantilla de funciones:

self.gauge(name, value, tags=None, hostname=None, device_name=None)
ParámetroTipoObligatorioValor por defectoDescripción
nameCadena-Nombre de la métrica.
valueFlotante-Valor de la métrica.
tagsLista de cadenasNo-Lista de etiquetas para asociar a esta métrica.
hostnameCadenaNoHost actualNombre de host para asociar a esta métrica.
device_nameCadenaNo-Obsoleto. Añade una etiqueta con el formato device:<DEVICE_NAME> a la lista de etiquetas, en su lugar.

rate()

Esta función envía el valor sin procesar muestreado de tu métrica RATE. El Datadog Agent calcula el delta del valor de esa métrica entre dos envíos y lo divide por el intervalo de envío para obtener la frecuencia. Esta función sólo debe invocarse una vez durante un check, de lo contrario desecha cualquier valor que sea menor que un valor enviado previamente.

Nota: Las métricas enviadas con esta función se almacenan con un tipo de métrica GAUGE en Datadog. Cada valor de la serie temporal almacenada es un delta del valor de la métrica entre muestras.

Plantilla de funciones:

self.rate(name, value, tags=None, hostname=None, device_name=None)
ParámetroTipoObligatorioValor por defectoDescripción
nameCadena-Nombre de la métrica.
valueFlotante-Valor de la métrica.
tagsLista de cadenasNo-Lista de etiquetas para asociar a esta métrica.
hostnameCadenaNoHost actualNombre de host para asociar a esta métrica.
device_nameCadenaNo-Obsoleto. Añade una etiqueta con el formato device:<DEVICE_NAME> a la lista de etiquetas, en su lugar.

histogram()

Esta función envía la muestra de una métrica histogram que ha ocurrido durante el intervalo del check. Es posible llamarla varias veces durante la ejecución de un check, y cada muestra se añade a la distribución estadística del conjunto de valores para esta métrica.

Nota: Todas las agregaciones de métricas producidas se almacenan como un tipo de métrica GAUGE en Datadog, excepto <METRIC_NAME>.count que se almacena como un tipo de métrica RATE en Datadog.

Plantilla de funciones:

self.histogram(name, value, tags=None, hostname=None, device_name=None)
ParámetroTipoObligatorioValor por defectoDescripción
nameCadena-Nombre de la métrica.
valueFlotante-Valor de la métrica.
tagsLista de cadenasNo-Lista de etiquetas para asociar a esta métrica.
hostnameCadenaNoHost actualNombre de host para asociar a esta métrica.
device_nameCadenaNo-Obsoleto. Añade una etiqueta con el formato device:<DEVICE_NAME> a la lista de etiquetas, en su lugar.

Tutorial

Sigue los pasos que se indican a continuación para crear un check del Agent personalizado que envíe todos los tipos de métricas periódicamente:

  1. Crea el directorio metrics_example.d/ en la carpeta conf.d/ en la raíz de tu directorio de configuración del Agent.

  2. En la carpeta metrics_example.d/, crea un archivo de configuración vacío llamado metrics_example.yaml con el siguiente contenido:

    instances: [{}]
    
  3. Subiendo un nivel desde la carpeta conf.d/, ve a la carpeta checks.d/. Crea un archivo de check personalizado llamado metrics_example.py con el siguiente contenido:

    import random
    
    from datadog_checks.base import AgentCheck
    
    __version__ = "1.0.0"
    
    class MyClass(AgentCheck):
        def check(self, instance):
            self.count(
                "example_metric.count",
                2,
                tags=["env:dev","metric_submission_type:count"],
            )
            self.count(
                "example_metric.decrement",
                -1,
                tags=["env:dev","metric_submission_type:count"],
            )
            self.count(
                "example_metric.increment",
                1,
                tags=["env:dev","metric_submission_type:count"],
            )
            self.rate(
                "example_metric.rate",
                1,
                tags=["env:dev","metric_submission_type:rate"],
            )
            self.gauge(
                "example_metric.gauge",
                random.randint(0, 10),
                tags=["env:dev","metric_submission_type:gauge"],
            )
            self.monotonic_count(
                "example_metric.monotonic_count",
                2,
                tags=["env:dev","metric_submission_type:monotonic_count"],
            )
    
            # Calling the functions below twice simulates
            # several metrics submissions during one Agent run.
            self.histogram(
                "example_metric.histogram",
                random.randint(0, 10),
                tags=["env:dev","metric_submission_type:histogram"],
            )
            self.histogram(
                "example_metric.histogram",
                random.randint(0, 10),
                tags=["env:dev","metric_submission_type:histogram"],
            )
    
  4. Reinicia el Agent.

  5. Comprueba que tu check personalizado se está ejecutando correctamente con el subcomando de estado del Agent. Busca metrics_example en la sección Checks:

    =========
    Collector
    =========
    
      Running Checks
      ==============
    
        (...)
    
        metrics_example (1.0.0)
        -----------------------
          Instance ID: metrics_example:d884b5186b651429 [OK]
          Total Runs: 2
          Metric Samples: Last Run: 8, Total: 16
          Events: Last Run: 0, Total: 0
          Service Checks: Last Run: 0, Total: 0
          Average Execution Time : 2ms
    
        (...)
    
  6. Comprueba que tus métricas están informando a Datadog en tu página Resumen de métricas.

Leer más

Más enlaces, artículos y documentación útiles: