У меня есть метрический клиент, который выглядит примерно так:
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()
Это публикует журнал 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"
Это происходит во 2-м запросе к nginx;в первый раз после перезапуска все нормально ...
Обновление 2
Это происходит, только если у меня есть файл metrics
и require
в неммой другой.Поэтому, если я создаю экземпляр клиента resty_dogstatsd
внутри основного файла lua, то все в порядке ...