Plugin StatsD

O StatsD é um protocolo para enviar métricas e um daemon para agregação de dados de métricas. Ao configurar o plug-in StatsD do agente de monitorização, faz com que o agente funcione como um daemon StatsD que escreve métricas no Monitoring.

A utilização do plug-in StatsD com a respetiva configuração predefinida é a forma mais fácil de obter as suas métricas definidas pelo utilizador na monitorização. O plug-in StatsD só está disponível no agente do Stackdriver Monitoring do Linux.

O agente de monitorização também pode exportar outras métricas do collectd como métricas definidas pelo utilizador, mas não existe uma configuração predefinida simples. Consulte a secção Métricas definidas pelo utilizador a partir do agente para ver mais detalhes.

Esta funcionalidade só está disponível para agentes executados no Linux. Não está disponível no Windows.

Descoberta

A monitorização não deteta automaticamente o StatsD. Para usar as métricas do StatsD, configure o plug-in do StatsD conforme descrito na secção seguinte.

Configurar o plugin StatsD

Pré-requisitos

O plugin StatsD requer a versão 5.5.2-356 ou posterior do agente de monitorização. Para atualizar o agente, consulte o artigo Atualizar o agente.

Ativar o plug-in

Faça o seguinte na instância de VM suportada que executa o Linux:

  1. Transfira statsd.conf 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 ficheiro de configuração predefinido indica ao agente que aceite métricas do StatsD na porta predefinida do StatsD, 8125.

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

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

    sudo service stackdriver-agent restart
    

Para mais informações sobre o plugin collectd statsd, consulte o artigo Plugin:StatsD.

Mapeamento predefinido para métricas definidas pelo utilizador

Para começar rapidamente, o plug-in StatsD do agente inclui uma configuração collectd predefinida que mapeia as métricas StatsD para métricas definidas pelo utilizador do Stackdriver:

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

  • Cada tipo de métrica do StatsD, contido no componente type do collectd, tem um nome de tipo de métrica definido pelo utilizador correspondente.

  • O nome da métrica do StatsD, contido no componente type_instance do collectd, é armazenado como o valor de uma etiqueta denominada metric.

    O valor da etiqueta metric é diferente para o tipo de métrica Timer: inclui o nome da métrica e um nome do contador: média, limite superior, limite inferior, soma, percentil 50 e percentil 95.

Por exemplo, a tabela seguinte mostra como os tipos de métricas StatsD suportados e o nome da métrica são mapeados para as métricas definidas pelo utilizador do Monitoring:

Tipo de StatsD Nome do StatsD Tipo de métrica do Stackdriver Tipo de métrica Tipo de valor Etiquetas de métricas
Contrapropor my.counter custom.googleapis.com/statsd/derive Cumulativo Int64 metric:my.counter
Indicador my.gauge custom.googleapis.com/statsd/gauge Indicador Duplo metric:my.gauge
Definir my.set custom.googleapis.com/statsd/objects Indicador Duplo metric:my.set
Temporizador1 my.timer custom.googleapis.com/statsd/latency Indicador Duplo métrica:my.timer-average
(igual) (igual) (igual) metric:my.timer-upper
(igual) (igual) (igual) métrica: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) metric:my.timer-count

Notas:
1 Existe uma sequência de métricas de temporizador statsd recebidas com o mesmo nome. O agente agrega métricas de temporizador StatsD e exporta dados de resumo para 7 séries cronológicas diferentes.

Para mais informações sobre os tipos de StatsD, consulte a especificação do StatsD.

Personalizar métricas exportadas

A configuração predefinida do StatsD foi concebida para começar rapidamente. Esta secção ajuda a personalizar a configuração de acordo com necessidades mais complexas.

Deve conhecer as métricas definidas pelo utilizador. Para uma introdução às métricas, consulte o artigo Métricas, séries cronológicas e recursos. Para mais informações, consulte o artigo Vista geral das métricas definidas pelo utilizador.

Pode personalizar o seguinte:

  • Pode alterar os valores atribuídos à etiqueta metric predefinida. A utilização de mais valores de etiqueta resulta em mais séries cronológicas na sua métrica definida pelo utilizador. A utilização de menos valores de etiquetas resulta em menos séries cronológicas.

  • Pode alterar os tipos de métricas definidas pelo utilizador. Não tem de usar os tipos predefinidos fornecidos na configuração predefinida. Por exemplo, pode identificar métricas com um determinado nome e usar um tipo de métrica definido pelo utilizador diferente para as mesmas.

  • Se alterar os tipos de métricas definidas pelo utilizador, também pode alterar as etiquetas associadas a cada tipo. A configuração predefinida tem uma única etiqueta, mas pode adicionar mais etiquetas ou alterar a chave da etiqueta.

Se alterar os tipos de métricas, deve definir os novos tipos de métricas definidas pelo utilizador na API Monitoring. Para ver detalhes, consulte a secção seguinte, Conceber um tipo de métrica.

Exemplo

Suponha que está a usar o StatsD para monitorizar uma aplicação composta por dois serviços, my_service_a e my_service_b. Para cada serviço, quer exportar para o Monitoring uma métrica de contador que represente o número de pedidos com falhas. Não quer usar os tipos de métricas StatsD predefinidos.

Métricas collectd recebidas

Antes de definir os seus próprios tipos de métricas, é importante compreender a estrutura de uma métrica collectd e como uma métrica StatsD é mapeada por predefinição para métricas definidas pelo utilizador.

As métricas do Collectd, incluindo as métricas do StatsD, incluem os seguintes componentes:

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

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

Componente Valores esperados
Anfitrião qualquer
Plug-in statsd
Instância do plug-in unset1
Tipo derive2
Type instance [SERVICE_NAME].GET.[CODE]3
[VALUE] qualquer valor4

Notas:
1 Atualmente, o plug-in StatsD deixa este componente vazio.
2 Uma métrica de contador do StatsD é mapeada para o tipo derive do collectd. 3 Por exemplo, uma instância de tipo pode ser my_service_a.GET.500. 4 [VALUE] é normalmente uma data/hora e um número de precisão dupla.

A tabela seguinte mostra como esta métrica seria mapeada por predefinição:

Tipo de StatsD Nome do StatsD Tipo de métrica do Stackdriver Tipo de métrica Tipo de valor Etiquetas de métricas
Contrapropor my_service_a.GET.500 custom.googleapis.com/statsd/derive Cumulativo Int64 metric:my_servce_a.GET.500
Contrapropor my_service_b.GET.403 custom.googleapis.com/statsd/derive Cumulativo Int64 metric:my_servce_b.GET.403

A predefinição da associação pode apresentar algumas dificuldades:

  • Esta métrica de contador específica ([SERVICE_NAME].GET.[CODE]) está no mesmo tipo de métrica definida pelo utilizador que todas as outras métricas de contador. Não pode obter facilmente os dados apenas desta métrica, porque o Stackdriver não suporta atualmente pesquisas de expressões regulares em etiquetas.

  • Não pode obter facilmente dados de serviços individuais ou códigos de resposta individuais nos seus dados. Por exemplo, não pode obter facilmente o número total de erros (de todos os tipos) que ocorreram em my_service_a.

  • A configuração predefinida exporta todas as métricas do StatsD para o Stackdriver, o que pode ser dispendioso se tiver interesse apenas em determinadas métricas.

Conceber um tipo de métrica

Para uma discussão completa sobre a criação de tipos de métricas, consulte o artigo Crie um tipo de métrica definido pelo utilizador.

O seguinte tipo de métrica definida pelo utilizador é uma escolha razoável para os dados neste exemplo, porque contém apenas a métrica StatsD na qual tem interesse e porque a escolha de etiquetas ajuda a organizar melhor os dados:

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

A tabela seguinte mostra o mapeamento pretendido do StatsD para o Stackdriver:

Tipo de StatsD Nome do StatsD Tipo de métrica do Stackdriver Tipo de métrica Tipo de valor Etiquetas de métricas
Contrapropor my_service_a.GET.500 custom.googleapis.com/http/request_errors Cumulativo Int64 service_name:my_service_a, response_code:500
Contrapropor my_service_b.GET.403 custom.googleapis.com/http/request_errors Cumulativo Int64 service_name:my_service_b, response_code:403

Depois de conceber o tipo de métrica, crie-o através de metricDescriptors.create. Para informações sobre como permitir que a monitorização crie o tipo de métrica para si, consulte o artigo Criação automática de descritores de métricas.

Configuração do mapeamento

Para exportar a métrica StatsD para o novo tipo de métrica definida pelo utilizador, substitua o conteúdo da configuração do plugin StatsD predefinido, /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>

Reinicie o agente

Reinicie o agente para aplicar a nova configuração executando o seguinte comando na instância de VM:

sudo service stackdriver-agent restart

As informações das métricas definidas pelo utilizador começam a fluir para a monitorização imediatamente.

Passos seguintes

A personalização do plug-in StatsD é igual à personalização das métricas do collectd para a monitorização. Para mais informações, consulte as secções Referência e Resolução de problemas de Métricas definidas pelo utilizador a partir do agente.