Введение
В своей инструкции по установке и настройке zabbix я вообще не затрагиваю вопрос базы данных mysql или производительности сервера в целом. Я просто беру дефолтные настройки mariadb, которые идут с установкой и использую их. Когда у вас не очень большая инфраструктура на мониторинге этого вполне достаточно, чтобы нормально пользоваться системой.
Если вы активно используете zabbix и внедряете его повсеместно во все используемые системы (а я рекомендую так делать), то вы рано или поздно столкнетесь с вопросом производительности системы мониторинга и размера базы данных zabbix.
Тема производительности zabbix очень индивидуальная. Она напрямую зависит от того, как вы его используете, а схемы мониторинга могут быть очень разные. Одно дело мониторить несколько серверов, а другое дело нагруженные свичи на 48 портов со съемом метрик с каждого порта раз в 30 секунд.
Чтобы помочь вам разобраться в этой теме и прикинуть, к чему готовиться, я поделюсь с вами своим опытом эксплуатации заббикса, его нагрузки, производительности и обслуживания базы данных mysql. Расскажу, как можно уменьшить размер базы.
Возможности Zabbix 5
Более подробно вы можете изучить возможности на официальном сайте Что нового в Zabbix 5.0 LTS. Я хочу отметить важные для меня возможности:
- Zabbix можно развернуть локально или в облаке
- Реализована одна и та же политика источника для iframe, что означает, что Zabbix веб-интерфейс нельзя поместить во фреймы на другом домене
- Переписан Zabbix Agent с поддержкой плагинов и сохранением состояния
- Обнаружение счетчиков JMX (Java расширений управления)
- Обнаружение счетчиков производительности Windows
- Встроенная интеграция с системами ITSM (IT Service Management) — управление IT- услугами. Zabbix 5 представляет набор готовых интеграций со стандартными облачными и локальными системами ITSM: Jira, OTRS, Redmine, Zendesk, Zammad, Servicenow.
- Встроенные интеграции с системами оповещений: XMPP (Jabber), Telegram, Slack, Mattermost, Msteams, Victorops, PagerDuty, OpsGenie.
- Добавлены новые шаблоны и плагины для мониторинга различных сервисов, приложений и устройств. Большинство шаблонов теперь используют дополнительные возможности для автоматического обнаружения различных ресурсов. Из коробки существуют шаблоны Zabbix для ClickHouse, MySQL, nginx, Redis, PostgreSQL, Haproxy, Memcached, Elasticsearch.
- Возможность сброса SNMP кэша, изменений контекста SNMPv3
Шаблоны Zabbix в версии 5 стали более сложными с кучей макросов и автообнаружений.
Подготовка к обновлению
Важная информация перед обновлением. Версия 5.2 без длительной поддержки. Через пол года к ней перестанут выходить обновления, так что вам обязательно придется обновляться на следующую версию. Если для вас не критичны нововведения этого релиза, пропускайте его и ждите новой LTS версии.
Если у вас версия ниже 5.0, то предварительно обновите ее до указанной. У меня есть цикл статей на тему обновления Zabbix:
- 2.4 до 3.0
- 3.0 до 3.2
- 3.2 до 3.4
- 3.4 до 4.0
- 4.0 до 4.2
- 4.2 до 4.4
- 4.4 до 5.0
Перед обновлением, сделаем на всякий случай бэкап базы данных. Для этого предварительно остановим сервер с агентом.
У меня что-то активно писалось в базу, поэтому сервер выключался долго. Я проверил лог zabbix-server, чтобы убедиться в корректном выключении. Там все нормально было, сервер штатно завершил работу, дописав то, что у него там накопилось. Так что бэкапим.
zabbix | название базы данных заббикса |
-uzabbix | ключ -u и дальше имя пользователя базы данных |
-p’password’ | ключ -p и дальше пароль пользователя бд, если в пароле есть спецсимволы, экранируйте их одиночными кавычками |
На всякий случай сохраним php скрипты админки, чтобы можно было оперативно запустить старую версию в случае нештатной ситуации. Хотя лично я сделал снепшот виртуалки перед обновлением, чтобы откатиться назад в случае проблем.
Centos 7
Подключаем репозиторий версии zabbix 5.0:
# rpm -Uvh https://repo.zabbix.com/zabbix/5.2/rhel/7/x86_64/zabbix-release-5.2-1.el7.noarch.rpm
Centos 8
# rpm -Uvh https://repo.zabbix.com/zabbix/5.2/rhel/8/x86_64/zabbix-release-5.2-1.el8.noarch.rpmСтарый репозиторий от версии 4.4 будет автоматически удален.
Очищаем и пересоздаем кэш yum:
Удаляем пакет текущего репозитория:
Подключаем новый:
Обновляем информацию о репозиториях:
Удаляем пакет текущего репозитория:
Подключаем новый:
Обновляем информацию о репозиториях:
Ubuntu 20
Удаляем пакет текущего репозитория:
Подключаем новый:
Обновляем информацию о репозиториях:
Если у вас другие версии систем, то простой найдите ссылки пакетов под свою версию в официальном репозитории — https://repo.zabbix.com/zabbix/5.2/ Дальнейшее обновление не будет отличаться от текущего.
К обновлению подготовились, можно приступать.
Использование SpeedTest-Cli вместе с Zabbix
В этой статье я продемонстрирую, как мы можем использовать скрипты в Zabbix через UserParameter. Я буду использовать SpeedTest-cli в качестве примера, для выполнения тестов скорости загрузки интернет канала.
Мы будем использовать UserParameter, он используется, когда нам нужна информация, которую сам zabbix не предоставляет, мы можем использовать команды и скрипты, не беспокоясь о том, поддерживает ли их zabbix, мы можем создавать собственные ключи.
Выполнение установки SpeedTest-Cli
sudo apt-get install speetest-cli
Выполним простой тест, показывающий только пинг, скорость загрузки и отдачи, а также сохраним в файл TXT.
Для этого выполним:
speedtest-cli ---bytes ---simple > /tmp/speed.txt xak@zabbix-new:~$ speedtest-cli ---bytes ---simple > /tmp/speed.txt xak@zabbix-new:~$ cat /tmp/speed.txt Ping: 1.692 ms Download: 10.56 Mbyte/s Upload: 11.46 Mbyte/s
В данном примере скорость измеряется с ближайшим сервером, вызвав справку
speedtest –help
Вы можете сменить сервер для проверки на нужный.
Создание графика выполнения скриптов:
/etc/crontab: system-wide crontab Unlike any other crontab you don’t have to run the `crontab’ command to install the new version when you edit this file and files in /etc/cron.d. These files also have username fields, that none of the other crontabs do.SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command 17 * * * * root cd / && run-parts ---report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.monthly ) */20 * * * * root /usr/bin/speedtest-cli ---simple > /tmp/speed.txt
Поскольку speedtest использует пропускную способность интернета для выполнения тестов, не стоит его запускать сильно часто, в данном примере я настроил запуск каждые 20мин.
Создание UserParameter
Поскольку скрипт speedtest устанавливается на самом zabbix, нам нужно будет настроить UserParameter в собственном агенте Zabbix Server. Добавьте следующие строки в
/etc/zabbix/zabbix-agentd.conf:
UserParameter=upload,cat /tmp/speed.txt | grep «Upload:» | cut -d » » -f2 UserParameter=download,cat /tmp/speed.txt | grep «Download:» | cut -d » » -f2
Выполните описанную выше процедуру, перезапустите агент zabbix
Используйте zabbixget, чтобы проверить, работает ли ключ.
xak@zabbix-new:~$ zabbix_get -s 127.0.0.1 -p 10050 -k «download» && zabbix_get -s 127.0.0.1 -p 10050 -k «upload» 87.31 33.98
Наш UserParameter работает правильно.
Создание элемента данных в Zabbix
Повторяем действия для upload:
Повторяем действия для upload
Дождитесь появления запланированного обновления в Zabbix.
взято тут
ПОЛЕЗНОЕ:
API
Аутентификация
server:~# apt install curl server:~# curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d ' { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "zabbix" }, "id": 1 } ' http://127.0.0.1/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","id":1}
Работа с объектами host/template
server:~# apt install jq
Получение списка узлов и шаблонов из Zabbix
server:~# curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d ' { "jsonrpc": "2.0", "method": "host.get", "params": {}, "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "id": 2 } ' http://127.0.0.1/zabbix/api_jsonrpc.php | jq ...
... "method": "template.get", ...
- Пример запроса определенных атрибутов и с фильтром
... "params": { "output": , "templateids": }, ...
Доступ к результатам мониторинга
curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d ' { "jsonrpc": "2.0", "method": "history.get", "params": { "output": "extend", "history": 0, "itemids": "NNNNN", "sortfield": "clock", "sortorder": "DESC", "limit": 10 }, "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "id": 2 } ' http://127.0.0.1/zabbix/api_jsonrpc.php | jq
Оформление запросов в виде BASH скриптов
server:~# export AUTH=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx server:~# cat /root/zab_get_hosts.sh
#!/bin/sh curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d " { \"jsonrpc\": \"2.0\", \"method\": \"host.get\", \"params\": {}, \"auth\": \"${AUTH}\", \"id\": 2 } " http://127.0.0.1/zabbix/api_jsonrpc.php
server:~# /root/zab_get_hosts.sh | jq Список имен узлов server:~# /root/zab_get_hosts.sh | jq '.result | .[] | { host: .host} | tostring' | tr -d '{}\\' | tr '"' ' ' | cut -d ' ' -f5
Получение списка карт и их элементов из Zabbix
server.corp1.un:~# cat /root/zab_get_maps.sh
#!/bin/sh curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d " { \"jsonrpc\": \"2.0\", \"method\": \"map.get\", \"params\": { \"selectLinks\": \"extend\", \"selectSelements\": \"extend\" }, \"auth\": \"${AUTH}\", \"id\": 2 } " http://127.0.0.1/zabbix/api_jsonrpc.php | jq
Пример изменения конфигурации через Zabbix API
server.corp1.un:~# cat /root/zab_set_map_name.sh
#!/bin/sh MAPID=$1 MAPNAME=$2 curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d " { \"jsonrpc\": \"2.0\", \"method\": \"map.update\", \"params\": { \"sysmapid\": \"${MAPID}\", \"name\": \"${MAPNAME}\" }, \"auth\": \"${AUTH}\", \"id\": 2 } " http://127.0.0.1/zabbix/api_jsonrpc.php
server.corp1.un:~# /root/zab_set_map_name.sh 2 "Super MAP"
Установка Zabbix 3.2 на Freebsd
Сначала посмотрим, какие там есть версии:
# pkg search zabbix
Когда вы будете устанавливать, скорее всего выйдет более свежая версия, используйте ее для установки. В моем случае я ставлю самую последнюю версию на момент написания статьи:
# pkg install zabbix32-server-3.2.0
# mysql -u root -p
mysql> create database zabbix character set utf8 collate utf8_bin; mysql> grant all privileges on zabbix.* to zabbix@localhost identified by ’ password’ ; mysql> flush privileges;
# cd /usr/local/share/zabbix32/server/database/mysql # cat schema.sql images.sql data.sql | mysql -u zabbix -p zabbix
password
Данные для подключения к базе нужно добавить в конфиг сервера. Сначала создадим его, скопировав файл с примерами настроек:
# cp /usr/local/etc/zabbix3/zabbix_server.conf.sample /usr/local/etc/zabbix3/zabbix_server.conf
# mcedit /usr/local/etc/zabbix3/zabbix_server.conf
DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=password
# sysrc zabbix_server_enable=YES # service zabbix_server start
Продолжаем установку
Теперь нам надо поставить web морду для zabbix. Устанавливаем из пакетов zabbix32-frontend-3.2.0. В вашем случае посмотрите сами последнюю версию и устанавливайте ее.
# pkg install zabbix32-frontend-3.2.0
mod_php
# pkg info | grep php
# pkg search mod_php56
# pkg install -y mod_php56-5.6.26
Открываем /usr/local/etc/apache24/httpd.conf :
Ищем строчку:
DirectoryIndex index.html
index.php
DirectoryIndex index.html index.php
ServerName =
ServerName=zabbixserver.local
<FilesMatch "\.php$"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch "\.phps$"> SetHandler application/x-httpd-php-source </FilesMatch>
Alias
Alias /zabbix /usr/local/www/zabbix32
<Directory «/usr/local/www/zabbix32»>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
Allow from all
</Directory>
Теперь создадим конфиг для php и подредактируем его:
# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini # mcedit /usr/local/etc/php.ini
post_max_size = 16M max_execution_time = 300 max_input_time = 300 date.timezone = Europe/Moscow always_populate_raw_post_data = -1
Меняем владельца файлов на www у папки usr/local/etc/zabbix:
chown -R www:www /usr/local/www/zabbix3
# service apache24 restart
http://ip-сервера/zabbix
Нажимаем «Next step«
На данном этапе проверятся php, если все сделали по инструкции — все будет в статусе OK, если все OK, нажимаем «Next step«
Тут оставляем все в default, в поля User и Password вписывается данные для доступа в mysql, которые мы создали выше и нажимаем «Next step»
Оставляем по default и нажимаем «Next step»
Станица сведений, нажимаем «Next step»
Frontend установлен! Я Вас поздравляю. Нажимаем кнопку «Finish» и попадаем на страницу Авторизации
По умолчанию:
Login: Admin (Обязательно с большой буквы)
Password: zabbix
Далее вы попадете на главную страницу
На этом установка zabbix 3.2.0 закончена
Далее нам не помешал бы zabbix agent на нашем сервере
Триггеры шаблона
Для полноты картины, поясню остальные триггеры шаблона, чтобы у вас было понимание, за чем они следят и как правильно реагировать на них. Ниже список триггеров шаблона для мониторинга mysql сервера.
- Buffer pool utilization is too low (less {$MYSQL.BUFF_UTIL.MIN.WARN}% for 5m) — под innodb пул выделено слишком много памяти и она не используется вся. Триггер чисто информационный, делать ничего не надо, если у вас нет дефицита памяти на сервере. Если нехватка оперативной памяти есть, то имеет смысл забрать немного памяти у mysql и передать другому приложению. Настраивается потребление памяти пулом параметром innodb_buffer_pool_size.
- Failed to get items (no data for 30m) — от mysql сервера не поступают новые данные мониторинга в течении 30 минут. Имеет смысл уменьшить этот интервал до 5-10 минут.
- Refused connections (max_connections limit reached) — срабатывает ограничение на максимальное количество подключений к mysql. Увеличить его можно параметром mysql сервера — max_connections. Его необходимо увеличить, если позволяют возможности сервера. Напомню, что увеличенное количество подключений требует увеличения потребления оперативной памяти. Если у вас ее уже не хватает, нет смысла увеличивать число подключений. Нужно решать вопрос с потреблением памяти.
- Server has aborted connections (over {$MYSQL.ABORTED_CONN.MAX.WARN} for 5m) — сервер отклонил подключений выше заданного порога в макросе. Надо идти в лог mysql сервера и разбираться в причинах этого события. Скорее всего там будут подсказки.
- Server has slow queries (over {$MYSQL.SLOW_QUERIES.MAX.WARN} for 5m) — количество медленных запросов выше установленного макросом предела. Надо идти и разбираться с медленными запросами. Тема не самая простая. Надо заниматься профилированием запросов и решать проблемы по факту — добавлением индексов, редактированием запросов, увеличения ресурсов mysql сервера и т.д.
- Service has been restarted (uptime < 10m) — информационный триггер, срабатывающий на перезапуск mysql сервера (не ребут самого сервера).
- Service is down — служба mysql не запущена.
- Version has changed (new version value received: {ITEM.VALUE}) — версия mysql сервера изменилась. Тоже информационный триггер, сработает, к примеру, после обновления mysql сервера.
Заключение
Напоминаю, что с обновлением 5.2 появились новые шаблоны. Они автоматически не появятся у вас на сервере. Их нужно будет скачать и импортировать вручную из репозитория — https://github.com/zabbix/zabbix/tree/master/templates. Это же касается и способов оповещения, который много добавилось в 5-й версии. Если не обновили их вручную при переходе на 5-ю ветку, то так же можете забрать их из репы и импортировать к себе на сервер.
Онлайн курс Infrastructure as a code
Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца.
Что даст вам этот курс:
- Познакомитесь с Terraform.
- Изучите систему управления конфигурацией Ansible.
- Познакомитесь с другими системами управления конфигурацией — Chef, Puppet, SaltStack.
- Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
- В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins
Смотрите подробнее программу по .
Заключение
Здорово, что разработчики сами занялись написанием готовых шаблонов для мониторинга сетевых устройств, операционных систем и приложений. Поняли, что это будет способствовать развитию продукта. Многие шаблоны, которые разрабатывали сами пользователи, становятся неактуальными, так как разработчики их делают лучше. Собственно, это и логично. Кто лучше всех знает продукт, как не они. За последнее время появилось много обновления по этой теме. Надеюсь, будет еще больше.
Онлайн курсы по Mikrotik
Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курсы по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Помимо официальной программы, в курсах будут лабораторные работы, в которых вы на практике сможете проверить и закрепить полученные знания. Все подробности на сайте .
Стоимость обучения весьма демократична, хорошая возможность получить новые знания в актуальной на сегодняшний день предметной области. Особенности курсов:
- Знания, ориентированные на практику;
- Реальные ситуации и задачи;
- Лучшее из международных программ.