Complemento StatsD

StatsD es un protocolo para enviar métricas y un daemon para la agregación de datos de métricas. Si configuras el complemento StatsD del agente de Monitoring, el agente funcionará como un daemon de StatsD que escribe métricas en Monitoring.

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

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

Esta función solo está disponible para 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 StatsD como se describe en la siguiente sección.

Configurar el complemento StatsD

Requisitos previos

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

Habilitar el complemento

Haz lo siguiente en tu instancia de VM compatible que ejecute 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 indica al agente que acepte métricas de StatsD en el puerto predeterminado de StatsD, 8125.

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

  3. Reinicia el agente de monitorización para que recoja la configuración de StatsD ejecutando el siguiente comando:

    sudo service stackdriver-agent restart
    

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

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

Para que puedas empezar rápidamente, el complemento StatsD del agente incluye una configuración de collectd predeterminada que asigna métricas de StatsD a 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 collectd, tiene un nombre de tipo de métrica definido por el usuario.

  • El nombre de la 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 tanto el nombre de la métrica como el nombre de un contador: media, superior, inferior, suma, percentil 50 y percentil 95.

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

Tipo de StatsD Nombre de StatsD Tipo de métrica de Stackdriver Tipo de métrica Tipo de valor Etiqueta(s) de métrica
Encimera my.counter custom.googleapis.com/statsd/derive Acumulativo Int64 métrica:my.counter
Indicador my.gauge custom.googleapis.com/statsd/gauge Indicador Doble metric:my.gauge
Definida my.set custom.googleapis.com/statsd/objects Indicador Doble metric:my.set
Temporizador 1 my.timer custom.googleapis.com/statsd/latency Indicador Doble métrica:my.timer-average
(igual) (igual) (igual) métrica:my.timer-upper
(igual) (igual) (igual) metric:my.timer-lower
(igual) (igual) (igual) métrica:my.timer-sum
(igual) (igual) (igual) metric:my.timer-percentile-50
(igual) (igual) (igual) metric:my.timer-percentile-95
custom.googleapis.com/statsd/gauge Indicador (igual) métrica:my.timer-count

Notas:
1 Hay una secuencia entrante de métricas de temporizador de statsd con el mismo nombre. El agente agrega métricas de 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.

Personalizar las métricas exportadas

La configuración predeterminada de StatsD se ha diseñado para que puedas empezar a usarla rápidamente. En esta sección se explica cómo personalizar la configuración para adaptarla a necesidades más complejas.

Debe conocer 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 el resumen de las métricas definidas por el usuario.

Puedes personalizar los siguientes elementos:

  • Puedes cambiar los valores asignados a la etiqueta metric predeterminada. Si usa más valores de etiqueta, habrá más series temporales en la métrica definida por el usuario. Si se usan menos valores de etiqueta, se obtendrán menos series temporales.

  • Puede 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, puedes identificar métricas con un nombre determinado y usar un tipo de métrica definida por el usuario diferente para ellas.

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

Si cambia los tipos de métricas, debe definir los nuevos tipos de métricas definidas por el usuario en la API Monitoring. Para obtener más información, consulta la sección Diseñar un tipo de métrica.

Ejemplo

Supongamos que usas StatsD para monitorizar una aplicación que consta de dos servicios, my_service_a y my_service_b. Para cada servicio, quieres exportar a Monitoring una métrica de contador que represente el número de solicitudes fallidas. No quieres usar los tipos de métricas de StatsD predeterminados.

Métricas de collectd entrantes

Antes de definir tus propios tipos de métricas, es importante que conozcas la estructura de una métrica de collectd y cómo se asigna de forma predeterminada una métrica de StatsD a las métricas definidas por el usuario.

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

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

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

Componente Valor(es) esperado(s)
Anfitrión any
Complemento statsd
Instancia de complemento unset1
Tipo derive2
Instancia de tipo [SERVICE_NAME].GET.[CODE]3
[VALUE] cualquier valor4

Notas:
1 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.

En la siguiente tabla se muestra cómo se asignaría esta métrica de forma predeterminada:

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

La asignación predeterminada puede suponer algunas dificultades:

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

  • No puedes obtener fácilmente datos de servicios concretos o códigos de respuesta concretos en tus datos. Por ejemplo, no puedes obtener fácilmente el número total de errores (de todo tipo) que se han producido en my_service_a.

  • La configuración predeterminada exporta todas las métricas de StatsD a Stackdriver, lo que puede resultar caro si solo te interesan determinadas métricas.

Diseñar un tipo de métrica

Para obtener información detallada sobre cómo crear tipos de métricas, consulta el artículo Crear un tipo de métrica definido por el usuario.

El siguiente tipo de métrica definida por el usuario es una opción adecuada para los datos de este ejemplo, ya que solo contiene la métrica de StatsD que le interesa y porque la 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): código de respuesta HTTP.
  • Tipo: CUMULATIVE
  • Tipo de valor: INT64

En la siguiente tabla se muestra la asignación deseada de StatsD a Stackdriver:

Tipo de StatsD Nombre de StatsD Tipo de métrica de Stackdriver Tipo de métrica Tipo de valor Etiquetas de métricas
Encimera my_service_a.GET.500 custom.googleapis.com/http/request_errors Acumulativo Int64 service_name:my_service_a, response_code:500
Encimera 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, créalo con metricDescriptors.create. Para obtener información sobre cómo permitir que Monitoring cree el tipo de métrica, consulta Creación automática de descriptores de métricas.

Configuración de la asignación

Para exportar la métrica de StatsD al nuevo tipo de métrica definida por el usuario, sustituye el contenido de la configuración predeterminada del complemento de StatsD, /etc/stackdriver/collectd.d/statsd.conf, por 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>

Reiniciar el agente

Reinicia el agente para que aplique la nueva configuración ejecutando el siguiente comando en tu instancia de VM:

sudo service stackdriver-agent restart

La información de la métrica definida por el usuario empieza a enviarse a Monitorización inmediatamente.

Pasos siguientes

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