Retifff's Blog

Мой ИТ блог — пошаговые мануалы

Установка сервера мониторинга NetXMS на Ubuntu Server и PostgreSql с TimescaleDB

Posted by Retifff на 24.01.2024

Введение

С момента публикации статьи Установка сервера мониторинга NetXMS на Ubuntu Server и MySQL прошло уже целых 4 года, она несколько устарела, и даже перестала быть рабочей, поэтому я решил написать новую. С тех пор у разработчиков изменилось мнение и в качестве базы данных они рекомендуют PostrgreSQL, причем больше не сам по себе (хотя тоже вариант), а с расширением TimescaleDB. TimescaleDB — это расширение PostgreSQL для работы с временными рядами (как раз то, что нужно для системы мониторинга). Временные ряды можно хранить в PostgreSQL и просто так, но TimescaleDB обеспечивает большую производительность на том же железе.

Именно поэтому и родилась эта статья. По смыслу она повторяет прошлую статью, но в конкретных шагах разница существенная. Как обычно, она не для линуксоидов, а скорее для виндузятников, которым сложно общаться с Linux, как и мне. Импортозамещение опять же 🙂

  1. Установка Ubuntu Server
  2. Установка PostgreSQL с расширением TimescaleDB
  3. Перенос каталога данных PostgreSQL на другой диск
  4. Продолжение установки PostgreSQL и TimescaleDB — установка клиента и создание базы
  5. Установка NetXMS
  6. Установка Management Console под Windows
  7. Установка Management Console под Ubuntu
  8. Установка веб-консоли NetXMS

То, к чему мы должны прийти в итоге, после завершения статьи, картинка для привлечения внимания:

Установку Ubuntu подробно описывать я не буду, затрону буквально пару нюансов.

1 Установка Ubuntu Server

Нам потребуется, установленный Ubuntu Server (я использовал последнюю на момент написания статьи версию 22.04.3 LTS), нужно будет задать ему имя (netxms, например, будет логично), статический IP-адрес и обеспечить разрешение имен в сети. Тип установки я выбрал minimized, лишнего ничего не требуется (но пару пакетов придется доустановить для комфортной работы):

Задать статический IP-адрес можно во время установки Ubuntu, на шаге 4. В отличие от версии 18.04.2 из прошлой статьи, в это версии Ubuntu поле Search domains можно смело заполнять, никаких спецэффектов из-за этого не происходит:

На шаге 7 введите имя сервера, у меня это netxms. Не забудьте установить SSH-сервер (чтобы можно было подключаться через putty), хотя можно поставить и после установки:

После установки Ubuntu первое, что нам понабится, это установить редактор nano (вследствие моего выбора типа установки «minimized», в дефолтной инсталляции он есть):

sudo apt install nano

Ещё я себе установил mc, но это в общем на любителя. С установкой ubuntu всё, приступаем к установке PostgreSQL.

Еще не забудьте установить временную зону, чтобы NetXMS ставил правильное время везде:

sudo timedatectl set-timezone Europe/Moscow

2 Установка PostgreSQL с расширением TimescaleDB

2.1 Добавляем сторонний репозиторий PostgreSQL, чтобы получить последние версии пакетов PostgreSQL:

sudo apt install gnupg postgresql-common apt-transport-https lsb-release wget

2.2 Запускаем скрипт настройки репозитория PostgreSQL:

sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

2.3. Добавляем сторонний репозиторий TimescaleDB:

echo "deb https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main" | sudo tee /etc/apt/sources.list.d/timescaledb.list

2.4. Устанавливаем GPG-ключ TimescaleDB:

sudo wget --quiet -O - https://packagecloud.io/timescale/timescaledb/gpgkey | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/timescaledb.gpg

2.5. Обновляем список локальных репозиториев:

sudo apt update

2.6. Устанавливаем TimescaleDB

sudo apt install timescaledb-2-postgresql-15

Выполнение этой команды заканчивается вот такой рекомендацией:

Правда, выполнение команды:

timescaledb-tune --quet --yes

у меня завершилось ошибкой, поэтому я не стал сильно заморачиваться и отредактировал postgresql.conf, но об этом далее.

3 Перенос каталога данных PostgreSQL на другой диск

После этого шага я хочу прервать дальнейшую установку и настройку PostgreSQL и перенести каталог данных PostgreSQL на другой диск. Так как база NetXMS будет расти, место может закончиться, именно поэтому нужен этот раздел. Кто не хочет это делать, может смело этот раздел пропустить.

3.1 Для начала проверим статус сервиса PostgreSQL:

systemctl status postgresql

3.2 Как видим, сервис запущен, а для переноса надо его выключить, что мы и делаем и заново проверяем статус:

sudo systemctl stop postgresql
systemctl status postgresql

3.3 Сервис выключен, теперь можно приступать к копированию с помощью rsync, но у меня опять из-за установки minimized он отсутствует, поэтому сначала ставим его:

sudo apt install rsync

3.4 Теперь копируем каталог /var/lib/postgresql на диск, который я смонтировал в /media/data (у вас, это, естественно, может быть другой каталог):

sudo rsync -av /var/lib/postgresql /media/data

3.5 Проверим, что всё скопировалось:

sudo ls -l /media/data/postgresql/15/main

Нам должно выдать список файлов PostgreSQL.

3.6 Далее проверяем права, правильно ли перенеслись:

user@netxms:~$ ls -l /var/lib | grep postgres
drwxr-xr-x  3 postgres postgres 4096 Jan 19 11:16 postgresql
user@netxms:~$ ls -l /media/data | grep postgres
drwxr-xr-x 3 postgres postgres  4096 Jan 19 11:16 postgresql

Вроде одинаково, двигаемся дальше.

3.7 Переименовываем старый каталог в …OLD:

sudo mv /var/lib/postgresql/15/main /var/lib/postgresql/15/main_old

3.8 В конфиге PostgreSql нужно прописать новый путь к каталогу данных, для чего мы редактируем этот файл:

sudo nano /etc/postgresql/15/main/postgresql.conf

Находим там строчку

data_directory = '/var/lib/postgresql/15/main'          # use data in another directory

и меняем путь на /media/data/postgresql/15/main

Сохраняем изменения и выходим из nano.

3.9 Запускаем сервис PostgreSQL:

sudo systemctl start postgresql  
systemctl status postgresql

3.10 Сервис стартует успешно, проверяем что каталог правильный, заходим в PostgreSQL:

sudo -u postgres psql

и там вводим команду:

SHOW data_directory;

Должен отобразиться новый путь:

3.11 Выходим из PostgreSQL командой \q. Далее старый каталог можно удалить командой (или из mc, например):

sudo rm -Rf /var/lib/postgresql/15/main_old

3.12 И выполняем рестарт сервиса PostgreSQL:

sudo systemctl restart postgresql
systemctl status postgresql

Всё, с переносом закончили, продоолжаем установку PostgreSQL.

4 Продолжение установки PostgreSQL и TimescaleDB — установка клиента и создание базы

4.1 Убеждаемся, что наш локальный репозиторий обновлен:

sudo apt update

4.2 Устанавливаем пакет postgresql-client:

sudo apt install postgresql-client

4.3 Рестартуем сервис postgresql:

sudo systemctl restart postgresql

4.4 Открываем утилиту командной строки psql от имени пользователя postgres:

sudo -u postgres psql

Если подключение успешно, вы увидите приглашение psql типа такого:

user@netxms:~$ sudo -u postgres psql
psql (16.1 (Ubuntu 16.1-1.pgdg22.04+1), server 15.5 (Ubuntu 15.5-1.pgdg22.04+1))
Type "help" for help.

postgres=#

4.5 Задаём пароль для пользователя postgres:

\password postgres

4.6 Выходим из PostgreSQL командой \q.

4.7 Используем psql клиента, чтобы подключиться к PostgreSQL:

psql -U postgres -h localhost

Обратите внимание, что появляется новая строчка с SSL connection:

4.8 После того, как появится приглашение psql, cоздаем пустую базу для NetXMS, называем её netxmsdb:

CREATE DATABASE netxmsdb;

4.9 Подключаемся к созданной базе:

\c netxmsdb

Результат будет примерно такой:

postgres=# CREATE DATABASE netxmsdb;
CREATE DATABASE
postgres=# \c netxmsdb
psql (16.1 (Ubuntu 16.1-1.pgdg22.04+1), server 15.5 (Ubuntu 15.5-1.pgdg22.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
You are now connected to database "netxmsdb" as user "postgres".
netxmsdb=#

4.10 Добавляем расширение TimescaleDB:

CREATE EXTENSION IF NOT EXISTS timescaledb;

Здесь нас ожидает сюрприз (это то, что не вышло в п. 2.6):

netxmsdb=#
netxmsdb=# CREATE EXTENSION IF NOT EXISTS timescaledb;
FATAL:  extension "timescaledb" must be preloaded
HINT:  Please preload the timescaledb library via shared_preload_libraries.

This can be done by editing the config file at: /etc/postgresql/15/main/postgresql.conf
and adding 'timescaledb' to the list in the shared_preload_libraries config.
        # Modify postgresql.conf:
        shared_preload_libraries = 'timescaledb'

Another way to do this, if not preloading other libraries, is with the command:
        echo "shared_preload_libraries = 'timescaledb'" >> /etc/postgresql/15/main/postgresql.conf

(Will require a database restart.)

If you REALLY know what you are doing and would like to load the library without preloading, you can disable this check with:
        SET timescaledb.allow_install_without_preload = 'on';
SSL connection has been closed unexpectedly
The connection to the server was lost. Attempting reset: Succeeded.
psql (16.1 (Ubuntu 16.1-1.pgdg22.04+1), server 15.5 (Ubuntu 15.5-1.pgdg22.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
netxmsdb=#

4.11 Поэтому, выходим из PostgreSQL командой \q и в соответствии с этой подсказкой редактируем конфиг PostgreSQL:

sudo nano /etc/postgresql/15/main/postgresql.conf

Находим там такие строчки:

# - Shared Library Preloading -

#local_preload_libraries = ''
#session_preload_libraries = ''
#shared_preload_libraries = ''  # (change requires restart)
#jit_provider = 'llvmjit'               # JIT library to use

Раскомментируем строчку

#shared_preload_libraries = ''  # (change requires restart)

И прописываем в ней timescaledb:

shared_preload_libraries = 'timescaledb'

Должно получиться так:

4.12 Сохраняем и выходим из nano, перезапускаем PostgreSQL (п. 9), заходим в PostgreSQL (см. п.14 и п.16):

user@netxms:~$ sudo systemctl restart postgresql
user@netxms:~$
user@netxms:~$ psql -U postgres -h localhost
Password for user postgres:
psql (16.1 (Ubuntu 16.1-1.pgdg22.04+1), server 15.5 (Ubuntu 15.5-1.pgdg22.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
Type "help" for help.

postgres=#
postgres=# \c netxmsdb
psql (16.1 (Ubuntu 16.1-1.pgdg22.04+1), server 15.5 (Ubuntu 15.5-1.pgdg22.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
You are now connected to database "netxmsdb" as user "postgres".
netxmsdb=#

и заново пытаемся добавить расширение TimescalDB:

CREATE EXTENSION IF NOT EXISTS timescaledb;

Нам должно выдать такую красивую картинку:

4.13 Проверяем что расширение TimescaleDB установлено, командой:

netxmsdb-# \dx

Вывод команды должен быть примерно такой:

netxmsdb=# netxmsdb-# \dx
                                                List of installed extensions
    Name     | Version |   Schema   |                                      Description

-------------+---------+------------+-------------------------------------------------------------------
--------------------
 plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
 timescaledb | 2.13.1  | public     | Enables scalable inserts and complex queries for time-series data
(Community Edition)
(2 rows)

4.14 Вообще, пользователь postgresql является админом всего PostgreSQl и использовать его для подключения к базе NetXMS будет не слишком правильно. Правильно создать пользователя с доступом только к одной базе netxmsdb. Поэтому, следующей командой, в PostgreSQL мы создаем пользователя netxms:

CREATE USER netxms WITH PASSWORD 'Password1';

4.15 И даём ему права на базу netxmsdb:

ALTER DATABASE netxmsdb OWNER TO netxms;
GRANT ALL PRIVILEGES ON DATABASE netxmsdb TO netxms;

4.16 Выходим из PostgreSQL командой \q.

4.17 После этого, мы сможем под пользователем netxms подключиться к базе netxmsdb напрямую командой:

psql -U netxms -h localhost -d netxmsdb

Выходим из PostgreSQL командой \q. Базу создали, теперь можно переходить к установке NetXMS.

5 Установка NetXMS

5.1 Скачиваем и устанавливаем последний пакет netxms-release-latest.deb:

wget http://packages.netxms.org/netxms-release-latest.deb
sudo dpkg -i netxms-release-latest.deb
sudo apt update

5.2 Ставим требуемые пакеты:

sudo apt install netxms-server netxms-dbdrv-pgsql

Обратите внимание, инсталлятор пишет, что NetXMS сервер установлен, но не запущен и информирует о дополнительных шагах после установки:

NetXMS server is installed but currently stopped.

Additional steps required:

1. Edit default configuration file (/etc/netxmsd.conf)

2. Create database schema:

   nxdbmgr init

3. Start daemon and enable autostart:

   systemctl start netxms-server
   systemctl enable netxms-server

5.4 В соответствии с этим, редактируем конфиг сервера NetXMS:

sudo nano /etc/netxmsd.conf

В нем раскомментируем строки, касающиеся PostgreSql, имя базы меняем на netxmsdb (как выше создали), логин на netxms, и пароль на, тот, который мы задавали на шаге 4.5:

Сохраняем и выходим из nano.

5.5 Проводим инициализацию схемы NetXMS:

sudo nxdbmgr init

После ввода этой команды последует запрос, какой типа базы мы хотим выбрать, PostgreSQL или TimeScaleDB:

user@netxms:~$
user@netxms:~$ sudo nxdbmgr init
NetXMS Database Manager Version 4.5.0 Build 4.5-36-gf9c301e31d (UNICODE)

Selected database driver supports multiple database types.
Please select actual database type:
   1. PostgreSQL (pgsql)
   2. TimeScaleDB (tsdb)
Enter database type [1..2] or 0 to abort:

Выбираем естественно TimeScaleDB, так мы устанавливали именно её. В конце нам выдаст фразу об успешной инициализации базы:

WARNING:  column type "character varying" used for "message" does not follow best practices
HINT:  Use datatype TEXT instead.
WARNING:  column type "character varying" used for "attribute_name" does not follow best practices
HINT:  Use datatype TEXT instead.
WARNING:  column type "character varying" used for "old_value" does not follow best practices
HINT:  Use datatype TEXT instead.
WARNING:  column type "character varying" used for "new_value" does not follow best practices
HINT:  Use datatype TEXT instead.
Database initialized successfully
user@netxms:~$

5.6 Далее, проверим статус сервиса командой

systemctl status netxmsd

Несмотря на предупреждение инсталлятора, сервис запущен и стартует автоматически при старте системы:

user@netxms:~$
user@netxms:~$ systemctl status netxmsd
● netxms-server.service - NetXMS core server
     Loaded: loaded (/lib/systemd/system/netxms-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-01-21 18:13:21 UTC; 2min 7s ago
   Main PID: 2010 (netxmsd)
      Tasks: 148 (limit: 4516)
     Memory: 75.3M
        CPU: 2.497s
     CGroup: /system.slice/netxms-server.service
             └─2010 /usr/bin/netxmsd -S

Jan 21 18:13:21 netxms systemd[1]: Started NetXMS core server.
user@netxms:~$

5.7 С сервером разобрались, но ещё на самом сервере есть агент NetXMS, смотрим его статус:

systemctl status nxagentd
user@netxms:~$
user@netxms:~$ systemctl status nxagentd
● netxms-agent.service - NetXMS agent
     Loaded: loaded (/lib/systemd/system/netxms-agent.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-01-21 18:01:08 UTC; 17min ago
   Main PID: 1758 (nxagentd)
      Tasks: 35 (limit: 4516)
     Memory: 12.3M
        CPU: 1.526s
     CGroup: /system.slice/netxms-agent.service
             └─1758 /usr/bin/nxagentd -S

Jan 21 18:01:08 netxms systemd[1]: Started NetXMS agent.
user@netxms:~$

И тут всё запущено и стартует автоматом, явно улучшения в лучшую сторону. Если вдруг это не так, выполните команды, для сервера:

sudo systemctl start netxms-server  
sudo systemctl enable netxms-server

для клиента:

sudo systemctl start nxagentd  
sudo systemctl enable nxagentd

5.8 Далее, так как у меня PostgreSQL находится на том же сервере, что и NetXMS, надо сделать так, чтобы при выключении или перезагрузке сервера, PostgreSQL выключался только после NetXMS. У кого PostgreSQL на другом сервере, этот пункт выполнять не нужно. Чтобы добавить эту зависимость, редактируем сервис:

sudo systemctl edit netxmsd

Туда нужно добавить строки:

[Unit]
After=network.target postgresql.service

Обратите внимание, что их нужно добавить между строками:

### Anything between here and the comment below will become the new contents of the file

### Lines below this comment will be discarded

Иначе файл просто не сохранится. Должно получиться примерно так:

После сохранения и выхода из редактора, для того, чтобы перезагрузить конфигурацию systemd, нужно запустить эту команду:

sudo systemctl daemon-reload

6 Установка Management Console под Windows

Теперь, нам надо проверить, что сервер мониторинга у нас работает в принципе. Для этого проще всего скачать управляющую консоль с https://netxms.com/downloads/. Консолей сейчас стало много, а самая удобная и быстрая из них, которая на java, перешла в разряд legacy. Тем не менее начну с неё.

6.1 Для начала нам понадобится машина с Windows, с которой мы будем запускать управляющую консоль. Если такой нет (сомнительно, конечно, но вдруг), то ниже будет описана установка других консолей. Скачиваем «Legacy — Windows (x64) archive with JRE» по ссылке https://netxms.org/download/releases/4.5/nxmc-4.5.0-win32-x64-bundled-jre.zip (последняя версия на момент написания статьи), распаковываем куда-нибудь и запускаем файл nxmc.exe. В появившемся окне вводим адрес сервера, дефолтовые логин и пароль — admin и netxms соответственно:

При первом запуске будет предложено сменить дефолтовый пароль на свой:

Меняем и наконец-то заходим в консоль управления NetXMS (см. КДПВ).

6.2 Что касается новой консоли, не legacy, её просто скачиваем с официального сайта https://netxms.org/download/releases/4.5/netxms-client-4.5.0-x64.exe, и устанавливаем. В установке совершенно ничего примечательного нет, но вот итоговый вид NetXMS, конечно, сильно отличается от привычного, и не в лучшую сторону, на мой взгляд:

Надеюсь, через какое-то время это станет выглядеть более прилично.

7 Установка Management Console под Ubuntu

7.1 На Linux (тоже Ubuntu в моем случае, только десктопная) нужно сначала поставить Java JRE, в терминале запускаем команду:

sudo apt install default-jre

7.2 Затем скачиваем архив консоли, версия 4.5.0 на момент написания статьи:

wget https://netxms.org/download/releases/4.5/nxmc-4.5.0-linux-gtk-x64.tar.gz

7.3 Распаковываем, моем случае в каталог /home/user/nxmc:

tar zxvf nxmc-4.5.0-linux-gtk-x64.tar.gz

Всё, можно запускать nxmc и пользоваться, всё остальное, как выше для виндовой версии.

8 Установка веб-консоли NetXMS

8.1 Для веб-интерфейса NetXMS нам будут нужны Tomcat9 и Java. Если мы проверим, какая версия Java у нас установлена, командой:

java -version

то увидим, что её у нас не установлено совсем никакой:

user@netxms:~$ java -version
-bash: java: command not found

А для веб-интерфейса NetXMS нам нужна будет java версии 17 или выше.

8.2 Поэтому ставим её (я выбрал последнюю версию на момент написания статьи, 21-ю):

sudo apt install openjdk-21-jdk

Команду apt install default-jre использовать не надо, так как она ставит 11-ю версию, которая нам не подходит. Проверяем еще раз версию после установки:

user@netxms:~$ java -version
openjdk version "21.0.1" 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-Ubuntu-222.04)
OpenJDK 64-Bit Server VM (build 21.0.1+12-Ubuntu-222.04, mixed mode, sharing)

Теперь порядок.

8.3 Ставим tomcat9:

sudo apt install tomcat9

8.4 Сразу после установки проверяем журнал tomcat9 командой:

journalctl -u tomcat9

и видим, что он ругается на то, что не прописана переменная JAVA_HOME или не установлен пакет java:

Но Java-то у нас установлена, значит надо переменную прописать.

8.5 Поэтому, сначала останавливаем сервис tomcat9:

sudo systemctl stop tomcat9

8.6 Затем редактируем файл сервиса:

sudo systemctl edit tomcat9

Туда нужно добавить строки:

[Service]
Environment="JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64/"

Не забудьте, что их нужно добавить между строками:

### Anything between here and the comment below will become the new contents of the file

### Lines below this comment will be discarded

Иначе файл просто не сохранится. Должно получиться примерно так:

8.7 Запускаем сервис tomcat9 обратно:

sudo systemctl start tomcat9

8.8 Можем еще раз журнал посмотреть, чтобы убедиться, что всё нормально:

journalctl -u tomcat9

В журнале вы должны увидеть такие строчки, с путём и версией Java:

Jan 23 14:50:15 netxms tomcat9[5321]: Java Home: /usr/lib/jvm/java-21-openjdk-amd64  
Jan 23 14:50:15 netxms tomcat9[5321]: JVM Version: 21.0.1+12-Ubuntu-222.04

8.9 Затем скачиваем саму веб-консоль:

 wget https://netxms.org/download/releases/4.5/nxmc-legacy-4.5.0.war

8.10 Переименовываем её для удобства в nxmc.war, потому что именно это имя будет фигурировать в адресе веб-консоли:

mv nxmc-legacy-4.5.0.war nxmc.war

8.11 Копируем в каталог webapps томката:

sudo cp nxmc.war /var/lib/tomcat9/webapps/

8.12 Ждём несколько секунд, томкат автоматически установит всё сам и заходим по ссылке, типа вот такой:

http://netxms.test-company.mooo.com:8080/nxmc/

Убеждаемся, что веб-интерфейс доступен. Но я бы сразу избавился от порта 8080 в адресе.

8.13 Для этого, редактируем конфиг томката:

sudo nano /etc/tomcat9/server.xml

Ищем секцию:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

и меняем в ней 8080 на 80:

8.14 Сохраняем конфиг и перезапускаем tomcat:

sudo systemctl restart tomcat9

8.15 Всё, веб-консоль теперь будет доступна по адресу без порта 8080:

http://netxms.test-company.mooo.com/nxmc/

Причем, наличие или отсутствие слэша на конце адреса не влияет ни на что, в отличие от версии в прошлой статье. Можно вводить логин и пароль и начинать пользоваться этой системой мониторинга.

Список использованных источников:
https://docs.timescale.com/self-hosted/latest/install/installation-linux/
https://www.digitalocean.com/community/tutorials/how-to-move-a-postgresql-data-directory-to-a-new-location-on-ubuntu-22-04
https://netxms.org/documentation/adminguide/

Оставьте комментарий