
InfluxDB – это база данных временных рядов, предназначенная для эффективного хранения и обработки больших объемов данных, которые изменяются во времени. Она широко используется для мониторинга, анализа и визуализации данных временных рядов, таких как метрики, логи и события.
И вот с этой технологией мы сегодня и поработаем пока выдалось немного свободного времени.
Установка InfluxDB (для Ubuntu 20.04 и выше)
Установка немного волшебная, но тут уж что нашел и главное работает.
# wget -q https://repos.influxdata.com/influxdata-archive_compat.key
# echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
# echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
# apt-get update
# apt-get install influxdb2
Активируем сервис InfluxDB и пробуем подключиться
Активируем автозапуск и запускаем.
# systemctl enable influxdb
# systemctl start influxdb
Подключаемся к консоли.
# influx v1 shell
InfluxQL Shell dev
Connected to InfluxDB OSS v2.7.11
>
Пробуем подключиться к удаленному хосту и первым делом проверяем доступность.
$ influx ping --host "http://srv-prod-adman-01.pikur.art:8086"
OK
И собственно подключаемся.
$ influx v1 shell --host "http://srv-prod-adman-01.pikur.art:8086"
InfluxQL Shell dev
Connected to InfluxDB OSS v2.7.11
>
Висеть без авторизации в диком интернете это как вы понимаете странная идея и поэтому нам надо защитить нашу базу данных от несанкционированного доступа.
Немного о безопасности в InfluxDB
Во-первых, мы запустим мастер настройки сервера и создадим пользователя и т.п.
# influx setup
> Welcome to InfluxDB 2.0!
? Please type your primary username influx
? Please type your password **********
? Please type your password again **********
? Please type your primary organization name interlan
? Please type your primary bucket name default
? Please type your retention period in hours, or 0 for infinite 0
? Setup with these parameters?
Username: influx
Organization: interlan
Bucket: default
Retention Period: infinite
Yes
User Organization Bucket
influx interlan default
Теперь мы можем использовать удобный WEB-интерфейс для управления сервером который будет находиться по адресу http://influx.pikur.art:8086.

Для работы из консоли при помощи Influx CLI нам необходимо созать вайл конфигурации с созданными логином и паролем.
# influx config create -n local -u http://localhost:8086 -p influx:xxxxPASSWORDxxx -o interlan
Active Name URL Org
local http://localhost:8086 interlan
Запрашиваем конфигурацию сервера:
# influx server-config
{
"assets-path": "",
"bolt-path": "/var/lib/influxdb/influxd.bolt",
"e2e-testing": false,
..........
"vault-client-timeout": 0,
"vault-max-retries": 0,
"vault-token": ""
}
Пробуем сделать то же самое с удаленного компьютера без авторизации и получаем ошибку авторизации.
$ influx server-config --host "http://srv-prod-adman-01.pikur.art:8086"
Error: failed to retrieve config: 401 Unauthorized: unauthorized access
Аналогично создаем конфигурацию для удаленного подключения.
$ influx config create -n interlan -u http://influx.pikur.art:8086 -p influx:xxxPASSWORDxxxx -o interlan
Проверяем, что все работает.
$ influx server-config --host "http://srv-prod-adman-01.pikur.art:8086"
{
"assets-path": "",
"bolt-path": "/var/lib/influxdb/influxd.bolt",
"e2e-testing": false,
"engine-path": "/var/lib/influxdb/engine",
"feature-flags": null,
"flux-log-enabled": false,
"hardening-enabled": false,
.......
Второе, что рекомендуется сделать это настроить TLS-соединение для предотвращения перехвата трафика. Для этого, мы назначим нашему InfluxDB-серверу DNS-имя influx.pikur.art, а wildcard-сертификат у меня уже есть.
В Ubuntu запуск сервиса осуществляется хитрым скриптом /usr/lib/influxdb/scripts/influxd-systemd-start.sh и фактически он достает путь до ключа и сертификата и проверяет установку ключа использования TLS.
Выглядит скрипт вот таким образом:
#!/bin/bash -e
/usr/bin/influxd &
PID=$!
echo $PID > /var/lib/influxdb/influxd.pid
PROTOCOL="http"
BIND_ADDRESS=$(influxd print-config --key-name http-bind-address)
TLS_CERT=$(influxd print-config --key-name tls-cert | tr -d '"')
TLS_KEY=$(influxd print-config --key-name tls-key | tr -d '"')
if [ -n "${TLS_CERT}" ] && [ -n "${TLS_KEY}" ]; then
echo "TLS cert and key found -- using https"
PROTOCOL="https"
fi
HOST=${BIND_ADDRESS%:*}
HOST=${HOST:-"localhost"}
PORT=${BIND_ADDRESS##*:}
set +e
attempts=0
url="$PROTOCOL://$HOST:$PORT/ready"
result=$(curl -k -s -o /dev/null $url -w %{http_code})
while [ "${result:0:2}" != "20" ] && [ "${result:0:2}" != "40" ]; do
attempts=$(($attempts+1))
echo "InfluxDB API at $url unavailable after $attempts attempts..."
sleep 1
result=$(curl -k -s -o /dev/null $url -w %{http_code})
done
echo "InfluxDB started"
set -e
Если посмотреть на описание самого сервиса, то мы можем увидеть, что он запускается от имени системного пользователя influxdb который доступа к нашим сертификатам и ключам Let’s encrypt не имеет и при старте мы получим ошибку доступа.
Следовательно, надо скопировать сертификаты каталог с конфигурацией и дополнить конфигурацию в файле /etc/influxdb/config.toml следующими параметрами.
tls-cert = "/etc/influxdb/fullchain.pem"
tls-key = "/etc/influxdb/privkey.pem"
Проверяем доступ к web-интерфейсу по https и доступ из интерфейса командной строки.
$ influx ping --host "https://srv-prod-adman-01.pikur.art:8086"
OK
Как мы видим, все работает и можем приступать к настройке telegraf для сбора метрик с хоста, но это тема для следующей заметки.