influx: Nginx-module-lua клиент для InfluxDB
Установка
Если вы еще не подписались на репозиторий RPM, зарегистрируйтесь. Затем вы можете продолжить с выполнением следующих шагов.
CentOS/RHEL 7 или Amazon Linux 2
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-influx
CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-influx
Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что установлен nginx-module-lua.
Этот документ описывает lua-resty-influx v0.2.1, выпущенный 27 декабря 2017 года.
Эта библиотека предоставляет интерфейс OpenResty для записи точек данных на сервер InfluxDB через UDP и HTTP интерфейсы. Предоставляются интерфейсы на основе объектов и буферизации на уровне рабочего процесса.
Синопсис
Интерфейс объекта:
http {
server {
access_by_lua_block {
local i = require "resty.influx.object"
local influx, err = i:new({
host = "127.0.0.1",
port = 8086,
proto = "http",
db = "db",
hostname = "localhost",
auth = "user:password",
})
if (not influx) then
ngx.say(err)
return
end
influx:set_measurement("foo")
influx:add_tag("foo", "bar")
influx:add_field("value", 1)
influx:buffer()
-- добавьте и буферизуйте дополнительные точки данных
local ok, err = influx:flush()
if (not ok) then
ngx.say(err)
end
}
}
}
Интерфейс буферизации:
http {
init_worker_by_lua_block {
local ibuf = require "resty.influx.buffer"
local ok, err = ibuf.init({
host = "127.0.0.1",
port = 8089,
proto = "udp",
})
if (not ok) then
ngx.log(ngx.ERR, err)
end
}
server {
access_by_lua_block {
local ibuf = require "resty.influx.buffer"
ibuf.buffer({
measurement = "foo",
tags = {
{ foo = "bar" }
},
fields = {
{ value = 1 }
}
})
}
log_by_lua_block {
local ibuf = require "resty.influx.buffer"
ibuf.flush()
}
}
}
Использование
Опции
lua-resty-influx предоставляет чистый интерфейс на основе объектов, а также интерфейс буферизации, который хранит точки данных на уровне рабочего процесса, а затем буферизует их асинхронно через ngx.timer.at. Создание интерфейса буферизации должно обрабатываться на этапе init_worker_by_lua через функцию resty.influx.buffer.init; создание объектно-ориентированного интерфейса должно обрабатываться в вашем соответствующем обработчике фазы через resty.influx.object:new. В обоих случаях доступны следующие опции:
host
По умолчанию: 127.0.0.1
Устанавливает хост, к которому ngx.socket.udp и resty.http попытаются подключиться.
port
По умолчанию: 8086
Устанавливает порт, к которому ngx.socket.udp и resty.http попытаются подключиться. По умолчанию используется 8086, так как протокол по умолчанию - HTTP.
db
По умолчанию: 'lua-resty-influx'
Устанавливает базу данных, к которой resty.http попытается подключиться. Эта опция игнорируется, когда udp является настроенным протоколом.
hostname
По умолчанию: host
Устанавливает имя хоста, для которого resty.http определит заголовок Host для HTTP-запросов. По умолчанию это равно настроенной опции host. Эта опция игнорируется, когда udp является настроенным протоколом.
proto
По умолчанию: http
Устанавливает протокол, по которому resty.influx будет подключаться к удаленному серверу. Обратите внимание, что UDP может обеспечить значительное улучшение производительности, особенно при отправке множества небольших наборов точек данных, но это происходит за счет обработки ошибок и аутентификации.
precision
По умолчанию: ms
Устанавливает точность временной метки, с которой resty.influx будет определять временные метки. В настоящее время поддерживаются ms, s и none; когда настроено none, временная метка не будет отправлена как часть сообщения протокола линии, и удаленный сервер Influx будет использовать наносекундную точность на основе локальных часов сервера.
ssl
По умолчанию: false
Настраивает HTTP-запросы на выполнение TLS-рукопожатия перед отправкой данных. Эта опция игнорируется, когда udp является настроенным протоколом.
auth
По умолчанию: ''
Устанавливает имя пользователя и пароль, представленные для удаленного HTTP(S). Это значение должно быть указано как одна строка в формате user:password. Эта опция игнорируется, когда udp является настроенным протоколом.
Объектно-Ориентированный Интерфейс
Следующие методы доступны через интерфейс объекта:
influx:set_measurement
Синтаксис: influx:set_measurement(string)
Устанавливает измерение для точки данных, связанной с текущим объектом.
influx:add_tag
Синтаксис: influx:add_tag(key, value)
Добавляет тег точки данных в виде пары ключ-значение. Ключи и значения экранируются в соответствии с (https://docs.influxdata.com/influxdb/v1.0/write_protocols/line_protocol_reference/).
influx:add_field
Синтаксис: influx:add_field(key, value)
Добавляет поле точки данных в виде пары ключ-значение. Поля и значения экранируются в соответствии с (https://docs.influxdata.com/influxdb/v1.0/write_protocols/line_protocol_reference/). Целочисленные значения (числовые значения, к которым добавляется i) правильно интерполируются.
influx:stamp
Синтаксис: influx:stamp(time?)
Ставит временную метку на точку данных, связанную с текущим объектом, с необязательным произвольным значением (должно быть предоставлено в виде числа); в противном случае эта метка ставится на объект с соответствующим значением на основе точности, указанной через опции, переданные в new для объектного интерфейса.
influx:clear
Синтаксис: influx:clear()
Очищает измерение, теги и поля на точке данных, связанной с текущим объектом. Обратите внимание, что это вызывается внутренне, когда вызываются buffer или write.
influx:buffer
Синтаксис: local ok, err = influx:buffer()
Буферизует содержимое точки данных, связанной с текущим объектом, для последующей отправки. Возвращает true при успехе; в противном случае возвращает false и строку, описывающую ошибку (например, недопустимые условия для буферизации).
influx:flush
Синтаксис: local ok, err = influx:flush()
Отправляет все буферизованные точки данных, связанные с текущим объектом. Возвращает true при успехе; в противном случае возвращает false и строку, описывающую ошибку (например, оставшиеся данные, ожидающие буферизации, или отсутствие доступных буферизованных точек данных).
influx:write
Синтаксис: local ok, err = inflush:write()
Записывает точку данных, связанную с текущим объектом, без очистки существующего буфера объекта. Это, по сути, сокращенная форма вызова buffer и flush для одной точки данных. Обратите внимание, что ранее буферизованные точки данных все еще остаются в буфере и должны быть отправлены через flush, если это необходимо.
Интерфейс Буферизации
Следующие функции доступны через интерфейс буферизации:
influx.buffer
Синтаксис: influx.buffer(data_table)
Буферизует новую точку данных в буфере процесса на уровне рабочего процесса. data_table должен быть таблицей, содержащей следующие ключи:
measurement: строка, обозначающая измерение точки данныхtags: таблица с целочисленными индексами, содержащая таблицы пар ключ-значение, обозначающие элементы тегов. См. синопсис для примеров.fields: таблица с целочисленными индексами, содержащая таблицы пар ключ-значение, обозначающие элементы полей. См. синопсис для примеров.
Обратите внимание, что в настоящее время временная метка автоматически устанавливается с точностью ms.
influx.flush
Синтаксис: influx.flush()
Записывает все точки данных, буферизованные в текущем рабочем процессе, на настроенный хост Influx. Возвращает true при успехе; в противном случае возвращает false и строку, описывающую ошибку из ngx.timer.at.
Эта операция возвращает немедленно и выполняется асинхронно.
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-influx.