Zabbix — это платформа, которая в основном состоит из трех компонентов:
1.Сервера Zabbix
2.Базы данных Zabbix
3.Графического интерфейса Zabbix
Также рассмотрим несколько других способов оптимизации производительности Zabbix
4.Оптимизация операционной системы
5. Мониторинг состояния Zabbix
1.Оптимизация Zabbix-сервера
1.Использование активных Zabbix-agent проверок вместо пассивных Zabbix-agent проверок
(уменьшает нагрузку на Zabbix-сервер и количество TCP-соединений)
При этом на Zabbix-агенте, возможно,есть смысл увеличить дефолтные значения параметров
Ниже приведены дефолтные значения
1 2 |
BufferSend=5 BufferSize=100 |
На Zabbix-сервере необходимо увеличить кол-во процессов Zabbix-trapper, которые принимают входящие соединения активных агентов, Zabbix-sender и активных прокси.
2.Использование наименее дорогого с точки зрения чтения/записи базы данных типа элемента данных
1 |
(numeric(unsigned),numeric (float), character, text, log) |
Каждый элемент данных записывается в отдельные таблицу history*, в которых содержится разный тип и длина полей для хранения одного значения.
3.Использовать наименее дорогого с точки зрения нагрузки процессора триггера
1 |
(функции last(), nodata(), min(), max(), avg()) |
Например, функции min/max/avg сильнее нагружают процессор в отличии от функций last,nodata
4.Время хранения данных в таблицах history,trends,events
Уменьшаем время хранения истории с дефолтных 90 дней на 7 дней (при создании элемента данных)
Время хранения в таблице trends оставляем дефолтное 365 дней (при создании триггера)(если нет необходимости в просмотре информации за год,то сокращаем время хранения тенденций)
Время хранения событий, генерируемых триггерами, можно уменьшить с дефолтных 365 дней, чтобы не увеличивать размер таблицы events при частых колебаниях/срабатывании триггеров
5.Оптимизация параметров Zabbix-кеша
Проверяем результаты мониторинга Zabbix самого себя с помощью внутренних проверок
И обращаем внимание на процент использования/свободного кеша
При необходимости увеличиваем значение параметров в конфигурационном файле Zabbix-сервера
1 2 3 4 5 |
CacheSize HistoryCacheSize TrendCacheSize HistoryTextCacheSize ValueCacheSize |
2.Оптимизация базы данных Zabbix
Например, используется MySQL в качестве СУБД и общий размер всех innodb-таблиц базы данных zabbix равен 1,8Gb)
1 2 |
innodb_buffer_pool_size = 2048M innodb_buffer_pool_instances = 2 |
(один пул на каждый 1GB памати в innodb_buffer_pool_size)
1 2 |
innodb_log_buffer_size = 16M innodb_flush_log_at_trx_commit = 1 |
(если допускается потеря данных при аварийном прекращении работы MySQL, то для оптимизации производительности рекомендуется установить значение в 0)
1 2 3 |
innodb_flush_method = O_DIRECT innodb_file_per_table = 1 innodb_log_file_size = 256M |
Произведение innodb_log_file_size(256M) и innodb_log_files_in_group (2)должно бать примерно равно ¼ значения innodb_buffer_pool_size(2048M))
1 |
innodb_io_capacity=200 |
(дефолтное значение)
На SSD-дисках необходимо увеличить до 2000
Отключение кеша
1 2 |
query_cache_type =0 query_cache_size=0 |
3.Оптимизация графического интерфейса Zabbix (GUI)
Оптимизация WEB-сервера Apache
Включение поддержки сжатия (установить и активировать модули mod_deflate и/или mod_gzip)
Добавить в виртуальный хост Zabbix в Apache
1 2 3 4 5 6 |
AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/ x-javascript AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xml+rss AddOutputFilterByType DEFLATE text/javascript # Don't compress images SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary |
Оптимизация WEB-сервера Nginx
1 |
# nano /etc/nginx/nginx.conf |
1 2 3 4 |
gzip on; gzip_comp_level 5; gzip_proxied any; gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; |
Включение поддержки PHP-кеширования средствами OpCache
1 |
# nano /etc/php5/mods-available/opcache.ini |
1 2 3 4 5 6 7 8 9 10 |
; configuration for php ZendOpcache module ; priority=05 zend_extension=opcache.so opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=1000 opcache.revalidate_freq=0 opcache.fast_shutdown=1 opcache.enable_cli=1 |
Более детально по настройке OpCache здесь
https://kamaok.org.ua/?p=889
4. Оптимизация операционной системы
1.Оптимизация файловой системы
Для нагруженных Zabbix-серверов
На уровне userspace(пользовательского пространства)
Проверить и увеличить лимит на кол-во открытых файлов для пользователя, под которым работает Zabbix-сервер(например ,для пользователя zabbix до 100000)
1 |
# su -l zabbix -s /bin/bash -c "ulimit -n" |
1 |
1024 |
1 |
# nano /etc/security/limits.d/zabbix.conf |
1 |
zabbix - nofile 100000 |
На уровне kernelspace(пространства ядра)
Проверить/увеличить лимит на кол-во открытых файлов
1 |
# sysctl -a | grep fs.file-max |
1 |
# nano /etc/sysctl.conf |
1 |
fs.file-max = 100000 |
1 |
# sysctl -p |
2. Изменение политики использования SWAP
Переменная ядра vm.swappiness
Установка высоких значений будет приводить к более частому использованию SWAP-раздела/файла, в отличии от низких значений
По умолчанию используется 60
Операционная система выгружает данные при заполнении ОЗУ на 60%
1 |
# sysctl vm.swappiness |
1 |
vm.swappiness = 60 |
Необходимо изменить до значения 5-10.
Так мы вынуждаем операционную систему использовать больше физической памяти прежде чем задействовать виртуальную память (swap-раздел/файл )
1 |
# nano /etc/sysctl.conf |
1 |
vm.swappiness = 5 |
1 |
# sysctl -p |
Два других параметра ядра должны быть оценены и, при необходимости, изменены для уменьшения тенденции свопинга.
Эти значения напрямую влияют на ввод-вывод
Эти параметры следующие:
1 |
vm.dirty_ratio |
максимальный объем системной памяти, которую можно заполнить dirty pages;
1 |
vm.dirty_background_ratio |
процент системной памяти, который можно заполнить dirty pages до того, как фоновые процессы pdflush/flush/kdmflush запишут их на диск;
1 2 |
vm.dirty_ratio = 5 vm.dirty_background_ratio = 20 |
3.Оптимизация сетевых параметров
1 |
# sysctl -a | grep -E 'net.ipv4.tcp_max_syn_backlog|net.ipv4.tcp_rmem|net.ipv4.tcp_wmem|net.ipv4.tcp_fin_timeout|net.ipv4.tcp_keepalive_time|net.core.rmem_max|net.core.wmem_max' |
5. Мониторинг состояния Zabbix
Метрики/Элементы данных важные для диагностики Zabbix-сервера
Метрики/Элементы данных важные для диагностики производительности Zabbix-proxy
Метрики/Элементы данных важные для диагностики производительности Zabbix-базы данных
1.Мониторинг медленных запросов
2.Мониторинг DELETE,INSERT,UPDATE,SELECT-запросов (для этого отличо подходит встроенный в Zabbix шаблон Template App MySQL)
Дальнейшая оптимизация производительности Zabbix связана с разделением всех/некоторых его компонентов Zabbix-сервера/GUI/Zabbix-базы данных на отдельные сервера.
Например, на одном сервере размещать Zabbix-сервер и графический интерфейс(GUI), а базу данных вынести на отдельный сервер.
Также для разгрузки Zabbix-сервера и мониторинга териториально распределенных сетей есть смыл устанавливать и использовать Zabbix-proxy
Источник:
Книга Zabbix Performance Tuning. Автор Luciano Alves, издательство Packt Publishing 2015 год.