perfmetrics fornece uma maneira simples de adicionar as métricas de desempenho de software para bibliotecas e aplicativos Python. & Nbsp; Use perfmetrics para encontrar os verdadeiros gargalos em um aplicativo de produção.
O pacote perfmetrics é um cliente do daemon Statsd por Etsy, que é por sua vez um cliente de grafite (especificamente, o daemon de carbono). Como o pacote perfmetrics envia pacotes UDP para Statsd, perfmetrics acrescenta sem atrasos I / O para aplicações e pouca sobrecarga CPU. Ele pode funcionar igualmente bem em software ou de rosca (síncrono) orientada a eventos (assíncrono).
Uso
Use os decoradoresmetric emetricmethod para embrulhar funções e métodos que devem enviar calendário e Estatísticas de chamada para Statsd. Adicione os decoradores para qualquer função ou método que poderia ser um gargalo, incluindo funções de biblioteca.
Amostra:
de perfmetrics importar métrica
de perfmetrics importação metricmethod
metric
myfunction def ():
& Nbsp; "" "Faça algo que pode ser caro" ""
classe MyClass (objeto):
& Nbsp;metricmethod
& Nbsp; def mymethod (self):
& Nbsp; "" "Faça alguma outra coisa, possivelmente caro" ""
Em seguida, dizer perfmetrics como se conectar a Statsd. (Até que você fizer isso, os decoradores não têm efeito.) Idealmente, a sua aplicação deve ler o URI Statsd a partir de um arquivo de configuração em tempo de inicialização, mas o exemplo abaixo usa um URI codificado pela simplicidade:
de perfmetrics importação set_statsd_client
set_statsd_client ('statsd: // localhost: 8125 ")
for i in xrange (1000):
& Nbsp; myfunction ()
& Nbsp;. MyClass () mymethod ()
Se você executar esse código, ele será acionado 2.000 pacotes UDP na porta 8125. No entanto, a menos que você já tenha instalado Grafite e Statsd, todos esses pacotes serão ignorados e caiu. Dropping é uma coisa boa: você não quer que seu aplicativo de produção falhar ou retardar só porque o seu sistema de monitoramento de desempenho for interrompido ou não trabalhando.
Instale Grafite e Statsd para receber e representar graficamente as métricas. Uma boa maneira de instalá-los é o exemplo graphite_buildout no github, que instala Grafite e Statsd em um local personalizado sem acesso root.
Enfiar
Enquanto a maioria dos programas de enviar métricas de qualquer segmento a um único servidor mundial Statsd, alguns programas precisam usar um servidor Statsd diferente para cada segmento. Se você só precisa de um servidor mundial Statsd, use a função set_statsd_client na inicialização do aplicativo. Se você precisa usar um servidor Statsd diferente para cada segmento, use o objeto statsd_client_stack em cada segmento. Use o empurrão, pop, e métodos claros.
Dicas Grafite
Lojas de grafite cada métrica como uma série temporal com múltiplas resoluções. A segunda resolução lojas graphite_buildout amostra de 10 por 48 horas, a resolução de uma hora por 31 dias, e resolução de 1 dia para 5 anos. Para produzir um valor de granulação média a partir de um valor de grão fino, Grafite calcula o valor médio (média) para cada intervalo de tempo.
Porque Graphite calcula valores médios implicitamente, a maneira mais sensata de tratar contadores em grafite é como um "hits por segundo" valor. Dessa forma, um gráfico pode produzir resultados corretos, não importa qual o nível de resolução que utiliza.
Tratar contadores como batidas por segundo tem consequências lamentáveis, no entanto. Se alguma métrica vê um pico 1000 hit em um segundo, em seguida, cai para zero por pelo menos 9 segundos, o gráfico de Grafite para essa métrica vai mostrar um pico de 100, não 1000, uma vez que Grafite recebe métricas a cada 10 segundos e o pico parece Grafite como 100 acessos por segundo ao longo de um período de 10 segundos.
Se você quiser que o seu gráfico para mostrar mil acessos em vez de 100 batidas por segundo, aplicar a função de Grafite hitcount (), usando uma resolução de 10 segundos ou mais. A função hitcount converte valores por segundo para aproximar contagens hit-primas. Certifique-se de fornecer um valor de resolução suficientemente grande para ser representado por pelo menos uma largura de pixel no gráfico resultante, caso contrário, Grafite irá calcular médias da contagem de vida e produzir um gráfico confuso.
Ele geralmente faz sentido para tratar valores nulos em grafite como zero, no entanto, que não é o padrão; por padrão, Grafite desenha nada para valores nulos. Você pode ativar essa opção para cada gráfico.
Documentação de referência
Decoradores
metric
& Nbsp; Notifica Statsd usando UDP toda vez que a função é chamada. Envia ambas as contagens de chamadas e informações timing. O nome da métrica enviado para Statsd é
metricmethod
& Nbsp; Comometric, mas o nome da métrica Statsd é
Metric (STAT = None, taxa = 1, método = False, conte = True, o calendário = True)
& Nbsp; A gerente decorador ou de contexto com opções.
& Nbsp; de estatísticas é o nome da métrica para enviar; defini-lo como Nenhum de usar o nome da função ou método. taxa permite reduzir o número de pacotes enviados para Statsd selecionando uma amostra aleatória; por exemplo, configurá-lo para 0,1 para enviar um décimo dos pacotes. Se o parâmetro do método é verdade, o nome da métrica padrão é baseado no nome da classe do método, em vez de o nome do módulo. Definir contagem para False desativa as estatísticas contador enviados para Statsd. Definir tempo para False desativa as estatísticas de tempo enviados para Statsd.
& Nbsp; o uso da amostra como um decorador:
& Nbsp;Metric ('frequent_func', taxa = 0,1, o calendário = False)
& Nbsp; def frequent_func ():
& Nbsp; "" "Faça alguma coisa rápida e frequentemente" ""
& Nbsp; o uso da amostra como um gerente de contexto:
& Nbsp; def do_something ():
& Nbsp; com Metric ('doing_something'):
& Nbsp; passe
& Nbsp; Se perfmetrics envia pacotes com muita freqüência, os pacotes UDP podem ser perdidos eo desempenho do aplicativo pode ser afetada. Você pode reduzir o número de pacotes e a sobrecarga de CPU usando o decorador Metric com opções, em vez de métrica ou metricmethod. O exemplo decorador acima usa uma taxa de amostragem e um nome métrica estática. Ele também desabilita a coleta de informação de tempo.
& Nbsp; Ao usar Metric como gerente de contexto, você deve fornecer o parâmetro estatístico ou nada será gravado.
Funções
statsd_client ()
& Nbsp; Retorne o StatsdClient configurado no momento. Retorna o cliente de segmento local, se houver, ou o cliente global, se houver um, ou nenhum.
set_statsd_client (client_or_uri)
& Nbsp; Defina o StatsdClient global. O client_or_uri pode ser um StatsdClient, um statsd: // URI, ou nenhum.
statsd_client_from_uri (URI)
& Nbsp; Criar um StatsdClient de um URI. A URI é típico statsd: // localhost: 8125. Parâmetros de consulta opcionais suportados são prefixo e gauge_suffix. O prefixo padrão é vazio eo gauge_suffix padrão é .. Veja a documentação StatsdClient para mais informações sobre gauge_suffix.
Métodos StatsdClient
Código Python pode enviar métricas personalizadas por primeira recebendo o StatsdClient atual usando o método statsd_client (). Note-se que statsd_client () retorna Nenhum se nenhum cliente foi configurado.
A maioria dos métodos abaixo têm parâmetros velocidade e buf opcionais. O parâmetro de taxa, quando definido como um valor menor que 1, faz com que StatsdClient para enviar uma amostra aleatória de pacotes em vez de cada pacote. Se o parâmetro buf é uma lista, StatsdClient acrescenta o conteúdo do pacote para a lista de buf, em vez de enviar o pacote, tornando-se possível enviar várias atualizações em um único pacote. Tenha em mente que o tamanho dos pacotes UDP é limitada (o limite varia de acordo com a rede, mas 1000 bytes é geralmente um bom palpite) e quaisquer bytes extras serão ignorados silenciosamente.
timing (estatísticas, o valor, a taxa = 1, buf = None)
& Nbsp; Gravar informações timing. estatística é o nome da métrica para gravar e valor é a medição de tempo em milissegundos. Note-se que Statsd mantém vários pontos de dados para cada métrica tempo, por isso o timing métricas podem ter mais espaço em disco do que os contadores ou medidores.
gauge (estatísticas, valor, sufixo = None, taxa = 1, buf = None)
& Nbsp; Atualize um valor gauge. estatística é o nome da métrica para gravar e valor é o novo valor de bitola. Um medidor representa um valor persistente como um tamanho de piscina. Porque medidores de diferentes máquinas, muitas vezes conflitos, um sufixo é geralmente aplicado para avaliar nomes. Se o parâmetro sufixo é uma string (incluindo uma cadeia vazia), ele substituirá o sufixo bitola padrão.
incr (estatísticas, count = 1, taxa = 1, buf = None)
& Nbsp; incrementar um contador de contagem. Note-se que Statsd limpa todos os valores do contador cada vez que envia as métricas a grafite, o que geralmente acontece a cada 10 segundos. Se você precisar de um valor persistente, pode ser mais apropriado usar um medidor, em vez de um contador.
decr (estatísticas, count = 1, taxa = 1, buf = None)
& Nbsp; Diminuir um contador de contagem.
sendbuf (buf)
& Nbsp; Envie o conteúdo da lista buf para Statsd
O que é novo nesta versão:
- Adicionado um Pyramid opcional. tween e um app de filtro WSGI semelhante que configura o cliente Statsd para cada solicitação.
O que é novo na versão 0.9.4:.
- otimizado o uso de taxas de amostragem reduzidos
O que é novo na versão 0.9.2:
- Metric agora pode ser usado tanto como um decorador ou um gerente de contexto.
- Feita a assinatura do StatsdClient mais como StatsClient de James Socol.
Requisitos :
- Python
Comentários não encontrado