zabbix в сервисной компании ОНЛАНТА - zabbix meetup moscow
TRANSCRIPT
ZABBIX В СЕРВИСНОЙ КОМПАНИИ
Нестеров Вадим
…Так кто ж ты, MonOps?
— Я - часть той силы, что вечно хочет зла и вечно совершает благо.
• Все само себя не замониторит
• Кнопка «сделай мне зашибись» не случится
• Monitoring Operations (MonOps) - это РАЗРАБОТКА решения мониторинга под конкретный проект
• Мониторинг - это дорого!
• Постоянный процесс разработки
СПАСИБО, КЭП!
• услуги IT-аутсорсинга
• эксплуатация государственных информационных систем федерального значения
• облачные услуги OnCloud.ru
• в компании нет разработчиков, только системные администраторы
КОМПАНИЯ ОНЛАНТА
ZABBIX В ОНЛАНТА
• гос проект с посещаемостью 350 000 в сутки
• OnCloud - облачный хостинг, 600 ВМ enterprise level
ZABBIX В ОНЛАНТА
• гос проект
Мониторинг — непрерывный процесс наблюдения и регистрации параметров объекта, в сравнении с заданными критериями.
сбор метриксоответствие граничным условиям
информирование (alerting)
1 2 3
МОНИТОРИНГ
визуализация данных: графики, комплексные экраны
ЭТО АНАЛИТИКА
НЕ МОНИТОРИНГ
ИДЕАЛЬНЫЙ МОНИТОРИНГ
• 1 метрика - 1 адекватный триггер• если для метрики нет триггера - значит она не нужна в системе мониторинга
SysOps
DevOps NOC
Бизнес SLA
ДС
DBA
Аналитика
MonOps
ЗАКАЗЧИКИ МОНИТОРИНГА
• Эксперты определяют граничные условия, интервал, и необходимость в оповещении
• Zabbix — это всегда +сотрудник ДС, никаких СМС, приятно услышать человека который знает, что точно случилось в 4 утра :)
• Делайте удобно для ДС: четкая инструкция в описание триггера, что делать. Если можно починить пусть чинят (если это обходное решение), если нет то пусть звонят эксперту
• Ссылку на базу знаний
• Меньше графиков, больше толковых триггеров. Визуальный мониторинг - быстрый путь к НШС, считайте, что у вас нет мониторинга
• Используйте LLD везде - это унификация и если вы играете в квест с разработчиками
• 1 сервер
• 2 х 12 -cores Intel Xeon CPU X5675 @ 3.07GHz
• 16 GB RAM
• СХД
• 1000 - 1200 NVPS
• MariaDB 10 + TokuDB + nginx + php-fpm
• tokudb_row_format = tokudb_lzma (жмет хорошо, но долго читает)
• NO housekeeper + partitioning
• ВМ Zabbix Proxy + ODBC Oracle
АРХИТЕКТУРА REV.1
• oVirt (KVM) кластер из 3 нод (ручной HA - БД не переедет автоматом)
• 1 сервер: 2 x 24 core Intel(R) Xeon(R) CPU E5-2697 v2 @ 2.70GHz, 386 GB RAM
• 2 сервера: 2 х 12 core Intel Xeon CPU X5675 @ 3.07GHz, 16 GB RAM
• VMs: ZDB (64GB), ZABBIX(8 GB), ZMONITOR(8GB)
• СХД
• 2200 NVPS
• history* - 31 день, trends* - 2 года
• размер базы: 170 Гб
• MariaDB 10 + TokuDB + nginx + php-fpm
• tokudb_row_format = tokudb_zlib
• ВМ Zabbix Proxy + ODBC Oracle
АРХИТЕКТУРА REV.2
• MariaDB 10 + TokuDB 7.5
• write optimized
• no locks
• row compression: zlib, lzma (6x < InnoDB)
• no slave lag
• hot backup > 7.5.5 (MariaDB 10.0.20)
• clustering indexes
ZABBIX BACKEND
my.cnf:
datadir=/data/mysql tokudb_data_dir=/data/tokudb #удобно tmpdir=/ramtmp #для select distinct plugin-load = ha_tokudb #tokudb_cache_size = # default: 50% RAM#tokudb_directio = OFF
query_cache_type = 1 # + 5min event: FLUSH QUERY CACHEquery_cache_size = 32M # + 30min event: RESET QUERY CACHEquery_cache_limit=32M #
#обязательно(!) иначе будут очень долгие select’ы optimizer_switch=index_condition_pushdown=off
ZABBIX BACKEND
net.ipv4.ip_local_port_range = 10000 65535net.ipv4.tcp_fin_timeout = 5net.ipv4.tcp_tw_reuse=1net.netfilter.nf_conntrack_max=1048576kernel.msgmni = 1024kernel.sem = 250 256000 32 1024
sysctl.conf
CacheSize= 512MHistoryCacheSize=512MTrendCacheSize=512MHistoryTextCacheSize=512MValueCacheSize=512M
zabbix_server.conf
ZABBIX SERVER
php-fpm: pm = static pm.max_children = 450
nginx + php-fpm + opcache
// permission check if ($userType != USER_TYPE_SUPER_ADMIN && !$options['nopermissions']) { $permission = $options['editable'] ? PERM_READ_WRITE : PERM_READ;
$userGroups = getUserGroupsByUserId($userid);
// check permissions by graph items
/* PATCH: TOO LONG GRAPHS QUERIES $sqlParts['where'][] = 'NOT EXISTS ('. 'SELECT NULL'. ' FROM graphs_items gi,items i,hosts_groups hgg'. ' LEFT JOIN rights r'. ' ON r.id=hgg.groupid'. ' AND '.dbConditionInt('r.groupid', $userGroups). ' WHERE g.graphid=gi.graphid'. ' AND gi.itemid=i.itemid'. ' AND i.hostid=hgg.hostid'. ' GROUP BY i.hostid'. ' HAVING MAX(permission)<'.zbx_dbstr($permission). ' OR MIN(permission) IS NULL'. ' OR MIN(permission)='.PERM_DENY. ')';
/include/classes/api/services/CGraph.php
php: memory_limit = 512M opcache.enable =1
ZABBIX FRONTEND
• Все в CSV
• схема с процедурами партиционирования: $MYSQLDUMP --no-data --events --routines
• все таблицы кроме исторических:$MYSQLDUMP --opt --compact --no-create-info --tab=${DB_TABLE_DIR} $db $tb
• history и trends по партициям: SELECT * FROM $tb PARTITION (${PART}) INTO OUTFILE '$FILE'
DB BACKUP
1. backup только конфигурации, без истории и трендов
2. создаем базу zabbix_lite из бэкапа на шаге1
3. перенастриваем zabbix_server на zabbix_lite
4. поднимаем zabbix_server новой версии на VM, настраиваем на обновляемую базу
5. проходим по логам процедуру обновления БД, в основном это ALTER TABLE … ENGINE=«TokuDB» +смотрим, что он там делаетsrc/libs/zbxdbupgrade/dbupgrade.c
6. обновляем основной zabbix_server
7. стартуем на обнолвенной базе
ПРОЦЕСС ОБНОВЛЕНИЯ ZABBIX SERVER
1. пользовательские сценарии по сайту + личный кабинет через wget_gost
2. AIX, Linux, Windows
3. много WebSphere + Zorka.io (heap, GC)
4. Oracle: tablespaces, jobs, replication, бизнес метрики приложения (все на LLD)
5. работу сервисов: nginx, apache, mongodb, tomcat, …
6. cpu, ram, swap, iostat
7. сертификаты
8. не любим crontab и UserParameter — любим system.run[]
ЧТО МОНИТОРИМ
CASE: ОТЧЕТ О ДОСТУПНОСТИ ВИРТУАЛИЗАЦИИ
…
LUN 1 LUN 2 LUN 3 LUN 1 LUN 2 LUN 3
Задача: сформировать отчет для каждой ВМ заказчика по интегральной метрике доступности гипервизора, СХД и сети.
boarder router
FAST: pyVmomi — Python SDK for the VMware vSphere API SLOW: VMware Perl SDK
НОВОЕ LLD ДЛЯ ОБНАРУЖЕНИЯ VM
ПРОВЕРКА ДОСТУПНОСТИ СЕТИ
/usr/lib/zabbix/externalscripts/vm.zm.boarder
/tmp/vminfo.file
ПРОВЕРКА ДОСТУПНОСТИ СХД
/usr/lib/zabbix/externalscripts/vm.zm.datastore
/tmp/vminfo.file
ПРОВЕРКА ДОСТУПНОСТИ ГИПЕРВИЗОРА
/usr/lib/zabbix/externalscripts/vm.zm.hyper
ТРИГГЕРЫ ДОСТУПНОСТИ
ОТЧЕТ
ОТЧЕТ
CASE: ODBC LLD Задача: создать шаблон автоматического обнаружения метрик приложений на WebSphere application server
• имеем в наличии 120 серверов приложений
• сервера пишут статистику в Oracle
• получаем значения метрик через db.odbc.select[]
• функционал опроса БД вынесен на Zabbix Proxy
extrenalscripts/odbc.***.publish.discovery
extrenalscripts/odbc.***.publish.discovery
СЛАБЫЕ МЕСТА ODBC
• Нет отдельного процесса под проверки — иногда коннект к базе может быть долгий, отнимается целый poller
• Одна проверка — одно новое соединение NO connection pooling — не кэшируют соединения, Ваши DBA будут счастливы
• Нельзя сделать такое:SELECT PERCENTILE_CONT(0.1) WITHIN GROUP (ORDER BY one_query_time_ms ) as p_10, PERCENTILE_CONT(0.2) WITHIN GROUP (ORDER BY one_query_time_ms ) as p_20, PERCENTILE_CONT(0.3) WITHIN GROUP (ORDER BY one_query_time_ms ) as p_30, PERCENTILE_CONT(0.4) WITHIN GROUP (ORDER BY one_query_time_ms ) as p_40, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY one_query_time_ms ) as p_50, PERCENTILE_CONT(0.6) WITHIN GROUP (ORDER BY one_query_time_ms ) as p_60, PERCENTILE_CONT(0.7) WITHIN GROUP (ORDER BY one_query_time_ms ) as p_70, PERCENTILE_CONT(0.8) WITHIN GROUP (ORDER BY one_query_time_ms ) as p_80, PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY one_query_time_ms ) as p_90
ССЫЛКИ
• Лучший доклад про мониторинг на RootConf 2015 Monitoring-driven эксплуатация. Николай Сивко hh.ru http://goo.gl/HDI86X
• Мониторинг базы данных Oracle через ODBC в Zabbix http://habrahabr.ru/post/226365/
• pyVmomi is the Python SDK for the VMware vSphere API https://github.com/vmware/pyvmomi
ВОПРОСЫ?