Вероятно, многие пробовали использовать решение Zabbix для мониторинга баз данных. Из моего доклада вы узнаете о нашем опыте его применения, и к чему мы в итоге пришли.
1. Штатный Zabbix-мониторинг баз данных: особенности реализации/настройки в промышленных масштабах
2. Преимущества/недостатки решения мониторинга баз данных от Zabbix SIA
3. Преимущества/недостатки существующих расширений Zabbix для мониторинга баз данных
4. Подробнее о расширении DBforBix v2.3 beta: конфигурирование, возможности
5. Доработка DBforBix: сохраняем преимущества и устраняем недостатки штатного мониторинга баз данных Zabbix
6. Варианты развития идеи
2. Так поддерживался мониторинг раньше
…
ПодразделенияКомпании
Подразделение
поддержки
мониторинга
Очередьзапросов
на мониторинг
Андрей Денисов
anjey.denisov@gmail.com
2
3. Нас не устроил традиционный подход…
…
ПодразделенияКомпании
Подразделение
поддержки
мониторинга
Очередь запросов
на мониторинг
Андрей Денисов
anjey.denisov@gmail.com
3
4. … и мы создали у себя Zabbix Community!
Core
Team
Super Admins
Admins
Users
П1
П2
ПN
…
… …
… …
Community
П1 … ПN – подразделения
эксплуатации ИТ
Компании
R1
R2
R3
R1 … R4 – подмножества
представителей
подразделений
эксплуатации ИТ
Компании
Users – внешние
потребителиданных
системы мониторинга
Андрей Денисов
anjey.denisov@gmail.com
4
5. Мы поддерживаем крупный экземпляр
10k
7k
NVPS Hosts
900k
300k
Items Triggers
Андрей Денисов
anjey.denisov@gmail.com
5
6. Мы пробовали штатный Zabbix-мониторинг БД
odbc.ini на Zabbix Proxy
Андрей Денисов
anjey.denisov@gmail.com
6
7. Пришли к такой схеме
Zabbix
Server
База данных
X
База данных
Y
…
Zabbix ProxyA
Pollers
ODBC
drivers
Sender
DB
Zabbix ProxyB
…
База данных M
База данных N
…
Conf
syncer
Андрей Денисов
anjey.denisov@gmail.com
7
8. Обнаружили особенности Zabbix-мониторинга БД
Низкоуровневое обнаружение
SQL-запросы – в веб интерфейсе Zabbix
Отображение ошибок в веб интерфейсе Zabbix
− Один запрос = одна метрика
− Отсутствие пулов соединений
− Одна метрика = подключение + отключение
− Высокое взаимное влияние баз данных
− Слабый контроль над числом сессий/соединений к БД
− Ненастраиваемые таймауты для запросов
Андрей Денисов
anjey.denisov@gmail.com
8
9. Стали искать решение и родилась идея!
− Вклиниться в ODBC?
− Доработать код Zabbix Proxy?
Самим стать Zabbix Proxy!
Андрей Денисов
anjey.denisov@gmail.com
9
10. Нашли и допилили DBforBIX
Zabbix
Server База данных
X
База данных
Y
…
База данных
M
База данных
N
…
DBforBIX = Zabbix ProxyB
JDBC
drivers
JVM
Zabbix ProxyA
Pollers
ODBC
drivers
Sender
DB
Conf
syncer
Андрей Денисов
anjey.denisov@gmail.com
10
11. DBforBIX теперь умеет
Низкоуровневоеобнаружение
Многострочныезапросы
Контроль пула соединений итаймаутов
JDBC (широкий спектр баз данных)
Java – приложение(быстраяразработка)
+
Поддерживаетмногоколоночные запросы (целыетаблицы одним select’ом)
Активный Zabbix Proxy
SQL из веб интерфейсаZabbix
Ошибки - в веб интерфейс Zabbix
Обновляет конфигурацию«на лету»
Поддерживает пользовательскиемакросы
Андрей Денисов
anjey.denisov@gmail.com
11
12. Мы скромно делимся им с вами…
Андрей Денисов
anjey.denisov@gmail.com
12
https://github.com/vagabondan/DBforBIX
13. Так выглядит файл конфигурации DBforBIX
DBforBIX.UpdateConfigTimeout=120
Pool.LoginTimeOut=15
ZabbixServer.Zabbix1.Address=<zabbix_server_host>
ZabbixServer.Zabbix1.Port=10051
ZabbixServer.Zabbix1.ProxyName=ProxyB
ZabbixServer.Zabbix1.ConfigSuffix=DB4bix.config
ZabbixServer.Zabbix1.DBList=MYSQLDB1,ORADB1
DSN
Андрей Денисов
anjey.denisov@gmail.com
13
14. Так в DBforBIX задаются СУБД
DB.ORADB1.Type=oracle
DB.ORADB1.Instance=<instance_name>
DB.ORADB1.Url=jdbc:oracle:thin:@<oracle_DB_host>:<oracle_DB_port>:<instance_name>
DB.ORADB1.User=<oracle_user>
DB.ORADB1.Password=<oracle_password>
DB.ORADB1.MaxActive=10
DB.ORADB1.MaxWaitMillis=10000
DB.ORADB1.QueryTimeout=15
DB.ORADB1.MaxIdle=1
Андрей Денисов
anjey.denisov@gmail.com
14
15. Так настраивается web интерфейс
Item конфигурации:
oracle.discovery.DB4bix.config[…]
Item-приемник данных
Андрей Денисов
anjey.denisov@gmail.com
15
17. Так выглядит поле SQL конфигурации
<parms type="oracle" prefix="oracle.">
<server>
<discovery>…</discovery>
<query>…</query>
<multiquery>…</multiquery>
</server>
</parms>
Андрей Денисов
anjey.denisov@gmail.com
17
Обнаружение
Наборы пар имя - значение
Фильтры и таблицы
18. Обнаружение и простые запросы
Андрей Денисов
anjey.denisov@gmail.com
18
<discovery time="120" item="discovery.DB4bix.config[instanceid,{$DSN}]" names="INST_ID">
SELECT inst_id FROM gv$instance
</discovery>
<query time="60" item="procnum[%1]">
SELECT inst_id, COUNT(*) procnum
from gv$process group by inst_id
</query>
{“data”:[
{“{#INST_ID}”:”1”},
{“{#INST_ID}”:”2”}
]}
oracle.discovery.DB4bix.config[instanceid,{$DSN}]
…
{“oracle.procnum[1]”:”60”},
{“oracle.procnum[2]”:”61”},
…
19. Фильтры и загрузка целых таблиц
Андрей Денисов
anjey.denisov@gmail.com
19
<multiquery time="300"
items="tablespace.bytes[%1]|tablespace.maxbytes[%1]" type="column">SELECT tablespace_name,
SUM(NVL(bytes,0)) AS bytes, SUM(maxbytes) AS maxbytes FROM dba_data_files GROUP BY
tablespace_name
</multiquery>
…
{“oracle.tablespace.bytes[SYSTEM]”:”12345”}, {“oracle.tablespace.maxbytes[SYSTEM]”:”54321”},
{“oracle.tablespace.bytes[USERS]”:”6789”}, {“oracle.tablespace.maxbytes[USERS]”:”9876”},
<multiquery time="600" items="join_buffer_size|long_query_time" type="list">
SHOW VARIABLES
</multiquery> …
{“mysql. join_buffer_size”:”12345”}, {“mysql. long_query_time”:”54321”},
…
Фильтруемстроки,отбираем тольконужные
Загружаемцелую таблицузначений
20. Развитие идеи
• Повысить интуитивность и удобство конфигурации: уйти от XML
• Ввести новый тип агента в Zabbix: DBforBIX
• Расширить спектр поддерживаемых типов баз (Timesten,
noSQL,…)
• Расширить область применения DBforBIX: XforBIX
• Backend API Zabbix для внешних расширений с возможностью
управления из веб интерфейса Zabbix
• Давайте искать вместе?
Андрей Денисов
anjey.denisov@gmail.com
20