Lua resty_dogstatsd 仅发布第一个实例

我有一个看起来像下面这样的指标客户端:

package.path = package.path .. ';../?.lua'

local metrics = {}

local resty_dogstatsd = require('resty_dogstatsd')
local logger = require('module.utils.logger')
local _statsd = resty_dogstatsd.new({
    statsd = {
        host = config.dataDog.host,
        port = config.dataDog.port,
        namespace = config.dataDog.namespace
    },
    tags = config.dataDog.tags
})

function metrics.incMetric1 ()
    logger.debug('正在更新指标 metric1');

    _statsd:increment(metric1 1, 1)
end

return metrics;

然后在我的应用程序中导入并使用它

local metrics = require('module.metrics')

-- 在某处,某个条件
metrics.incMetric1()

这将在数据狗中发布日志 正在更新指标 metric1,我可以看到它。 但是这只会发布第一个实例。 除非我重新启动 service nginx restart,否则我不会得到任何进一步的增量。

更新

所以我在 /etc/nginx/conf.d/start.lua 中有一个 start.lua,它是:

package.path = package.path .. ';/path/to/my/app/?.lua'

local app = require('app.init');
app.start()

而 nginx 配置是

rewrite_by_lua_file /etc/nginx/conf.d/start.lua;

如果我将度量代码复制/粘贴到 start.lua 中,则每次更新指标。 为什么?!

更新

我在错误日志中注意到了这一点:

2018/05/23 10:02:07 [error] 24483#0: *6 attempt to send data on a closed socket: u:some-hex, c:some-hex, client: 123.12.0.123, server: *.my-url.com, request: "GET / HTTP/1.1", host: "my.my-url.com"

这发生在第二次对 nginx 的请求中; 重新启动后的第一次调用时,这一切都很好……

更新2

只有当我有一个 metrics 文件并在我的其他文件中 require 它时才会发生。 因此,如果我在主 Lua 文件中实例化 resty_dogstatsd 客户端,则一切都很好……

点赞