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:
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)
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.
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 collectdplugin
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 denominadametric
.O valor da etiqueta
metric
é diferente para o tipo de métricaTimer
: 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 | derive 2 |
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.