Complemento StatsD

StatsD es un protocolo que envía métricas y un daemon para la agregación de datos métricos. Con la configuración del complemento StatsD del agente de Monitoring, haces que el agente funcione como un daemon StatsD que escribe métricas en Monitoring.

El uso del complemento StatsD con su configuración predeterminada es la forma más fácil de incluir tus métricas definidas por el usuario en Monitoring. El complemento StatsD solo está disponible en el agente de Stackdriver Monitoring de Linux.

El agente de Monitoring también puede exportar otras métricas collectd como métricas definidas por el usuario, pero no hay una configuración predeterminada simple. Consulta Métricas definidas por el usuario del agente para obtener más detalles.

Esta funcionalidad solo está disponible para los agentes que se ejecutan en Linux. No está disponible en Windows.

Discovery

Monitoring no detecta automáticamente StatsD. Para usar las métricas de StatsD, configura el complemento de StatsD como se describe en la siguiente sección.

Configura el complemento StatsD

Requisitos previos

El complemento StatsD requiere la versión del agente de Monitoring 5.5.2-356 o posterior. Para actualizar el agente, consulta Actualización del agente.

Habilita el complemento

Haz lo siguiente en tu instancia de VM compatible que ejecuta Linux:

  1. Descarga statsd.conf y colócalo en /etc/stackdriver/collectd.d/ con el siguiente comando:

    (cd /etc/stackdriver/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/statsd.conf)
    
  2. El archivo de configuración predeterminado le indica al agente que acepte las métricas de StatsD en el puerto StatsD predeterminado, 8125.

    Si deseas enviar algunas métricas a tu propio daemon StatsD y otras métricas al daemon StatsD del agente, cambia la configuración del puerto en el archivo de configuración.

  3. Reinicia el agente de Monitoring a fin de que detecte la configuración de StatsD. Para ello, ejecuta el siguiente comando:

    sudo service stackdriver-agent restart
    

Para obtener más información sobre el complemento collectd statsd, consulta Plugin:StatsD.

Asignación predeterminada a métricas definidas por el usuario

Para comenzar rápidamente, el complemento StatsD del agente viene con una configuración collectd predeterminada que asigna desde métricas StatsD hasta las métricas definidas por el usuario de Stackdriver:

  • Todas las métricas del complemento StatsD tienen statsd en el componente plugin de collectd.

  • Cada tipo de métrica de StatsD que se encuentra en el componente type de collectd tiene un nombre de tipo de métrica definido por el usuario correspondiente.

  • El nombre de métrica de StatsD que se encuentra en el componente type_instance de collectd se almacena como el valor de una etiqueta llamada metric.

    El valor de la etiqueta metric es diferente para el tipo de métrica Timer: incluye el nombre de la métrica y un contranombre: promedio, superior, inferior, suma, percentil-50 y percentil-95.

Por ejemplo, la siguiente tabla muestra cómo los tipos de métrica de StatsD admitidos y el nombre de la métrica se mapean a métricas definidas por el usuario de Monitoring:

Tipo de StatsD Nombre de StatsD Tipo de métrica de Stackdriver Categoría de métrica Tipo de valor Etiqueta(s) de métrica
Counter my.counter custom.googleapis.com/statsd/derive Acumulativo Int64 metric:my.counter
Gauge my.gauge custom.googleapis.com/statsd/gauge Gauge Doble metric:my.gauge
Set my.set custom.googleapis.com/statsd/objects Gauge Doble metric:my.set
Timer1 my.timer custom.googleapis.com/statsd/latency Gauge Doble metric:my.timer-average
(igual) (igual) (igual) metric:my.timer-upper
(igual) (igual) (igual) metric:my.timer-lower
(igual) (igual) (igual) metric:my.timer-sum
(igual) (igual) (igual) metric:my.timer-percentile-50
(igual) (igual) (igual) metric:my.timer-percentile-95
custom.googleapis.com/statsd/gauge Gauge (igual) metric:my.timer-count

Notas:
1 Hay una secuencia entrante de métricas del temporizador de statsd con el mismo nombre. El agente agrega las métricas del temporizador StatsD y exporta datos de resumen a 7 series temporales diferentes.

Para obtener más información sobre los tipos de StatsD, consulta la especificación StatsD.

Personaliza las métricas exportadas

La configuración StatsD predeterminada está diseñada para que comiences rápidamente. Esta sección te ayuda a personalizar la configuración para satisfacer necesidades más complejas.

Debes estar familiarizado con las métricas definidas por el usuario. Para obtener una introducción a las métricas, consulta Métricas, series temporales y recursos. Para obtener más información, consulta Descripción general de las métricas definidas por el usuario.

Puedes personalizar los siguientes elementos:

  • Puedes cambiar los valores asignados a la etiqueta metric predeterminada. El uso de más valores de etiqueta da como resultado más series temporales en tu métrica definida por el usuario. Usar menos valores de etiqueta da como resultado menos series temporales.

  • Puedes cambiar los tipos de métricas definidas por el usuario. No tienes que usar los tipos predefinidos que se proporcionan en la configuración predeterminada. Por ejemplo, podrías identificar las métricas con un nombre determinado y usar un tipo de métrica definida por el usuario diferente para ellas.

  • Si cambias los tipos de métricas definidas por el usuario, también puedes cambiar las etiquetas asociadas con cada tipo. La configuración predeterminada tiene una sola etiqueta, pero puedes agregar más etiquetas o cambiar la clave de la etiqueta.

Si cambias los tipos de métricas, debes definir tus nuevos tipos de métricas definidas por el usuario en la API de Monitoring. Para obtener más información, consulta la siguiente sección, Cómo diseñar un tipo de métrica.

Ejemplo

Supongamos que utilizas StatsD para supervisar una aplicación que consta de dos servicios: my_service_a y my_service_b. Para cada servicio, deseas exportar a Monitoring una métrica de contador que representa el número de solicitudes fallidas. No deseas usar los tipos de métrica StatsD predeterminados.

Métricas collectd entrantes

Antes de definir tus propios tipos de métricas, es importante entender la estructura de una métrica collectd y cómo una métrica StatsD se mapea de forma predeterminada en métricas definidas por el usuario.

Las métricas collectd, incluidas las métricas de StatsD, abarcan los siguientes componentes:

    Host, Plugin, Plugin-instance, Type, Type-instance

En este ejemplo, las métricas StatsD que deseas exportar tienen los siguientes identificadores en collectd:

Componente Valor(es) esperado(s)
Host cualquiera
Complemento statsd
Instancia de complemento sin configurar1
Tipo derive2
Tipo de instancia [SERVICE_NAME].GET.[CODE]3
[VALUE] cualquier valor4

Notas:
1 Actualmente, el complemento StatsD deja este componente vacío.
2 Una métrica de contador de StatsD se asigna al tipo derive de collectd. 3 Por ejemplo, una instancia de tipo podría ser my_service_a.GET.500. 4 [VALUE] suele ser una marca de tiempo y un número de doble precisión.

La siguiente tabla muestra cómo esta métrica se mapea de forma predeterminada:

Tipo de StatsD Nombre de StatsD Tipo de métrica de Stackdriver Categoría de métrica Tipo de valor Etiquetas de métrica
Contador my_service_a.GET.500 custom.googleapis.com/statsd/derive Acumulativo Int64 metric:my_servce_a.GET.500
Contador my_service_b.GET.403 custom.googleapis.com/statsd/derive Acumulativo Int64 metric:my_servce_b.GET.403

El mapeo predeterminado puede presentar algunas dificultades para ti:

  • Esta métrica de contador en particular ([SERVICE_NAME].GET.[CODE]) se encuentra en el mismo tipo de métrica definida por el usuario que todas las demás métricas de contador. No puedes obtener fácilmente solo los datos de esta métrica, ya que, en la actualidad, Stackdriver no admite búsquedas de expresiones regulares en etiquetas.

  • No puedes obtener fácilmente datos para servicios individuales o códigos de respuesta individuales en tus datos. Por ejemplo, no puedes obtener fácilmente la cantidad total de errores (de todo tipo) que se produjeron en my_service_a.

  • La configuración predeterminada exporta todas las métricas StatsD a Stackdriver, lo que podría ser costoso si solo estás interesado en ciertas métricas.

Cómo diseñar un tipo de métrica

Para obtener un análisis completo sobre la creación de tipos de métricas, consulta Crea un tipo de métrica definido por el usuario.

El siguiente tipo de métrica definida por el usuario es una opción razonable para los datos en este ejemplo, ya que solo contiene la métrica de StatsD en la que estás interesado y porque su elección de etiquetas ayuda a organizar mejor los datos:

  • Tipo: custom.googleapis.com/http/request_errors
  • Etiquetas:
    • service_name (STRING): el nombre del servicio
    • response_code (INT64): el código de respuesta HTTP
  • Tipo: ACUMULATIVO
  • Tipo de valor: INT64

La siguiente tabla muestra el mapeo deseado de StatsD a Stackdriver:

Tipo de StatsD Nombre de StatsD Tipo de métrica de Stackdriver Categoría de métrica Tipo de valor Etiquetas de métrica
Contador my_service_a.GET.500 custom.googleapis.com/http/request_errors Acumulativo Int64 service_name:my_service_a, response_code:500
Contador my_service_b.GET.403 custom.googleapis.com/http/request_errors Acumulativo Int64 service_name:my_service_b, response_code:403

Una vez que hayas diseñado el tipo de métrica, usa metricDescriptors.create para crearlo. Para obtener más información sobre cómo permitir que Monitoring cree el tipo de métrica de manera automática, consulta Creación automática de descriptores de métricas.

Configuración de asignaciones

Para exportar la métrica de StatsD al nuevo tipo de métrica definida por el usuario, reemplaza el contenido de la configuración predeterminada del complemento StatsD, /etc/stackdriver/collectd.d/statsd.conf, con el siguiente código:

<Plugin statsd>
  Host "127.0.0.1"
  Port "8125"
  DeleteSets true
  TimerPercentile 50.0
  TimerPercentile 95.0
  TimerLower true
  TimerUpper true
  TimerSum true
  TimerCount true
</Plugin>

LoadPlugin match_regex
LoadPlugin target_set
LoadPlugin target_replace

# Insert a new rule in the default "PreCache" chain, to divert your metrics.
PreCacheChain "PreCache"
<Chain "PreCache">
  # The following rule does all the work for your metric:
  <Rule "rewrite_request_errors">
    # Do a careful match for just your metrics; if it fails, drop down
    # to the next rule:
    <Match regex>
      Plugin "^statsd$"
      TypeInstance "^.*\\.GET\\..*$"    # Match on type instance.
    </Match>

    <Target "set">
      # Specify the metric descriptor type:
      MetaData "stackdriver_metric_type" "custom.googleapis.com/http/request_errors"
      # Initialize the labels from the "type_instance" label; clean the values up in the next Target below.
      MetaData "label:service_name" "%{type_instance}"
      MetaData "label:response_code" "%{type_instance}"
    </Target>

    <Target "replace">
      # Remove ".GET.[code]" to get the real service name.
      MetaData "label:service_name" "\\.GET\\.[0-9]*$" ""
      # Remove "[service].GET." to get the real response code.
      MetaData "label:response_code" "^[^\\.]*\\.GET\\." ""
    </Target>
  </Rule>
</Chain>

Reinicia el agente

Reinicia tu agente a fin de recoger la configuración nueva; para hacerlo, ejecuta el comando siguiente en tu instancia de VM:

sudo service stackdriver-agent restart

Tu información de métrica definida por el usuario comienza a fluir en Monitoring inmediatamente.

Próximos pasos

La personalización del complemento StatsD es lo mismo que personalizar las métricas de collectd para Monitoring. Para obtener más información, consulta las secciones de Referencia y Solución de problemas Métricas definidas por el usuario del agente.