Перейти к содержанию

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.