O envio de dados para o statsd não funciona em alguns locais com o content_by_lua_file

2

Antes

Até recentemente eu usei o nginx 1.4.x com zebrafishlabs / nginx-statsd como um proxy reverso para openresty (sim, Eu sei, o nginx por trás do nginx é estúpido - continue lendo por favor) com a seguinte configuração nginx:

location /track {
  statsd_count "tracker.track_$scheme" 1;
  proxy_pass http://localhost:10081/track;
  proxy_set_header Host $host;
}

.. e a seguinte localização openresty (escuta na porta 10081 TCP, claro) config:

location /track {
  content_by_lua_file 'conf/track.lua';
}

.. e funcionou. Por favor, note que eu tenho alguns locais como esse - é importante, você verá mais tarde.

As estatísticas foram empurradas para o statsd e os scripts foram executados.

Agora

Recentemente eu decidi remover o front-end nginx e usar o openresty sozinho.

Agora estou usando o openresty 1.5.12.1 com zebrafishlabs / nginx-statsd compilado e a seguinte configuração (óbvia):

location /track {
  statsd_count "tracker.track_$scheme" 1;
  content_by_lua_file 'conf/track.lua';
}

Mas depois dessa alteração às vezes, minhas estatísticas não estão sendo enviadas para o statsd .

Aparentemente, isso acontece se o meu script de lua terminar a execução com o comando ngx.redirect lua. .

Eu tentei usar essa configuração como solução alternativa:

location /track {
  statsd_count "tracker.track_$scheme" 1;
  proxy_pass http://127.0.0.1/track-do;
}

location /track-do {
  content_by_lua_file 'conf/track.lua';
}

... mas tenho resultados muito estranhos:

Quando mudei a localização da minha "pista" desta forma, ela começou a funcionar corretamente - todas as estatísticas foram empurradas para o statsd, o código foi executado.

.. mas ao mesmo tempo minha outra localização, "estática", que não foi alterada parou de empurrar qualquer coisa para statsd (!).

Acho que está relacionado às fases de processamento do nginx. zebrafishlabs / nginx-statsd faz logging na última fase log enquanto content_by_lua_file é processado na fase de conteúdo e ngx.redirect é que meus scripts usam documentação afirma que "(...) encerra o processamento da requisição atual e nunca retorna." mas proxy_pass também está na fase de conteúdo e diretivas statsd foram executadas quando eu as usei juntas em nginx ...

1. Você pode me ajudar neste problema específico?

2. Você tem algum sucesso usando zebrafishlabs / nginx-statsd com openresty? Como você faz isso?

PS Eu já pensei em usar lonelyplanet / openresty-statsd e provavelmente seria uma solução alternativa, mas eu teria para mover todo o meu uso statsd dentro do meu script que eu não quero mantê-los limpos.

ATUALIZAÇÃO: lonelyplanet / openresty-statsd way também não funcionou!?

    
por Greg Dubicki 20.05.2014 / 13:15

1 resposta

0

No final, fiz uma solução - comecei a escrever os logs de acesso em um arquivo, analise-os por logstash e seu saída statsd . Funciona.

    
por 23.06.2014 / 16:27