Plug-in StatsD

O StatsD é um protocolo para envio de métricas e um daemon para agregação de dados de métricas. Ao configurar o plug-in StatsD, o agente do Monitoring funciona como um daemon que grava métricas no Monitoring.

O uso do plug-in StatsD com a configuração padrão é a maneira mais fácil de inserir as métricas definidas pelo usuário no Monitoring. O plug-in StatsD só está disponível no agente do Stackdriver Monitoring para Linux.

O agente do Monitoring também exporta outras métricas do collectd como métricas definidas pelo usuário, mas não há uma configuração padrão simples. Consulte Métricas definidas pelo usuário do agente para mais detalhes.

Observação: essa funcionalidade está disponível apenas para agentes em execução no Linux. Não está disponível no Windows.

Discovery

O Monitoring não detecta automaticamente o StatsD. Para usar as métricas do StatsD, configure o plug-in conforme descrito na próxima seção.

Como configurar o plug-in StatsD

Pré-requisitos

O plug-in StatsD requer a versão 5.5.2-356 ou posterior do agente do Monitoring. Para atualizar o agente, consulte esta página.

Como ativar o plug-in

Faça o seguinte na instância de VM compatível em execução no Linux:

  1. statsd.conf (em inglês) e coloque-o em /etc/stackdriver/collectd.d/, usando o seguinte 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. O arquivo de configuração padrão instrui o agente a aceitar as métricas do StatsD na porta padrão dele, 8125.

    Se quiser enviar algumas métricas para o próprio daemon do StatsD e outras para o daemon do agente, altere as definições da porta no arquivo de configuração.

  3. Reinicie o agente do Monitoring para selecionar a configuração do StatsD executando o seguinte comando:

    sudo service stackdriver-agent restart
    

Para mais informações sobre o plug-in collectd statsd, consulte Plugin:StatsD (em inglês).

Mapeamento padrão para métricas definidas pelo usuário

Para que você comece rapidamente, o plug-in StatsD do agente vem com uma configuração padrão do collectd que mapeia as métricas do StatsD para métricas definidas pelo usuário do Stackdriver:

  • Todas as métricas do plug-in StatsD têm statsd no componente plugin do collectd.

  • Cada tipo de métrica do StatsD, localizado no componente type do collectd, tem um nome de tipo de métrica definido pelo usuário correspondente.

  • O nome da métrica do StatsD, retido no componente type_instance do collectd, é armazenado como o valor de um rótulo denominado metric.

    O valor do rótulo metric é diferente para o tipo de métrica Timer. Ele inclui o nome da métrica e o nome do contador: average, upper, lower, sum, percentile-50 e percentile-95.

Por exemplo, a tabela a seguir mostra como os tipos de métrica compatíveis do StatsD e o nome da métrica são mapeados para as métricas definidas pelo usuário do Monitoring:

Tipo de StatsD Nome do StatsD Tipo de métrica do Stackdriver Classe da métrica Tipo de valor Marcadores da métrica
Counter my.counter custom.googleapis.com/statsd/derive Cumulative Int64 metric:my.counter
Gauge my.gauge custom.googleapis.com/statsd/gauge Gauge Double metric:my.gauge
Set my.set custom.googleapis.com/statsd/objects Gauge Double metric:my.set
Timer1 my.timer custom.googleapis.com/statsd/latency Gauge Double 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

Observações:
1 Há uma sequência de entrada relativa a métricas de tempo do StatsD com o mesmo nome. O agente as agrega e exporta os dados de resumo para sete séries temporais diferentes.

Para saber mais sobre os tipos de StatsD, consulte a Especificação do StatsD.

Como personalizar as métricas exportadas

A configuração padrão do StatsD foi projetada para que você comece rapidamente. Nesta seção, você aprende a personalizar a configuração para atender a necessidades mais complexas.

Você precisa conhecer as métricas definidas pelo usuário. Para uma introdução a métricas, consulte Métricas, séries temporais e recursos. Para mais informações, consulte Visão geral das métricas definidas pelo usuário.

É possível personalizar o seguinte:

  • É possível alterar os valores atribuídos ao rótulo metric padrão. O uso de mais valores de rótulo resulta em mais série temporal na métrica definida pelo usuário. Menos valores de rótulo resultam em menos série temporal.

  • É possível alterar os tipos de métricas definidos pelo usuário. Não é necessário usar os tipos predefinidos fornecidos na configuração padrão. Por exemplo, é possível identificar métricas com um determinado nome e usar um tipo diferente, definido pelo usuário, para elas.

  • Se você alterar os tipos de métrica definidos pelo usuário, também será possível alterar os rótulos associados a cada tipo. A configuração padrão tem um único rótulo, mas é possível alterar a chave dele ou adicionar outros rótulos.

Se você alterar os tipos de métrica, precisará definir os novos tipos definidos pelo usuário na API Monitoring. Para mais detalhes, consulte a seção a seguir, Como criar um tipo de métrica.

Exemplo

Suponha que você esteja usando o StatsD para monitorar um aplicativo que consiste em dois serviços, my_service_a e my_service_b. Em cada serviço, você quer exportar para o Monitoring uma métrica de contador que representa o número de solicitações com falha, mas não quer usar os tipos de métrica padrão do StatsD.

Métricas de entrada do collectd

Antes de definir seus próprios tipos de métrica, é importante entender a estrutura de uma métrica do collectd e como uma métrica do StatsD é mapeada por padrão em métricas definidas pelo usuário.

As métricas do collectd, incluindo as do StatsD, contam com os seguintes componentes:

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

Neste exemplo, as métricas do StatsD que você quer exportar têm os seguintes identificadores no collectd:

Componente Valores esperados
Host qualquer um
Plug-in statsd
Instância do plug-in não definido1
Tipo derive2
Instância de tipo [SERVICE_NAME].GET.[CODE]3
[VALUE] qualquer valor4

Observações:
1 No momento, o plug-in StatsD deixa esse componente em branco.
2 Uma métrica de contador do StatsD é mapeada no tipo derive de collectd. 3 Por exemplo, uma instância de tipo pode ser my_service_a.GET.500. 4 [VALUE] costuma ser um carimbo de data/hora e um número de dupla precisão.

A tabela a seguir mostra como esta métrica é mapeada por padrão:

Tipo de StatsD Nome do StatsD Tipo de métrica do Stackdriver Classe da métrica Tipo de valor Marcadores da métrica
Counter my_service_a.GET.500 custom.googleapis.com/statsd/derive Cumulative Int64 metric:my_servce_a.GET.500
Counter my_service_b.GET.403 custom.googleapis.com/statsd/derive Cumulative Int64 metric:my_servce_b.GET.403

Talvez você tenha dificuldades no mapeamento padrão:

  • Esta métrica de contador específica ([SERVICE_NAME].GET.[CODE]) está no mesmo tipo definido pelo usuário que todas as outras métricas de contador. O acesso apenas aos dados dessa métrica é difícil porque o Stackdriver ainda não é compatível com pesquisas de expressões regulares nos rótulos.

  • Não é fácil conseguir dados para serviços individuais ou códigos de resposta individuais nos seus dados. Por exemplo, não é fácil conseguir o número total de erros (de todos os tipos) que ocorreram em my_service_a.

  • A configuração padrão exporta todas as métricas do StatsD para o Stackdriver. Esse pode ser um processo caro para você se estiver interessado apenas em determinadas métricas.

Como projetar um tipo de métrica

Para uma discussão completa sobre a criação de tipos de métrica, consulte Criar um tipo de métrica definido pelo usuário.

O tipo de métrica definido pelo usuário a seguir é uma boa opção para os dados neste exemplo porque contém apenas a métrica do StatsD que você quer usar e os rótulos ajudam a organizar melhor os dados:

  • Tipo: custom.googleapis.com/http/request_errors
  • Rótulos:
    • service_name (STRING): o nome do serviço
    • response_code (INT64): o código de resposta HTTP
  • Tipo: CUMULATIVE
  • Tipo de valor: INT64

A tabela a seguir mostra o mapeamento desejado do StatsD para o Stackdriver:

Tipo de StatsD Nome do StatsD Tipo de métrica do Stackdriver Classe da métrica Tipo de valor Marcadores da métrica
Counter my_service_a.GET.500 custom.googleapis.com/http/request_errors Cumulative Int64 service_name:my_service_a, response_code:500
Counter my_service_b.GET.403 custom.googleapis.com/http/request_errors Cumulative Int64 service_name:my_service_b, response_code:403

Depois de projetar o tipo de métrica, use metricDescriptors.create para criá-lo. Para mais informações sobre como o Monitoring pode criar o tipo de métrica para você, consulte Criação automática de descritores de métrica.

Configuração do mapeamento

Para exportar a métrica do StatsD para o novo tipo de métrica definido pelo usuário, substitua o conteúdo da configuração padrão do plug-in do StatsD, /etc/stackdriver/collectd.d/statsd.conf, pelo seguinte 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 o agente

Reinicie o agente para escolher a nova configuração. Basta executar o seguinte comando na instância de VM:

sudo service stackdriver-agent restart

As informações das métricas definidas pelo usuário começam a ser transmitidas para o Monitoring imediatamente.

Próximas etapas

A personalização do plug-in StatsD é igual à personalização de métricas do collectd no Monitoring. Para saber mais, consulte as seções "Referência" e "Solução de problemas" em Métricas definidas pelo usuário a partir do agente.