在某些位置,使用 content_by_lua_file 发送数据到 statsd 不起作用

在某些位置,使用 content_by_lua_file 发送数据到 statsd 不起作用

直到最近,我还使用 nginx 1.4.xzebrafishlabs/nginx-statsd作为 openresty 的反向代理(是的,我知道,nginx 后面的 nginx 很愚蠢 - 请继续阅读),使用以下位置 nginx 配置:

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

..以及以下位置 openresty (当然,监听 TCP 端口 10081) 配置:

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

..而且成功了。请注意,我有几个这样的位置 - 这很重要,你稍后会看到。

统计数据被推送至 statsd 并且脚本被执行。


现在

最近决定删除前端nginx,单独使用openresty。

现在我正在使用 openresty 1.5.12.1,其中编译了 zebrafishlabs/nginx-statsd 以及以下(明显的)配置:

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

但经过这次改变有时我的统计数据没有被推送到 statsd

显然,如果我的 lua 脚本以 ngx.redirect lua 命令结束执行,就会发生这种情况。

我尝试使用此配置作为解决方法:

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';
}

...但我得到了非常奇怪的结果:

当我以这种方式改变我的“轨道”位置时,它开始正常工作 - 所有统计数据推送到 statsd,代码执行。

..但与此同时,我的另一个位置“静态”,没有改变,停止了推送任何事物到 statsd (!)。

我认为这与 nginx 处理阶段有关。zebrafishlabs/nginx-statsd 在最后的日志阶段进行日志记录,而 content_by_lua_file 在内容阶段进行处理,并且我的脚本使用的 ngx.redirect 文档指出它“(...) 终止当前请求的处理并且永不返回。”但 proxy_pass 也在内容阶段,当我在 nginx 中一起使用它们时,statsd 指令就会运行……

1. 你能帮助我解决这个问题吗?

2. 您是否成功将 zebrafishlabs/nginx-statsd 与 openresty 结合使用?您是如何做到的?

PS我已经考虑使用aloneplanet/openresty-statsd这可能是一个可行的解决方法,但我必须将所有 statsd 的使用移到我的脚本中,而我并不想保持它们清洁。

更新:aloneplanet/openresty-statsd 方式也不起作用!?

答案1

最后我找到了一个解决方法——开始将访问日志写入文件,然后通过以下方式进行分析日志存储和它的statsd 输出插件。 有用。

相关内容