Lua resty_dogstatsd публикует только первый экземпляр - PullRequest
0 голосов
/ 23 мая 2018

У меня есть метрический клиент, который выглядит примерно так:

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, то все в порядке ...

...