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 enviar métricas personalizadas ao Monitoring. Esse plug-in está disponível apenas no agente do Stackdriver Monitoring para Linux.

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

Descoberta

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. Faça o download do statsd.conf e coloque-o em /opt/stackdriver/collectd/etc/collectd.d/ usando este 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. 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 saber mais sobre outras opções de configuração do plug-in StatsD, consulte Plugin:StatsD em collectd.org.

Mapeamento padrão para métricas personalizadas

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 personalizadas 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 personalizada correspondente.

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

    O valor do rótulo metric é diferente para o tipo de métrica Timer. Ele inclui o nome da métrica e de um 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 personalizadas 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 das métricas "timer" 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 personalizadas do Stackdriver. Para ver uma introdução sobre as métricas do Stackdriver, consulte Métricas, séries temporais e recursos. Para conferir mais detalhes sobre as métricas personalizadas, consulte esta página.

É 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éries temporais na métrica personalizada. Por outro lado, quanto menos valores, menor será o número de séries.

  • É possível alterar os tipos de métrica personalizada. Não é necessário usar os tipos predefinidos fornecidos na configuração padrão. Por exemplo, identifique as métricas com um determinado nome e use um tipo de métrica personalizada diferente para elas.

  • Se você alterar os tipos de métrica personalizada, também será possível mudar 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 de métrica personalizada na API Monitoring. Para ver mais detalhes, consulte a seção a seguir Como projetar um tipo de métrica personalizada.

Exemplo

Vamos supor que você esteja usando o StatsD para monitorar um aplicativo composto por dois serviços: my_service_a e my_service_b. Em cada serviço, você quer exportar para o Monitoring uma métrica de contagem 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 os próprios tipos de métrica personalizada, é importante entender a estrutura de uma métrica do collectd e como as do StatsD são mapeadas para métricas personalizadas por padrão.

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 do tipo [SERVICE_NAME].GET.[CODE]3
[VALUE] qualquer valor4

Observações:
1 O plug-in do StatsD deixa esse componente vazio.
2 Uma métrica de contagem 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] 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

Você pode ter dificuldades no mapeamento padrão:

  • Esta métrica de contagem ([SERVICE_NAME].GET.[CODE]) está no mesmo tipo de métrica personalizada que todas as outras métricas "counter". Conseguir apenas os dados dessa métrica não é uma tarefa fácil porque o Stackdriver não é compatível atualmente com pesquisas de expressões regulares nos rótulos.

  • Conseguir dados de serviços ou códigos de resposta individuais não é uma tarefa fácil. Por exemplo, é complicado 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 personalizada

Para ver informações completas sobre a criação de tipos de métrica personalizada, consulte Como criar métricas personalizadas.

O tipo de métrica personalizada a seguir é uma boa opção para os dados neste exemplo. Isso porque ele contém apenas a métrica do StatsD do seu interesse, e é possível organizar melhor os dados com as opções de marcadores dele:

  • nome: custom.googleapis.com/http/request_errors
  • marcadores:
    • service_name (STRING): o nome do serviço
    • response_code (INT64): o código da resposta HTTP
  • classe: CUMULATIVE
  • tipo: 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 saber mais sobre como o Monitoring pode criar o tipo de métrica para você, consulte Criação automática de métricas personalizadas.

Configuração do mapeamento

Para exportar a métrica do StatsD para o novo tipo de métrica personalizada, substitua o conteúdo da configuração padrão do plug-in do StatsD, /opt/stackdriver/collectd/etc/collectd.d/statsd.conf, pelo código a seguir:

<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>

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 da métrica personalizada começarão a ser transmitidas para o Monitoring imediatamente.

Próximas etapas

A personalização do plug-in StatsD é um caso especial de customização das métricas do collectd no Monitoring. Para saber mais, consulte as seções "Referência" e "Solução de problemas" em Métricas personalizadas do agente.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Stackdriver Monitoring
Precisa de ajuda? Acesse nossa página de suporte.