Введение
В своей инструкции по установке и настройке zabbix я вообще не затрагиваю вопрос базы данных mysql или производительности сервера в целом. Я просто беру дефолтные настройки mariadb, которые идут с установкой и использую их. Когда у вас не очень большая инфраструктура на мониторинге этого вполне достаточно, чтобы нормально пользоваться системой.
Если вы активно используете zabbix и внедряете его повсеместно во все используемые системы (а я рекомендую так делать), то вы рано или поздно столкнетесь с вопросом производительности системы мониторинга и размера базы данных zabbix.
Тема производительности zabbix очень индивидуальная. Она напрямую зависит от того, как вы его используете, а схемы мониторинга могут быть очень разные. Одно дело мониторить несколько серверов, а другое дело нагруженные свичи на 48 портов со съемом метрик с каждого порта раз в 30 секунд.
Чтобы помочь вам разобраться в этой теме и прикинуть, к чему готовиться, я поделюсь с вами своим опытом эксплуатации заббикса, его нагрузки, производительности и обслуживания базы данных mysql. Расскажу, как можно уменьшить размер базы.
Установка обновления zabbix 5.0 до 5.2
Centos 7, 8
Для начала проверим список установленных пакетов zabbix в системе. Их название может быть разным в зависимости от используемых репозиториев. К примеру, в centos 7 у пакетов может быть дополнение в виде scl к названию пакета.
Centos 7:
# rpm -qa | grep zabbix zabbix-web-5.0.5-1.el7.noarch zabbix-web-mysql-scl-5.0.5-1.el7.noarch zabbix-agent-5.0.5-1.el7.x86_64 zabbix-web-deps-scl-5.0.5-1.el7.noarch zabbix-apache-conf-scl-5.0.5-1.el7.noarch zabbix-release-5.2-1.el7.noarch zabbix-server-mysql-5.0.5-1.el7.x86_64
Centos 8:
# rpm -qa | grep zabbix zabbix-server-mysql-5.0.5-1.el8.x86_64 zabbix-web-5.0.5-1.el8.noarch zabbix-web-mysql-5.0.5-1.el8.noarch zabbix-web-deps-5.0.5-1.el8.x86_64 zabbix-release-5.0-1.el8.noarch zabbix-agent-5.0.5-1.el8.x86_64
Устанавливаем обновление zabbix на сервер Centos 8, выбирая установленные у вас пакеты:
# yum upgrade zabbix-web zabbix-web-mysql zabbix-server-mysql zabbix-agent
Для centos 7 будет такой список:
# yum upgrade zabbix-web zabbix-web-mysql-scl zabbix-agent zabbix-server-mysql
Обращаю внимание, что на момент написания данной статья, пакетов 5.2 для Centos 7 в репозиториях нет. В официальных инструкциях их тоже нет и не понятно, будут ли
Как только появятся, я дополню статью.
После завершения обновления, запускаем zabbix-server.
# systemctl start zabbix-server
Проверяем лог сервера. Необходимо дождаться обновления базы данных
Важно не трогать в этот момент сервер, не прерывать обновление, не пытаться его перезапустить. Если база большая, обновление может длиться очень долго
Рекомендую сначала где-то протестировать этот процесс, прежде чем обновлять прод.
# tail -f /var/log/zabbix/zabbix_server.log
В конце должны получить сообщение:
2860543:20201029:173036.441 completed 100% of database upgrade 2860543:20201029:173036.441 database upgrade fully completed
Есть ненулевой шанс, что будет какая-то ошибка с базой. Чаще всего возникают проблемы с какой-то нестандартной записью в таблице. Туда может попасть какой-то необычный символ, или с кодировкой проблемы. В этих случаях удаляйте проблемные записи, меняйте кодировку базы zabbix.
После обновления переходите в web интерфейс и проверяйте версию Zabbix. Должна быть 5.2.
На этом обновления Zabbix до 5.2 на Centos завершено.
Debian / Ubuntu
Устанавливаем само обновление zabbix на сервер с Debian или Ubuntu следующей командой:
# apt upgrade zabbix-agent zabbix-frontend-php zabbix-nginx-conf zabbix-server-mysql
После завершения обновления, запускаем сервер:
# systemctl start zabbix-server
В момент запуска произойдет обновление базы данных. Для маленькой базы (1-2 гб) это не займет много времени. Вы можете даже не заметить процесса. Если база больше, то надо подождать, пока не закончится обновление. Следить за ним можно с помощью просмотра лог файла zabbix сервера.
# tail -f /var/log/zabbix/zabbix_server.log
После завершения обновления базы, сервер запустится. После этого можно запустить и агент.
# systemctl start zabbix-agent
В логах агента и сервера можно посмотреть версию запущенных сервисов.
Starting Zabbix Agent . Zabbix 5.2.0 (revision bcf99fb248). Starting Zabbix Server. Zabbix 5.2.0 (revision bcf99fb248).
Теперь можно идти в веб интерфейс и смотреть на обновленную версию zabbix server. Перед этим почистите кэш браузера и удалите куки от страницы заббикса. Если этого не сделать, то могут быть проблемы и ошибки, с чем я не раз сталкивался. Если у вас в качестве веб сервера используется nginx, не забудьте поменять владельца директории /etc/zabbix/web на nginx, в том случае, если веб сервер работает от него. После обновления он будет принадлежать apache, а web интерфейс не заработает.
# chown -R nginx:nginx /etc/zabbix/web
Теперь можете лицезреть обновленную версию web интерфейса в браузере.
Установка и запуск web интерфейса
Все следующие компоненты поставятся, как зависимости:
Debian
# apt install zabbix-frontend-php php-mysql #1m # cat /etc/apache2/conf-available/zabbix-frontend-php.conf
... php_value date.timezone Europe/Moscow ... php_value date.timezone Europe/Moscow ...
# a2enconf zabbix-frontend-php # service apache2 reload # touch /etc/zabbix/zabbix.conf.php # chown www-data /etc/zabbix/zabbix.conf.php
http://server.corpX.un/zabbix/setup.php
# less /etc/zabbix/zabbix.conf.php
<?php // Zabbix GUI configuration file. global $DB; $DB = 'MYSQL'; $DB = 'localhost'; $DB = '0'; $DB = 'zabbix'; $DB = 'zabbix'; $DB = 'zabbix'; // Schema name. Used for IBM DB2 and PostgreSQL. $DB = ''; $ZBX_SERVER = 'localhost'; $ZBX_SERVER_PORT = '10051'; $ZBX_SERVER_NAME = ''; $IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
Подготовка к обновлению
Важная информация перед обновлением. Версия 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/ Дальнейшее обновление не будет отличаться от текущего.
К обновлению подготовились, можно приступать.
Дополнительные материалы по Zabbix
Онлайн курс Infrastructure as a code
Если у вас есть желание научиться автоматизировать свою работу, избавить себя и команду от рутины, рекомендую пройти онлайн курс Infrastructure as a code. в OTUS. Обучение длится 4 месяца.
Что даст вам этот курс:
- Познакомитесь с Terraform.
- Изучите систему управления конфигурацией Ansible.
- Познакомитесь с другими системами управления конфигурацией — Chef, Puppet, SaltStack.
- Узнаете, чем отличается изменяемая инфраструктура от неизменяемой, а также научитесь выбирать и управлять ей.
- В заключительном модуле изучите инструменты CI/CD: это GitLab и Jenkins
Смотрите подробнее программу по .
Рекомендую полезные материалы по Zabbix: |
Настройки системы |
---|
Видео и подробное описание установки и настройки Zabbix 4.0, а также установка агентов на linux и windows и подключение их к мониторингу. Подробное описание обновления системы мониторинга zabbix версии 3.4 до новой версии 4.0. Пошаговая процедура обновления сервера мониторинга zabbix 2.4 до 3.0. Подробное описание каждого шага с пояснениями и рекомендациями. Подробное описание установки и настройки zabbix proxy для организации распределенной системы мониторинга. Все показано на примерах. Подробное описание установки системы мониторинга Zabbix на веб сервер на базе nginx + php-fpm. |
Мониторинг служб и сервисов |
Мониторинг температуры процессора с помощью zabbix на Windows сервере с использованием пользовательских скриптов. Настройка полноценного мониторинга web сервера nginx и php-fpm в zabbix с помощью скриптов и пользовательских параметров. Мониторинг репликации mysql с помощью Zabbix. Подробный разбор методики и тестирование работы. Описание настройки мониторинга tcp служб с помощью zabbix и его инструмента простых проверок (simple checks) Настройка мониторинга рейда mdadm с помощью zabbix. Подробное пояснение принципа работы и пошаговая инструкция. Подробное описание мониторинга регистраций транков (trunk) в asterisk с помощью сервера мониторинга zabbix. Подробная инструкция со скриншотами по настройке мониторинга по snmp дискового хранилища synology с помощью сервера мониторинга zabbix. |
Мониторинг различных значений |
Настройка мониторинга web сайта в zabbix. Параметры для наблюдения — доступность сайта, время отклика, скорость доступа к сайту. Один из способов мониторинга бэкапов с помощью zabbix через проверку даты последнего изменения файла из архивной копии с помощью vfs.file.time. Подробное описание настройки мониторинга размера бэкапов в Zabbix с помощью внешних скриптов. Пример настройки мониторинга за временем делегирования домена с помощью Zabbix и внешнего скрипта. Все скрипты и готовый шаблон представлены. Пример распознавания и мониторинга за изменением значений в обычных текстовых файлах с помощью zabbix. Описание мониторинга лог файлов в zabbix на примере анализа лога программы apcupsd. Отправка оповещений по событиям из лога. |
Что нового в Zabbix 5.4?
Все нововведения свежей версии Zabbix 5.4 вы можете прочитать в официальном релизе — https://www.zabbix.com/ru/whats_new_5_4. Я среди них выделил следующие:
- Ну конечно же новый синтаксис триггеров. Странно, что они это изменение не поставили на первое место. Я уже делал заметку (https://t.me/srv_admin/684) по этому поводу, так что не буду повторяться. Изменение очень значимое и полезное.
- Планировщик для pdf отчетов. Теперь можно будет настроить отправку регулярных отчетов себе на почту или куда-то еще. Интересная и полезная возможность. Для руководства в самый раз.
- Новые расширенные способы агрегации данных. Это следствие использования нового синтаксиса. Примеры этого уже были в заметке, на которую дал ссылку в начале.
- Обновлена визуализация. Как я понял, появилась возможность объединять дашборды в виде отдельных страниц на одном экране. В целом, полезно. Сам часто думаю о том, что переключаться между дашбордами не очень удобно и быстро. Надо бы это как-то упростить. Придумали поместить их во вкладки на дашборде. Посмотрим, удобно ли будет на практике.
Дальше изменения на мой взгляд не столь значительные, так что не буду их комментировать, просто перечислю:
- Новые api токены с истекающим сроком действия.
- Tags стали поддерживаться еще большим количеством объектов (templates, hosts, host prototypes, triggers, metrics, events)
- У шаблонов появились уникальные ID, теперь не будем с одинаковыми именами путаться.
- Улучшено масштабирование.
- Появились какие-то Global scripts. Из описания не понял, для чего они.
- Появились локальные value maps. Раньше все глобально хранилось в одном месте.
- Добавились интеграции с Brevis, Express, iTop, RocketChat, Signal, VictorOps.
- Добавились шаблоны для APC UPS hardware, Hikvision cameras, etcd, Hadoop, Zookeeper, Kafka, AMQ, HashiCorp Vault, MS Sharepoint, MS Exchange, smartclt, Gitlab, Jenkins, Apache Ignite и других.
Ну и много других более мелких изменений. Я пробежался глазами по release_notes и перевел то, что показалось наиболее интересным. В общем, Zabbix не стоит на месте, развивается. Свою нишу в мониторинге удерживает твердо. Если кто-то не читал мою статью про сравнение Zabbix vs Prometheus, можете ознакомиться. Описал своими словами отличия.
Рекомендую мою статью по установке и настройке Zabbix 5. Там я разбираю различные варианты установки, выполняю первоначальную настройку и делюсь своим опытом эксплуатации данной системы мониторинга.
Как я уже сказал в самом начале, в этой версии появился новый синтаксис запросов в триггерах и некоторых других местах, так что обновление знаковое. Нужно будет ставить и разбираться. Весь старый синтаксис будет автоматически преобразован в новый, вручную ничего делать не придется.
Также отдельно обращаю внимание, что с большой долей вероятности сломается интеграция с Grafana, если в метриках использовали Applications, так как их в 5.4 отменили и заменили полностью триггерами. Будете получать ошибку: Method not found
Incorrect API «application».
Как спланировать нагрузку на Zabbix
Под небольшой структурой, упомянутой в начале, я подразумеваю 50-100 узлов (не сетевое оборудование с десятками портов) сети на мониторинге и примерно 2000-4000 активных элементов данных, которые записывают 20-40 новых значений в секунду. Под такую сеть вам будет достаточно небольшой виртуальной машины с 2 ядрами и 4 гб памяти. База данных на преимущественно стандартных шаблонах будет расти примерно на 2-4 Гб в год. Дальше еще меньше, так как будет автоматически очищаться.
Для мониторинга такой сети можно вообще не выполнять никаких дополнительных настроек. Мониторинг будет вполне нормально работать. Если же нагрузка начнет расти, то первое, с чем вы столкнетесь — это с размером и производительностью базы данных. База zabbix будет расти пропорционально подключению к ней хостов. И с этим придется что-то делать.
Для решения вопроса производительности нужно будет двигаться в двух направлениях:
- Очистка базы от ненужных данных.
- Увеличение производительности сервера mysql.
Каждый из указанных вопросов многогранен. Далее мы частично их рассмотрим и выполним наиболее простые, очевидные и результативные изменения.
Be in control of it
Now, if you are not making constant changes to the Zabbix configuration, reloading this cache every minute is not really necessary, and can be a bit resource intensive on large installations. In those cases it would be useful to increase this interval. But then any changes to the configuration would be noticed much later, which is not that nice either. How could this be solved?
Potential solution – some way to initiate reloading of configuration cache without restarting server daemon. Which is what got implemented for Zabbix 1.8.6.
Previously, no solution existed for modifying any Zabbix daemon characteristics while they are running, so there was a new generic decision to make – how to do that, because there might be further, similar functionality in the future. Eventually, this was implemented as a generic “runtime control” flag that gets an option passed to it. To quote “man zabbix_server”:
-R, --runtime-control <option> Perform administrative functions according to option.
So it would accept additional option. Currently only one is supported – config_cache_reload. When using this option, server process looks at the configuration file and tries to find the PID file, as defined there. If found, signal is sent to the process, specified in the PID file.
# zabbix_server -R config_cache_reload command sent successfully
Upon receiving this signal, server reads configuration from the database and rebuilds the cache. It logs receiving of the signal in the logfile as well:
forced reloading of the configuration cache
If configuration is being read already at that time (either previously initiated by real time control or just a scheduled run), on the commandline success is still reported and entry is added to the logfile, but signal itself is ignored.
Configuration cache and proxies
Now, that was mostly about Zabbix server. The wonderful remote data collector, Zabbix proxy also keeps the configuration cache – what about it? Of course, it was not forgotten.
There are two types of Zabbix proxies – passive one is contacted by the server, active one connects to the server.
Active proxy loads all its configuration data from the server upon startup and then repeats this process every hour by default. This period can be customised by configuration parameter ConfigFrequency. Configuration data is then stored in the local database on the proxy.
Thus, if one would make any configuration changes on the server, it might take up to one hour for these changes to propagate to the proxy (and then potentially a bit more time to reach active Zabbix agents).
It is desirable to have some way to signal proxy that it should re-read this configuration data, especially when doing the initial configuration or testing – but re-reading it from the local database, like server does it, would be no good – it’s synchronisation from the server that matters. The great news is that active Zabbix proxy, upon receiving configuration cache reload request, is smart engouh to actually ask for this configuration from the server first.
Sending the configuration cache reload signal to an active proxy would result in log entries like these:
forced reloading of the configuration cache Received configuration data from server. Datalen 6629
Passive Zabbix proxy is different – there the server connects to the proxy and sends the configuration data. When configuration cache reload signal is sent to a passive proxy, success is reported, logged – but ignored. It is not possible yet to signal server to re-send configuration information to passive proxies.
Happy reloading.
Очистка и уменьшение mysql базы zabbix
Начнем с очистки базы данных zabbix от ненужных данных. Рассмотрим по пунктам в той последовательности, в которой это нужно делать.
- Первым делом надо внимательно просмотреть все используемые шаблоны и отключить там все, что вам не нужно. Например, если вам не нужен мониторинг сетевых соединений windows, обязательно отключите автообнаружение сетевых интерфейсов. Оно само по себе находит десятки виртуальных соединений, которые возвращают нули при опросе и не представляют никакой ценности. Тем не менее, все эти данные собираются и хранятся, создавая лишнюю нагрузку. Если же вам нужен мониторинг сети в windows, зайдите в каждый хост и отключите руками лишние адаптеры, которые будут найдены. Этим вы существенно уменьшите нагрузку. По моему опыту, в стандартных шаблонах windows мониторинг всех сетевых интерфейсов дает примерно 2/3 всей нагрузки этих шаблонов.
- Отредактируйте в используемых стандартных шаблонах время опроса и хранения данных. Возможно вам не нужна та частота опроса и время хранения, которые заданы. Там достаточно большие интервалы хранения. Чаще всего их можно уменьшить. В целом, не забывайте в своих шаблонах ставить адекватные реальной необходимости параметры. Не нужно хранить годами информацию, которая теряет актуальность уже через неделю.
- После отключения лишних элементов в шаблонах, нужно очистить базу данных от значений неактивных итемов. По-умолчанию, они там остаются. Можно их очистить через web интерфейс, но это плохая идея, так как неудобно и очень долго. Чаще всего попытки очистить 50-100 элементов за раз будут сопровождаться ошибками таймаута или зависанием web интерфейса. Далее расскажу, как это сделать эффективнее.
Для очистки базы данных zabbix от значений неактивных итемов, можно воспользоваться следующими запросами. Запускать их можно как в консоли mysql сервера (максимально быстрый вариант), так и в phpmyadmin, кому как удобнее.
Данными запросами можно прикинуть, сколько данных будет очищено:
SELECT count(itemid) AS history FROM history WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); SELECT count(itemid) AS history_uint FROM history_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); SELECT count(itemid) AS history_str FROM history_str WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); SELECT count(itemid) AS history_text FROM history_text WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); SELECT count(itemid) AS history_log FROM history_log WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); SELECT count(itemid) AS trends FROM trends WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); SELECT count(itemid) AS trends_uint FROM trends_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
Если запросы нормально отрабатывают и возвращают счетчик данных, которые будут удалены, дальше можете их удалять из базы следующими sql запросами.
DELETE FROM history WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); DELETE FROM history_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); DELETE FROM history_str WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); DELETE FROM history_text WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); DELETE FROM history_log WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); DELETE FROM trends WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0'); DELETE FROM trends_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status='0');
Данными запросами вы очистите базу данных zabbix от значений неактивных элементов данных. Но реально размер базы данных у вас не уменьшится, потому что в дефолтной настройке базы данных используется формат innodb. Все данные хранятся в файле ibdata1, который автоматически не очищается после удаления данных из базы.
Администрировать такую базу неудобно. Нужно как минимум настроить хранение каждой таблицы в отдельном файле. Этим мы далее и займемся, а заодно обновим сервер базы данных до свежей версии mariadb и реально очистим базу, уменьшив ее размер.