Установка и настройка Zabbix 5

Thank you for reading this post, don't forget to subscribe!

Zabbix — рас­пре­де­лен­ная систе­ма мони­то­рин­га, состо­я­щая из четы­рех основ­ных компонентов:

  1. Zabbix-сер­вер. Ядро систе­мы мони­то­рин­га. Ком­по­нент отве­ча­ет за визу­а­ли­за­цию, агре­га­цию и ана­ли­ти­ку дан­ных, опо­ве­ще­ния, управ­ле­ние рас­пре­де­лен­ны­ми ком­по­нен­та­ми (прок­си и аген­та­ми). В каче­стве веб-сер­ве­ра вен­дор поз­во­ля­ет исполь­зо­вать Apache или Nginx.
  2. Zabbix-прок­си. Этот ком­по­нент отве­ча­ет за управ­ле­ние Zabbix-аген­та­ми. Исполь­зо­ва­ние прок­си необя­за­тель­но, но поз­во­ля­ет сни­зить нагруз­ку на Zabbix-сер­вер за счет пере­но­са с него функ­ций управ­ле­ния аген­та­ми и пре­до­б­ра­бот­ки дан­ных (этот функ­ци­о­нал появил­ся в пятой вер­сии Zabbix).
  3. Zabbix-агент. Агент — конеч­ный ком­по­нент инфра­струк­ту­ры мони­то­рин­га. Выпол­ня­ет сбор и отправ­ку дан­ных о про­из­во­ди­тель­но­сти на Zabbix-прок­си или Zabbix-сервер.
  4. База дан­ных Zabbix. Хра­ни­ли­ще мет­рик про­из­во­ди­тель­но­сти. Вен­дор под­дер­жи­ва­ет реля­ци­он­ные базы дан­ных: MySQL, PostgreSQL, SQL Server, Oracle. Обра­ща­ем вни­ма­ние, что с вер­сии 5.0 пре­кра­ще­на под­держ­ка базы дан­ных IBM DB2.

Далее уста­но­вим репо­зи­то­рии ПО. Это необ­хо­ди­мо для полу­че­ния акту­аль­но­го набо­ра паке­тов с ком­по­нен­та­ми Zabbix и PostgreSQL.

Выпол­ним команды:

# yum install https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# yum clean all

Репо­зи­то­рии с акту­аль­ны­ми вер­си­я­ми уста­нав­ли­ва­е­мых ком­по­нен­тов для раз­лич­ных плат­форм мож­но най­ти на сай­те производителей:

Сле­ду­ю­щий шаг — уста­нов­ка Zabbix-сер­ве­ра и Zabbix-агента:

# yum install zabbix-server-pgsql zabbix-agent

Теперь вне­сем изме­не­ния в кон­фи­гу­ра­цию репо­зи­то­рия Zabbix: нуж­но вклю­чить zabbix frontend в фай­ле кон­фи­гу­ра­ции /etc/yum.repos.d/zabbix.repo, изме­нив зна­че­ние клю­ча enabled со зна­че­ния 0 на зна­че­ние 1.

Уста­но­вим Red Hat Software Collections для упро­ще­ния про­цес­са даль­ней­шей настройки:

# yum install centos-release-scl

Сле­ду­ю­щий шаг — уста­нов­ка PostgreSQL и дру­гих необ­хо­ди­мых паке­тов. Обра­ти­те вни­ма­ние, что в нашем при­ме­ре мы рабо­та­ем с локаль­ным хра­ни­ли­щем на базе PostgreSQL (в слу­чае с MySQL имя паке­та для Zabbix-сер­ве­ра будет отличаться).

# yum install postgresql12-server zabbix-web-pgsql-scl zabbix-nginx-conf-scl

Ини­ци­а­ли­зи­ру­ем, настро­им авто­за­пуск и запу­стим БД PostgreSQL:

# /usr/pgsql-12/bin/postgresql-12-setup initdb

# systemctl enable postgresql-12

# systemctl start postgresql-12

После успеш­но­го запус­ка созда­дим базу дан­ных для Zabbix и поль­зо­ва­те­ля в ней. Пер­вая коман­да запро­сит пароль:

# sudo -i -u postgres createuser --pwprompt zabbix

# sudo -i -u postgres createdb -O zabbix zabbix

Вне­сем изме­не­ния в кон­фи­гу­ра­ци­он­ный файл
/var/lib/pgsql/12/data/pg_hba.conf
для кор­рект­но­го под­клю­че­ния к БД PostgreSQL с паро­лем. Метод для обо­их под­клю­че­ний дол­жен быть md5:

После созда­ния поль­зо­ва­те­ля орга­ни­зу­ем для него схе­му по умолчанию:

# sudo -i -u postgres psql -U zabbix

# zabbix=> create schema zabbix;

# zabbix=> ALTER ROLE zabbix SET search_path = zabbix;

# zabbix=> \q
Сле­ду­ю­щий шаг — уста­нов­ка в БД схе­мы данных:

# zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix

Теперь впи­ши­те создан­ный для БД пароль в кон­фи­гу­ра­ци­он­ный файл Zabbix
/etc/zabbix/zabbix_server.conf
в пара­мет­ры DBHost, DBName, DBSchema, DBUser и DBPassword.

Настро­им NGINX для его кор­рект­ной рабо­ты в Zabbix. Настрой­ки выпол­ня­ют­ся в кон­фи­гу­ра­ци­он­ном файле
/etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf
Необ­хо­ди­мо рас­ком­мен­ти­ро­вать две стро­ки и ука­зать IP-адрес или имя сервера:

listen 80;
server_name <ip адрес или имя сервера>;

Сле­ду­ю­щий файл, кото­рый нуж­но скорректировать, —
/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf.
Вно­сим изме­не­ния в двух местах:

listen.acl_users = apache,nginx

php_value[date.timezone] = Europe/Moscow

Теперь запус­ка­ем сер­ви­сы Zabbix и добав­ля­ем их в автозапуск:

systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

systemctl enable zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm

Если на преды­ду­щих шагах все было сде­ла­но вер­но, при пере­хо­де по име­ни или адре­су сер­ве­ра в бра­у­зе­ре откро­ет­ся началь­ное окно настрой­ки Zabbix 5.0:

Пере­хо­дим на экран Configure DB connection и ука­зы­ва­ем рек­ви­зи­ты под­клю­че­ния к БД:

На экране Zabbix server details — имя хоста, на кото­ром уста­нов­лен Zabbix, порт дол­жен остать­ся ука­зан­ным по умолчанию:

Пере­хо­дим на послед­ний экран и нажи­ма­ем Finish. Настрой­ка завершена.

Стан­дарт­ная учет­ная запись для вхо­да: Admin с паро­лем zabbix.

Zabbix готов к рабо­те, и мож­но при­сту­пать к его настрой­ке. В неко­то­рых ситу­а­ци­ях для кор­рект­ной рабо­ты систе­мы необ­хо­ди­мо отклю­чить SElinux.

Установка Zabbix в виде Docker-контейнера

Быст­рая уста­нов­ка — выпол­ня­ет­ся за 10 минут или мень­ше. Доба­вим репо­зи­то­рий Docker и уста­но­вим необ­хо­ди­мые пакеты:

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# yum install docker-ce docker-ce-cli containerd.io docker-compose

Сле­ду­ю­щий шаг — кло­ни­ро­ва­ние репо­зи­то­рия Zabbix с Github:

# git clone https://github.com/zabbix/zabbix-docker.git

Перей­дем в кло­ни­ро­ван­ный репо­зи­то­рий. Коман­да ls пока­жет име­ю­щи­е­ся объекты:

# cd zabbix-docker/

 

Запу­стим демон Docker:

# systemctl start docker

Собе­рем и запу­стим кон­тей­не­ры с Zabbix:

# docker-compose -f docker-compose_v3_centos_pgsql_latest.yaml up -d

После выпол­не­ния коман­ды выше запу­стят­ся ком­по­нен­ты Zabbix, мож­но пере­хо­дить в веб-интерфейс:

Настройка и интеграция Zabbix 5

Добавление пользователя

Каж­до­му поль­зо­ва­те­лю в Zabbix соот­не­се­ны имя поль­зо­ва­те­ля и пароль — рек­ви­зи­ты, с кото­ры­ми мож­но вой­ти в систе­му. Все паро­ли в Zabbix хра­нят­ся в зашиф­ро­ван­ном виде. При необ­хо­ди­мо­сти мож­но настро­ить авто­ри­за­цию поль­зо­ва­те­лей через Active Directory или LDAP. В этой ста­тье мы рас­смот­рим рабо­ту встро­ен­ных в Zabbix пользователей.

В Zabbix каж­дый поль­зо­ва­тель дол­жен вхо­дить в груп­пу. На осно­ве групп в Zabbix при­сва­и­ва­ют­ся те или иные права.

Для добав­ле­ния поль­зо­ва­те­ля в веб-интер­фей­се Zabbix необ­хо­ди­мо перей­ти на пред­став­ле­ние Administration  Users и в верх­нем пра­вом углу нажать Create User.

Теперь появят­ся поля, в кото­рых важ­но ука­зать имя поль­зо­ва­те­ля, груп­пу и пароль. Осталь­ное мож­но оста­вить по умолчанию.
Для каж­до­го поль­зо­ва­те­ля мож­но ука­зать его дан­ные для опо­ве­ще­ния: элек­трон­ную почту, акка­унт в Telegram, имя в Slack и т. д. Что­бы при­вя­зать эти дан­ные к поль­зо­ва­те­лю, перей­дем на вклад­ку Media, нажмем Add и доба­вим адрес элек­трон­ной почты. Здесь мож­но ука­зать кри­тич­ность собы­тий, по кото­рым нуж­но отправ­лять уве­дом­ле­ния, и интер­вал оповещений.

После сохра­не­ния этих дан­ных мож­но нажать Add на вклад­ке User и сохра­нить создан­но­го пользователя.

Что­бы сме­нить пароль любо­го поль­зо­ва­те­ля, на пред­став­ле­нии Administration — Users нуж­но клик­нуть на соот­вет­ству­ю­ще­го поль­зо­ва­те­ля, нажать Change password и вве­сти новый пароль.

Ана­ло­гич­ным обра­зом созда­ем груп­пу поль­зо­ва­те­лей. На пред­став­ле­нии Administration — Groups в верх­нем пра­вом углу нажмем Create user group.

Ука­зы­ва­ем имя груп­пы и создан­но­го поль­зо­ва­те­ля. Далее пере­хо­дим на вклад­ку Permissions.
На вклад­ке Permissions ука­зы­ва­ем имя груп­пы хостов, к дан­ным по кото­рой у созда­ва­е­мой груп­пы будет доступ. После добав­ле­ния груп­пы нажи­ма­ем Add.

Таким обра­зом, груп­па созда­на, ей предо­став­лен тре­бу­е­мый уро­вень прав и при­вя­зан пользователь.

Низкоуровневое обнаружение (Low Level Discovery, LLD)

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

Ниже, в каче­стве при­ме­ра, Discovery Rules (пра­ви­ла обна­ру­же­ния) для шаб­ло­на Windows. Здесь их четы­ре для сле­ду­ю­щих сущностей:

  • фай­ло­вых систем,
  • сете­вых интерфейсов,
  • физи­че­ских дисков,
  • сер­ви­сов.

Рас­смот­рим устрой­ство пра­ви­ла обна­ру­же­ния для фай­ло­вых систем. В поле Key ука­зан эле­мент дан­ных vfs.fs.discovery, встро­ен­ный в Zabbix. Этот эле­мент воз­вра­ща­ет спи­сок фай­ло­вых систем, при­мон­ти­ро­ван­ных к сер­ве­ру. Дру­гие встро­ен­ные эле­мен­ты дан­ных собра­ны на спе­ци­аль­ной стра­ни­це производителя.

На вклад­ке Filters пере­чис­ле­ны про­то­ти­пы дан­ных, кото­рые в слу­чае обна­ру­же­ния новых эле­мен­тов рас­по­зна­ют их и запи­сы­ва­ют в БД.

В Zabbix воз­мож­но добав­ле­ние соб­ствен­ных эле­мен­тов дан­ных, соб­ствен­ных филь­тров и макросов.

Изменение шаблонов Zabbix

Шаб­ло­ны вклю­ча­ют в себя:

  • при­ло­же­ния (Applications),
  • экзем­пля­ры (Items),
  • мак­ро­сы (Macros),
  • триг­ге­ры (Triggers),
  • пра­ви­ла обна­ру­же­ния (Discovery rules),
  • дру­гие эле­мен­ты дан­ных.

Каж­дый из этих эле­мен­тов отве­ча­ет за те или иные воз­мож­но­сти. В ста­тье мы раз­бе­рем фор­ми­ро­ва­ние поро­го­вых схем в триг­ге­рах на при­ме­ре шаб­ло­на для Windows и его части — шаб­ло­на для фай­ло­вых систем.

В при­ме­ре ниже мы видим про­то­ти­пы триг­ге­ров, кото­рые соот­вет­ству­ют поро­гам по фай­ло­вым систе­мам сер­ве­ров Windows. Что­бы изме­нить поро­го­вую схе­му, доста­точ­но перей­ти в нуж­ный шаб­лон и вне­сти корректировки.

Полу­чить подроб­ную инфор­ма­цию о созда­нии выра­же­ний для настрой­ки поро­гов мож­но в доку­мен­та­ции на сай­те Zabbix.

Zabbix Proxy

Zabbix Proxy — это спе­ци­аль­ный сер­вис, кото­рый рабо­та­ет на выде­лен­ном сер­ве­ре. Он обес­пе­чи­ва­ет буфе­ри­за­цию посту­па­ю­щих от аген­тов дан­ных и их даль­ней­шую транс­ля­цию в сто­ро­ну Zabbix-сер­ве­ра. Zabbix Proxy исполь­зу­ет отдель­ную базу дан­ных и под­дер­жи­ва­ет SQLite, MySQL и PostgreSQL.

Сер­вис эффек­тив­но исполь­зо­вать для сбо­ра мет­рик с аген­тов в выде­лен­ных или уда­лен­ных сетях (за фай­ер­во­лом), участ­ков инфра­струк­ту­ры с нена­деж­ной свя­зью и для сни­же­ния нагруз­ки на Zabbix-сер­вер. Начи­ная с вер­сии 5.0 прок­си под­дер­жи­ва­ет пре­до­б­ра­бот­ку дан­ных на сво­ей стороне.

Интеграция Zabbix с внешними системами

В этом раз­де­ле раз­бе­рем воз­мож­но­сти инте­гра­ции Zabbix с систе­мой визу­а­ли­за­ции Grafana, кото­рую мож­но исполь­зо­вать для отоб­ра­же­ния ста­ту­сов, гра­фи­ков, зна­че­ний и дру­гих типов дан­ных. Для уско­ре­ния про­цес­са уста­но­вим и запу­стим Grafana в виде Docker-контейнера.

# docker run -d -p 3000:3000 grafana/grafana

После уста­нов­ки удо­сто­ве­рим­ся, что кон­тей­нер с Grafana выполняется:

# docker ps | grep grafana
1592a00802b5 grafana/grafana "/run.sh" 2 minutes ago Up 21 minutes 0.0.0.0:3000->3000/tcp optimistic_diffie

Исполь­зуя ID кон­тей­не­ра, уста­но­вим спе­ци­а­ли­зи­ро­ван­ный пла­гин для Zabbix и пере­за­гру­зим контейнер:

# docker exec 1592a00802b5 grafana-cli plugins install alexanderzobnin-zabbix-app

# docker restart 1592a00802b5

Вхо­дим в Grafana через бра­у­зер (учет­ные дан­ные по умол­ча­нию admin / admin):

Далее нуж­но акти­ви­ро­вать пла­гин для Zabbix. Что­бы это сде­лать, перей­дем в Configurations — Plugins и вклю­чим пла­гин для Zabbix:
Пла­гин вклю­чен, оста­лось его настро­ить. Важ­ные поля для запол­не­ния — URLUserPassword:
После выпол­нен­ных настро­ек мож­но добав­лять на даш­бор­ды раз­лич­ные эле­мен­ты дан­ных на осно­ве мет­рик из Zabbix.
У Grafana есть мно­го гото­вых даш­бор­дов, их мож­но най­ти на сай­те про­ек­та и импор­ти­ро­вать через интер­фейс Grafana.