Перейти к основному содержанию

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

Zabbix

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

Приступим. У нас имеется:

  • Сервер с БД 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 запрос

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

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

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

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

CREATE USER zabbix IDENTIFIED BY "my_password";
GRANT CREATE SESSION to zabbix;
GRANT SELECT ON dba_free_space TO zabbix;

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

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

Defaults:zabbix !requiretty
Defaults:%zabbix !requiretty
Cmnd_Alias ZABBIX_CMD = /etc/zabbix/scripts/
zabbix  ALL=(oracle) NOPASSWD: ZABBIX_CMD

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

Defaults    requiretty
#includedir /etc/sudoers.d
oracle    ALL=(ALL) NOPASSWD: ALL

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

#SELINUX=enforcing
SELINUX=disabled

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

setenforce 0

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

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

#!/bin/bash

. /home/oracle/.bash_profile

justconnect(){
sqlplus -s -L  zabbix/"my_password"@my_database  << SQL
    set echo off;
    set tab off;
    set pagesize 0;
    set feedback off;
    set trimout on;
    set heading off;
    SELECT trunc(sum(bytes/1024/1024/1024),0) 
    FROM dba_free_space
    WHERE tablespace_name='MY_TABLESPACE';
SQL
}
RESULT=$( justconnect  );

#убираем пробелы
RESULT=`(echo ${RESULT} | fmt -su)`

#проверяем на число и точки
if [[ "${RESULT}"  =~ ^[0-9\.]+$ ]]; then
:
else
    RESULT="-1"
fi

echo $RESULT;
exit 0;

Весь смысл скрипта состоит в том, чтобы от имени 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:

oracle zabbix

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

oracle zabbix

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

oracle zabbix

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

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

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

oracle zabbix

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

oracle zabbix

oracle zabbix

На этом всё.

Теги

 

Похожие материалы

Zabbix шаблон для мониторинга Microsoft SQL Server 2014

Делюсь полезным шаблоном для мониторинга Microsoft SQL Server 2014. Ось - Windows Server 2012 R2. В шаблоне 70 элементов данных и 23 триггера. Плюс 11 прототипов элементов данных и 3 прототипа триггеров.

Теги

Zabbix шаблон для мониторинга Jobs у Microsoft SQL Server 2014

Заморочился и написал. Делюсь полезным шаблоном для мониторинга джобов Microsoft SQL Server 2014. Ось - Windows Server 2012 R2. В шаблоне 16 прототипов элементов данных и 8 прототипов триггеров.

Теги