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

Мониторинг 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 шаблон для мониторинга Jobs у Microsoft SQL Server 2014

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

Теги

Перемещение базы данных postgresql в Ubuntu 18.04 LTS

При установке на Ubuntu zabbix-server база данных по умолчанию пишется в папку /var/lib/postgresql. Со временем база растёт и поднимается вопрос переноса её на другой раздел диска. Перенесём базу данных в /opt/postgresql.

Теги