Некоторые картинки не загружаются из РФ и РК, используйте VPN.

понедельник, 28 ноября 2022 г.

Zabbix как мы заббикс переодевали

Неожиданно захотелось воспользоваться новым функционалом Zabbix, но как выяснилось обновить 4.4 до 6.2 не так просто. Для начала надо обновить операционную систему (у нас Ubuntu 16.04LTS), потом обновить сервер Zabbix. Попытка сделать это наскоком 16.04 = > 22.04 и 4.4 = > 6.2 провалилась и мы потеряли на этом около 7 часов. На самом деле это была вторая попытка, первая провалилась на этапе обновления операционной системы...

Но сразу спойлер - не пытайтесь обновлять по описанному ниже способу, потому что обновление провалилось. Я оставляю эту запись по двум причинам:

  1. кладезь ошибок и решений
  2. потрачено очень много времени на данную операцию, суммарно вышло более 4х суток, плюс фиксация здесь

Решили сделать переездом:

  1. просим у хостера вторую тачку (или делаем сами, если в корп сети)
  2. ставим 20.04 LTS + Zabbix-Server 5.0
  3. загружаем туда БД из дампа и проверяем
  4. перенаправляем траффик мониторинга со старого на новый сервер (если агенты подключаются к серверу, а не наоборот)
  5. переносим другие роли
  6. просим хостера поменять тачки и ip адреса (или сами делаем)
  7. обновляем заббикс до 6.0, проверяем
  8. обновляем сервер до 22.04 LTS, проверяем

Установка Zabbix 5

Подготовка (мое личное мнение)

Проверка и обновление

sudo apt-get update && sudo apt-get upgrade -y

установим iptables-persistent

sudo apt-get install iptables-persistent

задраим шлюзы в iptables и сохраним

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state INVALID -j DROP
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A INPUT -p tcp -m state --state NEW -m multiport --dports 10050,10051,1080 -j ACCEPT
# мой сервер в глобальной сети, поэтому не хотелось бы чтобы кто-то его видел. Разрешаем только определенным адресам доступ
sudo iptables -A INPUT -s XXX.YYY.ZZZ.CCC -p tcp -m state --state NEW -m multiport --dports 80,443,22 -j ACCEPT
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -m state --state INVALID -j DROP
sudo netfilter-persistent save

Проверяем время и временную зону

timedatectl

Я хочу +3 (Москва-Санкт-Петербург)

sudo timedatectl set-timezone Europe/Moscow


Ставим Zabbix

ищем актуальные репы на сайте заббикса

wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bfocal_all.deb
sudo dpkg -i zabbix-release_5.0-1+focal_all.deb
sudo apt-get update

установка (zabbix server 5.0, zabbix agent, mysql for zabbix, apache)

sudo apt-get install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent -y

установка и запуск СУБД (mysql)

sudo apt-get install mysql-server -y
sudo systemctl start mysql.service

Установим пароль руту и проверим (password - на пароль)

mysql -uroot
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password';
mysql> quit
mysql -uroot -pPassword
mysql> quit

Создаем пользователя zabbix и базу zabbix, даем полные права пользователю zabbix на базу все таблицы БД zabbix

mysql -uroot -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'Password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit

Загружаем старую БД

Далее копируем со старого сервера дамп БД (предположим что лежит в домашней директории) и загружаем в нашу БД

scp user@AAA.BBB.CCC.DDD:~/zabbix_dump.sql .
cat zabbix_dump.sql | mysql -uzabbix -p zabbix

Идем пить чай, процесс не быстрый и зависит от объема БД


Настройка сервера

В конфигурационном файле сервера заббикс (/etc/zabbix/zabbix_server.conf) редактируем параметры доступа к БД, в нашем случае отличен только пароль

DBPassword=Password

потом правим конфигурационный файл apache заббикса (/etc/zabbix/apache.conf), а именно - указываем какой у нас пояс (найти, раскомментировать, указать)

php_value date.timezone Europe/Moscow

включаем службы

systemctl enable zabbix-server zabbix-agent apache2

перезапускаем службы

systemctl restart zabbix-server zabbix-agent apache2

вот тут мы отходим от классической настройки нового заббикса, т.к. технически это уже обновление, смотрим что происходит с БД

grep database /var/log/zabbix/zabbix_server.log

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

 63211:20221115:230659.692 completed 94% of database upgrade
 63211:20221115:230659.747 completed 95% of database upgrade
 63211:20221115:230659.775 completed 96% of database upgrade
 63211:20221115:230659.812 completed 97% of database upgrade
 63211:20221115:230700.053 completed 98% of database upgrade
 63211:20221115:230700.470 completed 99% of database upgrade
 63211:20221115:230700.499 completed 100% of database upgrade
 63211:20221115:230700.499 database upgrade fully completed
 63211:20221115:230700.513 database is not upgraded to use double precision values
 64252:20221115:232309.781 current database version (mandatory/optional): 05000000/05000007
 64252:20221115:232309.794 database is not upgraded to use double precision values

если есть ошибки, то исправляем


Работа над ошибками

вот например:

63211:20221115:230700.513 database is not upgraded to use double precision values

Это не такая страшная ошибка, о ней говорится в вики заббикса, как важно при обновлении, правим

service zabbix-server stop

в файле (/etc/zabbix/web/zabbix.conf.php) правим один параметр

DB['DOUBLE_IEEE754'] = 'true';

правим теперь БД и запускаем сервис, в логе ошибка должна исчезнуть

mysql -uroot -p zabbix
mysql> use zabbix;
mysql> ALTER TABLE trends MODIFY value_min DOUBLE PRECISION DEFAULT '0.0000' NOT NULL, MODIFY value_avg DOUBLE PRECISION DEFAULT '0.0000' NOT NULL, MODIFY value_max DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
mysql> ALTER TABLE history MODIFY value DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
mysql> quit
service zabbix-server start
tail -n 50 /var/log/zabbix/zabbix_server.log

ошибки не видать

 71420:20221116:010446.480 Starting Zabbix Server. Zabbix 5.0.29 (revision e7cffb989f2).
 71420:20221116:010446.480 ****** Enabled features ******
 71420:20221116:010446.481 SNMP monitoring:           YES
 71420:20221116:010446.481 IPMI monitoring:           YES
 71420:20221116:010446.481 Web monitoring:            YES
 71420:20221116:010446.481 VMware monitoring:         YES
 71420:20221116:010446.481 SMTP authentication:       YES
 71420:20221116:010446.481 ODBC:                      YES
 71420:20221116:010446.481 SSH support:               YES
 71420:20221116:010446.481 IPv6 support:              YES
 71420:20221116:010446.481 TLS support:               YES
 71420:20221116:010446.481 ******************************
 71420:20221116:010446.481 using configuration file: /etc/zabbix/zabbix_server.conf
 71420:20221116:010446.491 current database version (mandatory/optional): 05000000/05000007
 71420:20221116:010446.491 required mandatory version: 05000000
 71420:20221116:010446.506 server #0 started [main process]
 71421:20221116:010446.507 server #1 started [configuration syncer #1]

далее заходим на сервер по протоколу HTTP (http://нашадрес/zabbix) и завершаем установку

я словил вот такую ошибку:

Locale for language "ru_RU" is not found on the web server.

Смотрим какие локали есть русские, устанавливаем, переконфигурируем, перезапускаем apache2 и должно работать

sudo locale -a
cat /usr/share/i18n/SUPPORTED | grep ru_
sudo locale-gen ru_RU
sudo locale-gen ru_RU.UTF8
sudo locale-gen ru_RU.UTF-8
sudo dpkg-reconfigure locales
sudo locale -a
sudo service apache2 restart

дальше, судя по логу zabbix_server.log, есть проблема с SNMP

became not supported: snmp_parse_oid(): cannot parse OID "IF-MIB::ifOutOctets.6"

Сначала добавил в исключения на роутере адрес нового сервера. Потом проверил что с сервера данные получаются

snmpwalk -v2c -c zabbix XX.YYY.GG.KK

получил ошибку

Command 'snmpwalk' not found, but can be installed with: apt install snmp

Установил требуемый пакет и успешно проверил запрос по snmp к роутеру

sudo apt-get install snmp -y

Еще раз смотрим лог, там обновился список ошибок

Cannot find module (SNMPv2-MIB)

Помощь нам окажет Михаил Григорьев, выполним следующее:

sudo apt-get install snmp-mibs-downloader
snmptranslate -Tp

как и предполагал автор, будет неправильный результат, поэтому комментируем строчку mibs в файле /etc/snmp/snmp.conf и перезапускаем службы snmp и zabbix-server

sudo service snmpd restart
sudo service zabbix-server restart

Проблема с snmp решена, поехали дальше

Проверяем также настройки агента и ставим на новом сервере такие же и не забываем проверить каталоги указанные в параметре include

grep -Ev "^#|^$" /etc/zabbix/zabbix_agentd.conf


Установка инструментов оповещений


Отправка писем:

sudo apt-get install mailutils -y

В способах оповещений для email настраиваем подключение к внешнему smtp серверу, если необходимо


Отправка оповещений в Телеграм:

скрипт в Телеграм написан на питоне:

sudo apt-get install python3-pip -y

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

Неподдерживаемое расширение файла импорта "zip".

это мой косяк, ибо надо было XML пихать, а я ему zip. Файл скачан у Михаила Григорьева, поэтому за подробностями к нему, а я загрузил XML для пятой версии и пошел настраивать. Токен я вытащил из настроек старого метода отправки, а чат ID группы получил отправив инвайт линк группы боту @username_to_id_bot, собственно тест пройден был успешно. Дальше мы у Zerox подглядим кое-чего, а именно настройку оповещений. Зайдя в узлы сети, увидел кучу старых ненужных узлов, сразу вычистил все лишнее

Создал элемент и триггер, изменил старый способ оповещения в настройках пользователей, изменил действия (стоял старый способ оповещения), добавил стандартные шаблоны нашего метода оповещений

При тестировании обнаружил еще одну ошибку, прямо в разделе проблемы

No media defined for user.

Данная ошибка была у действия e-mail, а меня оно не интересует, т.к. хочу в телеграмм, но тут я как раз и заметил, что в настройках пользователя - оповещения - Telegram via Webhook - "отправлять на" указано имя группы, а не id (имя использовалось в старом скрипте). А по этой ошибке надо смотреть, есть ли у пользователя метод оповещения, если он входит в группу, которая указана в действиях (каким методом какие группы оповещаются).

Решил проверить графики через старый скрипт и ничего не получил, тест через терминал провалился ошибкой (itemid:23287 взял из урла на страничке элемента узла сети, у данного узла должен быть график по этому элементу)

sudo -u zabbix /usr/lib/zabbix/alertscripts/zbxtg.py "LEN-SEM Zabbix" test "$(echo -e 'zbxtg;graphs:\nzbxtg;graphs_period=3600\nzbxtg;itemid:23287\nzbxtg;title:ololo')" --group --debug
...
zbxtg.py: files: {'photo': <_io .bufferedreader="" name="/var/tmp/zbxtg/CpCUxLkLhZ.png">}
zbxtg.py: Bad Request: IMAGE_PROCESS_FAILED
</_io>

Скачал файл, он не открывается просмотром изображений, зато прекрасно открывается блокнотом, а там HTML с таким текстом

You are not logged in
You must login to view this page.
If you think this message is wrong, please consult your administrators about getting the necessary permissions.

И тут я понял в чем косяк, дело в том, что для группы, в которую входит пользователь для сообщений, стоит "Доступ к веб-интерфейсу" - деактивировано, поставил внутренний и все взлетело


Установка дополнительных ролей

Установил роли не связанные с заббиксом


Выбрасываем в прод

Попросил хостера поменять местами сервера, чтобы посмотреть в бою как оно (напоминаю, у меня к этому серверу подключаются агенты в активном режиме, а не наоборот). Первый косяк - отказ в авторизации при входе через имя, а не ip.

Вторая ошибка

Zabbix сервер не запущен: отображаемая информация может быть не актуальной.

Связана с настройками в файле /etc/zabbix/web/zabbix.conf.php, где указан был старый ip сервера, надо было просто оставить localhost

$ZBX_SERVER                     = 'localhost';
$ZBX_SERVER_PORT                = '10051';
$ZBX_SERVER_NAME                = '';


Дальше включаем SSL

Установка certbot

sudo apt-get install certbot python3-certbot-apache

Проверка настроек в /etc/apache2/sites-available/000-default.conf, добавляю туда ServerName и ServerAlias, переношу настройки со старого сервера (переброс на https)

<VirtualHost zabbix.domain.ru:80>
	ServerName zabbix.domain.ru
	ServerAlias www.zabbix.domain.ru
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html
	RedirectMatch ^/$ /zabbix
    
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
	
	RewriteEngine on
	RewriteCond %{SERVER_NAME} =zabbix.domain.ru
	RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

тестирую

apache2ctl configtest

Получаю ошибку теста конфигурации

Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

Решается активацией дополнительного модуля и перезапуском службы apache

sudo a2enmod rewrite
sudo service apache2 restart
apache2ctl configtest

другая ошибка

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

Сказано указать ServerName 127.0.0.1 глобально, но мне так не хочется, поставил так:

echo ServerName zabbix.domain.ru >>/etc/apache2/apache2.conf

Снова тест - ок, перезапуск службы

Проверяем открыт ли порт 443, у меня iptables был перенесен, поэтому этот пункт опускаю и перехожу к настройке при помощи плагина:

sudo certbot --apache

В ходе вывода обратил внимание на DNS ошибку к алиасу, и ведь действительно, у меня нет DNS записи www.zabbix.domain.ru, пошел исправил.

Другая ошибка

Challenge failed for domain zabbix.domain.ru
http-01 challenge for zabbix.domain.ru
Cleaning up challenges
Some challenges have failed.

IMPORTANT NOTES:
- The following errors were reported by the server:

Domain: zabbix.domain.ru
Type: connection
Detail: XXX.YYY.ZZZ.XXX: Fetching
http://zabbix.domain.ru/.well-known/acme-challenge/fAEau2nGaCBpb1lR1pL93Vv_ystBRcuPgVZeCsRrGXs:
Timeout during connect (likely firewall problem)

Собственно трабл именно в файерволе, разрешил всем стучаться на 443 и 80 порты и все взлетело. Сразу открылся заббикс по имени и принял авторизацию.

Теста ради сразу проверим состояние cerbot и попробуем перевыпустить серт, у меня все ОК

sudo systemctl status certbot.timer
sudo certbot renew --dry-run


Работа над ошибками 2

Вроде бы все готово, а нет, у нас есть странное поведение, а именно - постоянные срабатывания триггеров, надо выяснять почему. Выяснили, для тестирования уведомлений я не нашел ничего умнее, как изменить шаблон Zabbix Agent Template, в котором установил время не 5 минут, а 1 минуту, из-за этого триггер начал срабатывать у всех туда-сюда.

Ошибка в логах:

query failed: [1452] Cannot add or update a child row: a foreign key constraint fails (`zabbix`.`event_recovery`, CONSTRAINT `c_event_recovery_1` FOREIGN KEY (`eventid`) REFERENCES `events` (`eventid`) ON DELETE CASCADE) [insert into event_recovery (eventid,r_eventid,correlationid,c_eventid,userid) values (15999423,599136,null,null,null);

Удалим неугодные записи

mysql -uroot -p zabbix
mysql> delete from event_recovery where event_recovery.eventid not in (select eventid from events);
mysql> quit
sudo service zabbix-server restart

Ошибка в логах:

cannot send list of active checks to "151.236.25.29": host [PlPx.domain.ru] not found

Проверить наличие узла, имя узла чувствительно к регистру


Ошибка в логах:

autoregistration from "XXX.YY.CC.AA" denied (host:"dsnl68-23408.domain.org" ip:"XXX.YY.CC.AA" port:10050): connection type "TLS with PSK" is not allowed for autoregistration

Добавить узел в систему


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

Get value from agent failed: cannot connect to [[AAA.FF.CC.BB]:10050]: [4] Interrupted system call

Новые узлы добавились без проблем. На старых даже обновление агента до 5 версии не помогло. Перезагрузка сервера также не помогла

wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1%2Bbionic_all.deb 
dpkg -i zabbix-release_5.0-1+bionic_all.deb
apt update
apt install zabbix-agent -y
systemctl restart zabbix-agent

В итоге пришлось настроить проброс или открыть порты на каждом неисправном узле!


Ошибка в веб интерфейсе:

Unsupported item key. vm.vmemory.size[pavailable]

Ошибка в веб интерфейсе:

Unsupported item key. softraid.status[0]

Видать я безбожно устарел, теперь (очень давно) шаблоны отличаются, есть для активного агента, а есть для пассивного, непонятно зачем. 

Так как не представляется возможным обновить шаблоны без потери элементов/триггеров/истории, я вынужден отказаться от идеи обновить Zabbix Server версии 4 до 6. Переходим к плану Бэ - установка сервера нужной версии и перенос узлов вручную (?)

Попробуем загрузить стандартную БД, потом обновить ОС и сам Zabbix Server до версии 6.0

План Бэ

Делаем дамп старой базы, удаляем старую базу, создаем пустую, загружаем шаблон базы, меняем пароль админа от веб интерфейса

mysqldump -uroot -p zabbix >dump_zabbix_update_4_to_5.sql  
mysql -uroot -p
mysql> DROP DATABASE zabbix;
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
mysql -uroot -p
mysql> update users set passwd=md5('MY_NEW_PASS') where username='Admin';
mysql> quit;

Выполним апгрейд с 20.04 LTS До 22.04 LTS, инструкций куча

cat /etc/update-manager/release-upgrades

должно быть Prompt=lts

sudo apt-mark showhold

Проверяем блокировки

sudo apt-mark unhold pkg1 pkg2

снимаем блокировки с пакетов, вместо DpkgN подставляем заблокированный пакет

sudo apt-get update && apt-get upgrade -y
sudo reboot

обновляем текущие пакеты

открываем порт 1022 для SSH

sudo ufw allow 1022/tcp comment 'Open port ssh tcp port 1022 as failsafe option for upgrades'
sudo ufw status

У меня iptables, поэтому добавлю порт к разрешенным и сохраним

sudo iptables -A INPUT -p tcp -m state --state NEW -m multiport --dports 80,443,22,1022 -j ACCEPT
sudo netfilter-persistent save

запускаем

sudo do-release-upgrade

Пьем чай... Пока пьем, изучаем вопрос обновления сервера заббикса, и понимаем что это не так просто, типа надо сначала на 5.2, потом на 5.4 и только потом на 6.0. Я устал, поэтому удалим текущую установку и установим заново

sudo apt-get purge zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent -y

И по новой

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4%2Bubuntu22.04_all.deb
sudo dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo apt update
sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent
mysql -uroot -p
mysql> DROP DATABASE zabbix;
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

Ошибка:

Nov 20 17:46:46 vm36820 apachectl[3859]: apache2: Syntax error on line 146 of /etc/apache2/apache2.conf: Syntax error on line 3 of /etc/apache2/mods-enabled/php7.4.load: Cannot load /usr/lib/apache2/modules/libphp.so into server: /usr/lib/apache2/modules/libphp.so: cannot open shared object file: No such file or directory

Решение в нашем случае банальное

a2dismod php7.4

Но не конечное, т.к. веб-морда не грузится, точнее не отрабатывает PHP. Пока ищем, находим:

Ошибка:

Read-only file system

Это труп, доступа к VNC у меня нет, да возится желания нету, поэтому пишем хостеру, пусть разворачивает с нуля 22.04LTS, переходим к плану Вэ - установка начистую и ОС и Сервер сразу версии 6 и переносим данные ручками


План Вэ

Спустя сутки сервер подготовили, приступаем

Обновки + iptables

sudo apt-get update && apt-get upgrade -y
sudo timedatectl set-timezone Europe/Moscow
sudo reboot now
sudo apt-get install netfilter-persistent
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state INVALID -j DROP
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A INPUT -p tcp -m state --state NEW -m multiport --dports 10050,10051,1080 -j ACCEPT
sudo iptables -A INPUT -s XXX.YYY.ZZZ.CCC -p tcp -m state --state NEW -m multiport --dports 80,443,22 -j ACCEPT
sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -m state --state INVALID -j DROP
sudo netfilter-persistent save

Локали

locale -a
cat /usr/share/i18n/SUPPORTED | grep ru_
sudo locale-gen ru_RU
sudo locale-gen ru_RU.UTF8
sudo locale-gen ru_RU.UTF-8
sudo dpkg-reconfigure locales
sudo locale -a

Установка сервера по инструкции

wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4%2Bubuntu22.04_all.deb
sudo dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
sudo apt-get update
sudo apt-get install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent mysql-server
mysql -uroot -p
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;

Ставим пароль на root Mysql

mysql -uroot
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password';
mysql> quit

Загружаем шаблон, и меняем пароль админа, хоть он по умолчанию и zabbix, мне проще здесь поменять. Кстати, поиск здесь идет уже не по колонке alias, а по колонке username

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
mysql -uroot -p
mysql> update users set passwd=md5('MY_NEW_PASS') where username='Admin';
mysql> quit;

Актуализируем пароль в конфиге (/etz/zabbix/zabbix_server.conf)

DBPassword=password

Добавляем в автозапуск и запускаем

systemctl restart zabbix-server zabbix-agent apache2
systemctl enable zabbix-server zabbix-agent apache2

Вносим поправки в конфиг апача. Старый сервер остается на zabbix.domain.ru, а новый пока будет размещаться на www.zabbix.domain.ru (регулируем dns записями)

nano /etc/apache2/sites-available/000-default.conf

<VirtualHost zabbix.domain.ru:80>
	ServerName zabbix.domain.ru
	ServerAlias www.zabbix.domain.ru
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html
	RedirectMatch ^/$ /zabbix
    
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined
	
	RewriteEngine on
	RewriteCond %{SERVER_NAME} =zabbix.domain.ru
	RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
apache2ctl configtest

Как обычно ошибка, но мы знаем как исправить

sudo a2enmod rewrite
sudo service apache2 restart
apache2ctl configtest

Ставим certbot

sudo apt-get install certbot python3-certbot-apache
sudo certbot --apache
sudo systemctl status certbot.timer
sudo certbot renew --dry-run

Странно то, что перед установкой certbot вебморда не грузилась, только исходный код страницы, после установки же все открылось и система предложила завершить установку.

Установка завершена


Этап настройки

Экспортируем узлы из старого заббикса (узлы сети, поставить галки, экспорт). При выборе можно переключаться между группами или страницами, до обновления страницы галки остаются в установленном состоянии. После выгрузки надо удалить упоминания шаблонов/триггеров/графиков/элементов, т.к. они кардинально отличаются и по имени импорт их не найдет и выдаст ошибку. Мне хватило простого регулярного выражения в Notepad++ чтобы удалить необходимые теги вместе с содержимым

(<(templates|items|triggers|graphs)>(?s:.*?)</(templates|items|triggers|graphs)>)

Подключая шаблоны SNMP я обратил внимание, что ранних ошибок на SNMP в логе нету

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

{{TRIGGER.SEVERITY}}Узел: {HOST.NAME}
{Resolved}Узел: {HOST.NAME}
{Update}Узел: {HOST.NAME}

XML такой:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
        <body>
                <messages><![CDATA[{EVENT.NAME}
{ITEM.LASTVALUE1} ({TIME}) ({EVENT.AGE})]]>
                </messages>
        </body>
        <settings>
                <graphs>True</graphs>
                <hostlinks>False</hostlinks>
                <graphlinks>False</graphlinks>
                <acklinks>False</acklinks>
                <eventlinks>False</eventlinks>
                <triggerlinks>False</triggerlinks>
                <eventtag>False</eventtag>
                <eventidtag>False</eventidtag>
                <itemidtag>False</itemidtag>
                <triggeridtag>False</triggeridtag>
                <actionidtag>False</actionidtag>
                <hostidtag>False</hostidtag>
                <zntsettingstag>True</zntsettingstag>
                <zntmentions>True</zntmentions>
                <keyboard>True</keyboard>
                <graphs_period>default</graphs_period>
                <host>{HOST.HOST}</host>
                <itemid>{ITEM.ID1} {ITEM.ID2} {ITEM.ID3} {ITEM.ID4}</itemid>
                <triggerid>{TRIGGER.ID}</triggerid>
                <eventid>{EVENT.ID}</eventid>
                <actionid>{ACTION.ID}</actionid>
                <hostid>{HOST.ID}</hostid>
                <title><![CDATA[{HOST.HOST} - {EVENT.NAME}]]></title>
                <triggerurl><![CDATA[{TRIGGER.URL}]]></triggerurl>
                <eventtags><![CDATA[{EVENT.TAGS}]]></eventtags>
        </settings>
</root>

Иконки в конфиге такие:

zabbix_status_emoji_map = {
    "Problem":"❗",
    "Resolved": "✅",
    "Update": "🚧",
    "Not classified": "❗",
    "Information": "ℹ️",
    "Warning": "⚠️",
    "Average": "❌",
    "High": "💣",
    "Disaster": "🔥",
    "Test": "💩"
    }

При этом оригинальный ITEM.LASTVALUE1 даже для "Zabbix agent is not available" показывает неудобоваримый вариант. Тут пришлось покопаться, явно значения где-то в преобразованиях, но в настройках их нету, в итоге нашлись - в шаблоне, исправил на свой вариант:

Вот так можно поправить во всех шаблонах, а то непонятно что это:

Обновляем заббикс агенты

Для Windows описал батник из двух частей:

zabbix_agentd_uninstall.bat

@echo off
cd %~dp0
echo Stoping zabbix service
c:\zabbix\zabbix_agentd.exe --config c:\zabbix\zabbix_agentd.win.conf --stop
echo Remove zabbix service
c:\zabbix\zabbix_agentd.exe --config c:\zabbix\zabbix_agentd.win.conf --uninstall
echo Remove directory zabbix agent
rmdir /S c:\zabbix\
echo Run script install new zabbix agent?
pause
start /wait zabbix_agentd_install.bat
echo Remove file script
del zabbix_agentd_install.bat
del zabbix_agentd_uninstall.bat

zabbix_agentd_install.bat

@echo off
cd %~dp0
set server=zabbix.domain.ru

echo Create key file and hidden
set keyfile=%~dp0psk.key
rem Пробела между вашим ключом и символом ">" быть не должно!
echo KEY>%keyfile%
attrib +h %keyfile%

echo Create config file
set conffile=%~dp0zabbix_agentd.win.conf
echo Server=%server% >%conffile%
echo ServerActive=%server% >>%conffile%
echo Hostname=%computername% >>%conffile%
echo TLSConnect=psk >>%conffile%
echo TLSAccept=psk >>%conffile%
rem Здесь ваш ключ
echo TLSPSKIdentity=PSK ABIRVALG >>%conffile%
echo TLSPSKFile=%keyfile% >>%conffile%
rem У меня есть еще дополнительные пользовательские параметры 
echo Include=%~dp0zabbix_agentd.d >>%conffile%
echo LogFile=%~dp0zabbix_agentd.log >>%conffile%

echo Install zabbix service
zabbix_agentd.exe --config  %conffile% --install
echo Start zabbix service
zabbix_agentd.exe --config  %conffile% --start

echo END
pause
exit

батники, сохраняя имена, кладем в каталог вместе с zabbix_agentd.exe (скачиваем архив с сайта), также создаем подкаталог с дополнительными конфигами zabbix_agentd.d или удаляем строку с инклюдом. Туда можно поместить конфиг с UserParameter, я вот подключал скрипт мониторинг soft raid для windows. Заббикс капризно относится к конфигам, и из-за ошибки может не запуститься и в лог не писать! Можно использовать по отдельности, а можно вместе, uninstall еще и удаляет оба батника

Так, пробую подключить шаблон для пассивного режима работы заббикс агента, для этого нужно открыть порт. Сервер у меня за роутером, на роутере разрешен проброс только для определенного сервера. P.S. можно в "Access list" записать доменное имя сервера и тогда не придется переписывать при смене ip.

netsh advfirewall firewall add rule name= "Open Port 10050 ZABBIX" dir=in action=allow protocol=TCP localport=10050

Сервер агент увидел, но новых элементов не появилось. Позже элементы появились, но есть НО - я установил таймаут и на сервере и на клиенте 30, но все равно агент отваливается:

Get value from agent failed: cannot connect to [[XXX.YYY.uuu.III]:10050]: [4] Interrupted system call

Буду искать причину, вроде проблема в скрипте, типа долго выполняется, но агент в активном режиме, тестировать сложно.

Оказывается, шаблон был создан для пассивного агента, простое изменение типа в настройках обнаружения и прототипах элементов данных исправило проблему

Попутно настраиваем триггеры, оповещения, зависимости и прочее

Комментариев нет:

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