我有一个公制客户端,看起来像:
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('Updating metric metric1');
_statsd:increment(metric1 1, 1)
end
return metrics;
然后在我的应用程序中导入并使用它
local metrics = require('module.metrics')
-- somewhere, some condition
metrics.incMetric1()
这会在datadog中发布日志Updating metric metric1
,我可以看到它。但这只会发布第一个实例。在我重新启动service nginx restart
之前,我不会再获得任何增量。
更新
所以我在start.lua
中有一个/etc/nginx/conf.d/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
客户端,那么一切都很好......