Мониторинг SQL запросов в Oracle Database через zabbix

Thank you for reading this post, don't forget to subscribe!

Пона­до­би­лось мне как-то мони­то­рить в заб­бик­се сво­бод­ное место на сер­ве­ре Oracle. Всё бы ниче­го, одна­ко зада­ча све­лась к более тон­кой. Нуж­но мони­то­рить сво­бод­ное место внут­ри опре­де­лён­но­го tablespace. Дан­ную зада­чу мож­но решить с помо­щью SQL запро­са oracle_tablespace_free_space.

SELECT trunc(sum(bytes/1024/1024/1024),0) FROM dba_free_space WHERE tablespace_name=MY_TABLESPACE';

У нас имеется:

  • Сер­вер с БД Oracle и ОС Oracle Linux 7.4.
  • На сер­ве­ре сто­ит заб­бикс агент.
  • Zabbix сер­вер 3.4.4.
  • На заб­бик­се уже мони­то­рит­ся наш сервер.

Разо­бьём зада­чу на части:

  1. Нуж­но создать SQL запрос для опре­де­ле­ния сво­бод­но­го места внут­ри tablespace с назва­ни­ем MY_TABLESPACE.
  2. Раз­ре­шить поль­зо­ва­те­лю zabbix, от кото­ро­го рабо­та­ет zabbix-agent на сер­ве­ре выпол­нять этот SQL запрос.
  3. Напи­сать bash скрипт для полу­че­ния чис­ла - сво­бод­ное место (в гигабайтах).
  4. Пере­дать резуль­тат скрип­та в zabbix-agent через поль­зо­ва­тель­скую переменную.
  5. Пой­мать на заб­бикс сер­ве­ре это чис­ло, создать item и trigger для уве­дом­ле­ния адми­ни­стра­то­ра о том, что места в tablespase оста­лось мало.

Пишем SQL запрос

На месте это­го запро­са может быть любой дру­гой ваш запрос.

Разрешаем пользователю zabbix выполнять этот SQL запрос

В базе дан­ных созда­ём юзе­ра zabbix:

Где "my_password" - пароль поль­зо­ва­те­ля. Воз­мож­но, ещё какие-то пра­ва пона­до­бят­ся, не помню.

В пап­ке "/etc/sudoers.d" созда­ем файл "zabbix" с содержимым:

В фай­ле "/etc/sudoers" убеж­да­ем­ся в нали­чие настроек:

Отклю­ча­ем selinux. В фай­ле "/etc/selinux/config" правим:

Что­бы не пере­за­гру­жать сер­вер, отклю­ча­ем selinux командой:

setenforce 0

Пишем bash скрипт

Созда­ём дирек­то­рию "/etc/zabbix/scripts". На вся­кий слу­чай вла­дель­цем пап­ки и содер­жи­мо­го я назна­чил поль­зо­ва­те­ля oracle. Внут­ри пап­ки созда­ём скрипт "oracle_check_tablespace.sh", не забы­ва­ем дать пра­ва на выпол­не­ние. Содер­жи­мое скрипта:

Весь смысл скрип­та состо­ит в том, что­бы от име­ни zabbix выпол­нить SQL, почи­стить его от лиш­них дан­ных и выве­сти как чис­ло. В слу­чае ошиб­ки выво­дим "-1". Вме­сто "my_password", "my_database", "MY_TABLESPACE" уста­но­ви­те свои значения.

Пользовательская переменная

В фай­ле "/etc/zabbix/zabbix_agentd.conf" смот­рим, где долж­ны лежать поль­зо­ва­тель­ские настройки:

Include=/etc/zabbix/zabbix_agentd.d/

В этой пап­ке созда­ем файл "oracle.conf" с содержимым:

UserParameter=oracle.check_tablespace,sudo -u oracle '/etc/zabbix/scripts/oracle_check_tablespace.sh'

Так мы созда­ём пара­метр oracle.check_tablespace и дан­ные для него берём коман­дой sudo -u oracle '/etc/zabbix/scripts/oracle_check_tablespace.sh'.

Zabbix-server

Даль­ше идём в web-интер­фейс заб­бикс сер­ве­ра, нахо­дим там наш хост (сер­вер) и добав­ля­ем новый item:

В поле Key впи­сы­ва­ем нашу пере­мен­ную. В поле Type information вре­мен­но ста­вим text. В скрип­те oracle_check_tablespace .sh вре­мен­но ком­мен­ти­ру­ем про­вер­ку на чис­ло и зани­ма­ем­ся отлад­кой. Если у заб­бикс-аген­та не хва­та­ет прав на sudo, то видим ошибку:

Ошиб­ка может быть и дру­гая. После исправ­ле­ния всех оши­бок видим искомое:

Ура! В tablespace 175 гига­байт сво­бод­но­го места. В скрип­те oracle_check_tablespace .sh воз­вра­ща­ем про­вер­ку на чис­ло. Пра­вим item:

  • Update interval ста­вим не такой частый, я став­лю себе 1h.
  • Type of information теперь Numeric (unsigned)
  • Units GB

Стал появ­лять­ся график:

Вот теперь мож­но напи­сать триг­ге­ры, кото­рые будут сра­ба­ты­вать при кри­ти­че­ском умень­ше­нии сво­бод­но­го места. Напри­мер, warning при сво­бод­ном месте менее 40 Гб и average при зна­че­ни­ях мень­ше 20.

 

На этом всё.