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 personalizadas en Monitoring. El complemento StatsD solo está disponible en el agente Stackdriver Monitoring de Linux.

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

Descubrimiento

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

Configura el complemento StatsD

Requisitos previos

El complemento StatsD requiere la versión 5.5.2-356 o posterior del agente de Monitoring. 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 /opt/stackdriver/collectd/etc/collectd.d/ con el siguiente comando:

    (cd /opt/stackdriver/collectd/etc/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.

Mapeo predeterminado a métricas personalizadas

Para comenzar rápidamente, el complemento StatsD del agente viene con una configuración collectd predeterminada que se mapea a las métricas de StatsD a las métricas personalizadas 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 personalizado 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 personalizadas 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 de 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 de 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 personalizadas de Stackdriver. Para una introducción a las métricas de Stackdriver, consulta Métricas, series temporales y recursos. Para obtener más detalles sobre las métricas personalizadas, consulta Métricas personalizadas.

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 personalizada. Usar menos valores de etiqueta da como resultado menos series temporales.

  • Puedes cambiar los tipos de métricas personalizadas. 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 personalizado diferente para ellas.

  • Si cambias los tipos de métricas personalizadas, 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 tipos de métricas personalizadas nuevos en la API de Monitoring. Para obtener más información, consulta la siguiente sección, Diseña un tipo de métrica personalizada.

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 personalizadas, 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 personalizadas.

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 personalizada 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 de StatsD a Stackdriver, lo que podría ser costoso si solo estás interesado en ciertas métricas.

Diseña un tipo de métrica personalizada

Para obtener un análisis completo sobre la creación de tipos de métricas personalizadas, consulta Crea métricas personalizadas.

El siguiente tipo de métrica personalizada 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:

  • Nombre: 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: 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 métricas personalizadas.

Configuración de mapeo

Para exportar la métrica de StatsD al nuevo tipo de métrica personalizada, reemplaza el contenido de la configuración predeterminada del complemento StatsD, /opt/stackdriver/collectd/etc/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 name:
      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 para recoger la configuración nueva que ejecuta el siguiente comando en tu instancia de VM:

sudo service stackdriver-agent restart

Tu información métrica personalizada comienza a fluir en Monitoring inmediatamente.

Próximos pasos

Personalizar el complemento StatsD es un caso especial de personalización de las métricas collectd para Monitoring. Para obtener más información, consulta las secciones Referencia y Solución de problemas de artículo Métricas personalizadas del agente.