Настройка zabbix для мониторинга oracle
В строку HostMetadata через пробел можно добавить другие параметры например имя стенда по которым сервер определит подключившийся к нему агент (auto registration) и распределит в нужные группы и добавит template
Не забудем открыть доступ к порту zabbix agent от zabbix server
Запустим и добавим в автозагрузку
systemctl restart zabbix-agent
systemctl enable zabbix-agent
И смотрим лог агента
Нам для мониторинга box хватит использовать два/три параметра, пример для одной из заглушек
Создаем новый item для нужного сервера, configuration->hosts->our-server → items→ create
type: zabbix agent
За основу взяты статьи
Мы будем использовать из самых свежих и доступных сейчас, нам потребуется следующие файлы, которые мы загрузим в /tmp
Устаналиваем и удаляем за собой файлы
Определяем переменные того пользователя, под кем будем настраивать и проверять.
То необходимо внести некоторые правки
ЗАКОМЕНТИРОВАТЬ секции
exclude=postgresql*
После чего выполняем очистку кэша и ставим драйвер
Есть простая, но достаточно популярна задача, а именно пинг с удаленного хоста, другой удаленный хост. В интернетах в основном предлагают использовать доп устанавливаемую fping, мы же пойдем другим путем, напишем свой скрипт, который будет не только проверять отвечает/не отвечает удаленный хост, но логировать время. Скрипт написан для локальной сети, где отсутствует потеря пакетов, в случае потерь или отправки количества больше одного запроса на пинг, его придется модифицировать
На вход в качестве параметра будем принимать имя сервера или ip адрес который нам нужно пинговать, после чего отправляем один запрос (1) и ждем две секунды оставляем только значения ответа в ms, в случае отсутствия ответа — выставляем 9999. Форматирование — съехало, адаптируйте под себя
Сам скрипт мы будем использовать на следующем шаге
Solve OS dependencies
Install ‘libaio’ and ‘libnsl’ library:
Otherwise, we will receive errors:
Check if Oracle components have been previously deployed on the system. The commands below should provide an empty output:
Test connection with SQLPlus
We can simulate the connection to the Oracle database before moving on with the ODBC configuration. Make sure that the Oracle username and password used in the command are correct. For this task, we will first need to install the SQLPlus package.:
To simulate the connection, we can use a one-liner command. In the example command I’m using the username ‘system’ together with the password ‘oracle’ to reach out to the Oracle database server ‘10.1.10.15’ via port ‘1521’ and connect to the service name ‘xe’:
In the output we can see: we are using the 19.12 client to connect to 11.2 server:
Note: This gives us an extra hint regarding the Oracle instant client – newer versions of the client are backwards compatible with the older versions of the Oracle database server. Though this doesn’t apply to every version of Oracle client/server, please check the Oracle instant client documentation first.
Download Instant client and SQLPlus
The provided commands apply for the following operating systems: CentOS 8, Oracle Linux 8, or Rocky Linux.
Here we are downloading
Oracle instant client – required, to establish connectivity to an Oracle database
SQLPlus – A tool that we can use to test the connectivity to an Oracle database
Oracle ODBC package – contains the required ODBC drivers and configuration scripts to enable ODBC connectivity to an Oracle database
Upload the packages to the Zabbix server (or proxy, if you wish to monitor your Oracle DB on a proxy) and place it in:
Import data to PostgreSQL
cd /usr/share/doc/zabbix-server-pgsql-3.4.7/zcat create.sql.gz | sudo -u zabbix psql zabbixdb
В статье будет рассмотрена возможность мониторинга база данных по средствам встроенной в Zabbix поддержке ODBC, c использованием автообнаружения объектов.
Для начала рассмотрим доступные для Zabbix методы мониторинга БД, которые использовались до поддержки ODBC.
Так как статья про мониторинг Oracle, то и будем смотреть в этом разрезе.
1. Использования скрипта zabora
В принципе спкрипт всем хорош, но главное, что меня не устраивало: скрипт лежит на каждой машине с БД, и при добавление запроса приходилось идти на эту машину и редактировать конфиг.
Поддерживает параметры запросов, то есть можно передавать параметр в ключ и на основе его делать запрос к БД.
То есть один и то же запрос может быть использован для сбора метрик разных объектов.
Тоже хороший продукт, является демоном на java, создает несколько соединений и поддерживает автоматическое добавление новых запросов в конфиг без перезагрузки. Работает как Zabbix trapper, то есть сам с определенной периодичностью посылает данные в Zabbix сервер.
Недостатки:
— не поддерживает параметры, то есть на каждую метрику создается отдельный запрос.
Представьте у вас 10 tablespace'ов и вам нужно снимать с каждого 4 параметра — получается 40 запросов в файле. Интервал запроса получение метрики, так же выставляется в конфиге, что не очень удобно.
- запрос к БД — стандартный ключ Zabbix, из этого следует, что мы настраиваем такие параметры как частота опроса в самом интерфейсе
- редактирование запросов в интерфейсе Zabbix
- позволяет использовать макросы
- самое главное позволяет автоматизировать процесс добавления новых объектов на мониторинг
Сначала опишу, что имеется в хозяйстве:
1. 6 баз данных Oracle — 1 БД — 1 сервер + 1 резервный сервер под БД итого: получается 12 серверов.
2. Сервера для каждой БД объединены в кластер — итого 6 кластеров
3. На каждом сервера установлен Zabbix agent для AIX
4. На каждом сервере по скрипту zabora
- Zabbix сервер на CentOS 6.5 + TokuDB — 20 000 элементов — 380 nps (новых значений в секунду)
- Специально для мониторинга БД, был поднят Zabbix Proxy, так как запросы могут выполнятся достаточно долго, то не хотелось бы из-них подвешивать процессы сбора данных основного Zabbix'a — тоже CentOS 6.5 + TokuDB
В этой статье я не буду касаться настройки TokuDB, так как планирую еще одну статью почему мы перешли с InnoDB на TokuDB, и что нам это дало.
Установка Oracle Instant Client
Сначала необходимо установить Oracle Instant Client на машину с Zabbix Proxy:
- oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm — основные библиотеки
- oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm — драйвера для java, для нашей задачи не нужны, но в хозяйстве пригодиться :)
- oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm — клиент SQLplus
- oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm — библиотека для работы через ODBC
- можно еще до кучи: oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm :)
в той папке в которую скачали все эти файлы делаем:
Настройка SQLplus для доступа к БД Oracle.
Для того чтобы клиент работал, необходимо в параметры окружение выставить необходимые переменные, для начала выставим их в своем профиле, прописав в файл $HOME/.bash_profile :
Перелогиниваемся и смотрим есть ли наши переменные в
Обратим внимание на переменную TNS_ADMIN=$ORACLE_HOME/network/admin
Этот путь необходимо создать, туда мы положим файл tnsnames.ora который используется библиотеками клиента для подключения к БД.
Создадим подключение к БД с именем TESTDB например.
Необходимо подставить нужные значения в HOST и SERVICE_NAME.
HOST — можно прописывать IP адрес или DNS имя (проверьте только, что оно ресолвится в IP)
Проверим настройку клиента, только предварительно создайте учетную запись zabbix в Oracle.
Видим, что клиент выдал приглашение, значит соединение прошло успешно, и совсем чтобы быть уверенными сделаем простенький запрос:
Конфигурация ODBC.
Официальные пакеты Zabbix Server и Zabbix Proxy в СentoOS скомпилированы с поддержкой unixODBC, поэтому после их установки у вас должен быть установленный пакет unixODBC, проверяем:
Вывод должен содержать следующие пакеты: unixODBC и oracle-instantclient11.2-odbc .
И сразу делаем такую проверку:
C большой долей вероятностью, вы получите libodbcinst.so.1 => not found , поэтому нужно сделать сим-линк:
Дальше редактируем файл:
После этого у нас должно получится подключится к БД Oracle через клиент ODBC (всегда используйте параметр -v, если будет ошибка подключения, скажет детально в чем проблема):
Так же для очистки совести, что у нас все работает, делаем запрос:
Поздравляю, Вы настроили ODBC.
Теперь нам необходимо добиться, чтобы Zabbix Proxy так же мог делать запросы через ODBC.
Для этого необходимо, чтобы в окружение процесса zabbix_proxy были доступны переменные, указанные выше, для это добавим в файл:
После этого обязательно перезапускаем zabbix_proxy:
Теперь мы сразу перейдем к настройке правил автообнаружения в терминологии Zabbix — это low level discovery rule.
Что такое LLD?
В принципе это любой элемент в Zabbix который может вернуть данные в JSON формате.
Так встроенный мониторинг баз данных в Zabbix всегда возвращает только 1 колонку и 1 строку. Почему-то в команде Zabbix до сиз пор не напишут для БД генератор LLD.
Придется написать скрипт который будет выдавать нам список объектов в JSON формате.
Шаблон и скрипт можно взять на GitHub
Скрипт написан на php, поэтому любителям bash прошу отвернуться в сторону :)
Комментировать сам скрипт не буду, думаю по коду все понятно, скажу только, что его нужно положить в папку которая задана в конфиге zabbix_proxy.conf (или zabbix_server.conf):
Скрипту передаются два параметра:
1. DSN — который вы указали в файле /etc/odbc.ini в квадратных скобках, в случае примера это ORA_TESTDB
2. тип объектов, список которых нужно вернуть: tablespaces или jobs
В случае jobs, скрипт вернет так же и , то есть владельца job'a.
Наконец-то переходим к добавлению мониторинга БД Oracle в Zabbix.
Для начала пару слов о шаблоне:
1. общие ключи мониторинга Oracle взяты из скрипта zabora
2. чтобы шаблона заработал необходимо во вкладе Макросы самого хоста, добавить 3 пользовательских макроса:
— — DSN который прописан в квадратных скобках файла /etc/odbc.ini (в примере ORA_TESTDB)
— — пользователь с правами которого будет подключение к БД Oracle
— — пароль для подключения к БД Oracle
Итак список правил LLD:
Чтобы правила отработали в первый раз, выставите в самих правила интервал, предположим 300 секунд, и через 5 минут у вас в элементах данных должны создаться новые.
Рассмотри сами правила и начнем с Tablespaces.
В принципе здесь все понятно, хочу обратить внимание на поле «Фильтр».
С помощью этого поля можно производить фильтрацию списка который возвращает нам сам элемент, в нашем примере нам не нужно добавлять на мониторинг системные tablespaces. Фильтрация происходит на основе правила regexp. Как видно на картинки поле должно соответствовать правилу regexp Oracle System Excluded Tablespaces. Общие правила regexp описываются в Администрирование > Общие > Регулярные выражения и вызываются в фильтре через символ @.
Аналогично все и для job'ов:
Переходим к прототипам данных
Сам прототип
Картинка говорит сама за себя, но хочу обратить на один нюанс, а именно на поле «Единица измерения», по умолчанию в Zabbix используется 10-тичная система исчисления, что и следовало ожидать, поэтому все приставки Кило, Мега, Гига и т.д. это деление на 1000, что с точки зрения исчисления объема данных не совсем корректно, поэтому чтобы вы получали во вкладке «Последние данные» адекватные значения в Zabbix используется «специальные» единицы измерения: B и Bps — байт и байт в секунду (подробнее).
Но есть забавный момент (баг), в последних данных приставки K(ilo), M(ega), G(iga) переводятся в K, М, Г, а вот сама единица нет, поэтому в случае с гигабайтами у Ваc будет ГB.
Прототипы триггеров для tablespaces:
- при размере меньше 3ТБ ограничение в процентах
- от 3ТБ до 10ТБ в гигабайтах
- от 10ТБ в гигабайтах
Обратить внимание, что значения в условиях используется в байтах, а также обратить на порядок и используемых значений.
На первый взгляд может показаться лишним условие «Максимальный размер > 0»
Но это сделано для того чтобы приходило более информативное письмо для DBA.
В действиях вы указываете:
В действие мы не можем получить значения ключа который был создан автоматически, не то чтобы мы не можем его получить просто мы не знаем его название, для это там нужно вычленить из ключа название tablespace, но таких функций Zabbix нет.
При таких настройках действия, Вам будет приходить нечто подобное:
Прототипы данных для job'ов:
Прототипы триггеров для job'ов:
Была поставлена задача: реализовать мониторинг БД Oracle средствами Zabbix, а именно — отслеживать параметры табличных пространств на определенном инстансе. Раз задача поставлена, значит делаем. Как известно, Zabbix предоставляет возможность через предопределенный тип данных осуществлять запросы к базам данным и получать результат запроса. На официальном сайте разработчиков Zabbix есть очень хорошая документация по настройке ODBC-мониторинга.
oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm
oracle-instantclient11.2-odbc-11.2.0.3.0-1.x86_64.rpm
После того, как все эти пакеты были установлены, осталось только произвести настройки клиента и unixODBC. В результате все настройки были произведены и осталось только протестировать, что все работает.
Перелогиниваемся под пользователем zabbix и выполняем команду isql, согласно инструкции.
Все ок. Пробуем получить тот же результат из веб Zabbix. После настройки элемента данных «Мониторинг БД» ждем результата. Но не тут-то было. Элемент данных перешел в статус «Не поддерживается». Получаем ошибку: Cannot connect to ODBC DSN:[SQL_ERROR]:[01000][0][[unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1': file not found]|.
Странная ошибка, тем более, что указанный файл по указанному пути есть.
В голову пришла мысль: а что, если для подключения к БД использовать не unixODBC а SqlPlus, который был установлен вместе с пакетом oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm. Исходя из этой идеи, необходимо настроить клиент oracle для подключения.
Клиент Oracle был установлен в /usr/lib/oracle/11.2/client64. Первое, что нужно сделать – это создать файл tnsnames.ora и заполнить его данными для подключения к БД oracle. Для этого нужно создать папку для хранения этого файла:
В созданной директории нужно создать файл с именем tnsnames.ora и заполнить его. Обязательно нужно проверить, чтобы у всех созданных директорий и самого файла были права доступа на чтение для пользователя zabbix.
Далее, нужно создать скрипт для подключения к БД и выполнения запросов. Ниже пример скрипта для выполнения простых селектов:
Скрипт необходимо поместить в папку /etc/zabbix/externalscripts – папка для хранения скриптов внешних проверок (см настройки zabbix_server.conf строка ExternalScripts=/etc/zabbix/externalscripts). Также скрипту необходимо выдать права доступа на чтение и выполнение пользователю zabbix. Скрипт готов. Настраиваем элемент данных «Внешняя проверка» в веб-интерфейсе Zabbix как на скрине ниже.
Созданный ранее скрипт принимает сл. параметры:
- Идентификатор файла с запросом (строка)
- Простой запрос (строка)
- логин для подключения к БД (строка)
- Пароль, для подключения к БД (строка)
- TNS БД, к которой хотим подключиться (строка)
где «TestSelect» – строковый идентификатор, для формирования sql-файла;
«select count(*) from testTable;» – сам запрос.
«username» и «password» – данные подключения к базе
«tnsname» – название базы (см tnsnames.ora)
! ВАЖНО! Запрос должен возвращать значение только одной колонки результирующей таблицы, если ожидается получить численное или текстовое значение результата выборки.
После того, как элемент создан, если все настроено верно, веб-интерфейс Zabbix отобразит результат выполнения запроса.
Данный метод, конечно же, имеет ряд недостатков, но, в качестве временного решения он работает. Таким недостатком, например, является то, что большой и сложный запрос вписывать в качестве параметра очень неудобно.
Для получения параметров занятого табличного пространства использован скрипт ниже:
Так как требуется мониторить всего несколько табличных пространств, под каждое был создан свой sql-файл. Для решения поставленной задачи, скрипт получения данных из бд был изменен. Ниже сам скрипт:
Ключ для элемента данных, соответственно, выглядит так:
где 'TAB_SPACE1' — наименование табличного пространства.
Как видно из скрина выше, веб-интерфейс Zabbix получает результаты выполнения запроса и отображает процентное значение использованного табличного пространства.
Остается только настроить триггеры и действия оповещений.
Если кому-то поможет данный способ, буду рад. Если у кого-то будут идеи по модернизации скриптов и самого подхода, минуя unixODBC, пишите.
By Aigars Kadiķis September 21, 2021
Did you know that Zabbix has an out-of-the-box template for collecting Oracle database metrics? With this template, we can collect data like database, tablespace, ASM, and many other metrics agentlessly, by using ODBC. This blog post will guide you on how to set up ODBC monitoring for Oracle 11.2, 12.1, 18.5, or 19.2 database servers. This post can serve as the perfect set of guidelines for deploying Oracle database monitoring in your environment.
Install Oracle Instant Client
Make sure that the package ‘oracle-instantclient19.12-basic-19.12.0.0.0-1.x86_64’ is installed:
ODBC connector
When it comes to configuring ODBC, let’s first install the ODBC driver manager
Now we can see that we have two new files – ‘/etc/odbc.ini’ (possibly empty) and ‘/etc/odbcinst.ini’.
The file ‘/etc/odbcinst.ini’ describes driver relation. Currently, when we ‘grep’ the keyword ‘oracle’ there is no oracle relation installed, the output is empty when we run:
Our next step is to Install Oracle ODBC driver package:
The ‘oracle-instantclient*-odbc’ package contains a script that will update the ‘/etc/odbcinst.ini’ configuration automatically:
Now when we print the file on the screen:
We will see that there is the Oracle 19 ODBC driver section added at the end of the file::
It’s important to check if there are no errors produced in the output when executing the ‘ldd’ command. This ensures that the dependencies are satisfied and accessible and there are no conflicts with the library versioning:
It will print something similar like:
When we executed the ‘odbc_update_ini.sh’ script, a new DSN (data source name) file was made in ‘/root/.odbc.ini’. This is a sample configuration ODBC configuration file which describes what settings this version of ODBC driver supports.
Let’s move this configuration file from the user directories to a location accessible system-wide:
And remove the file from the user directory completely:
This way, every user in the system will use only this one ODBC configuration file.
We can now alter the existing configuration – /etc/odbc.ini. I’m highlighting things that have been changed from the defaults:
DSN – Data source name. Should match the section name in brackets, e.g.:[Oracle11g]
ServerName – Oracle server address
UserID – Oracle user name
Password – Oracle user password
To test the connection from the command line, let’s use the isql command-line tool which should simulate the ODBC connection akin to what the Zabbix is doing when gathering metrics:
The isql command in this example picks up the ODBC settings (Username, Password, Server address) from the odbc.ini file. All we have to do is reference the particular DSN – Oracle11g
On the other hand, if we do not prefer to keep the password on the filesystem (/etc/odbc.ini), we can erase the lines ‘UserID’ and ‘Password’. Then we can test the ODBC connection with:
In case of a successful connection it should print:
And that’s it for the ODBC configuration! Now we should be able to apply the Oracle by ODBC template in Zabbix
Don’t forget that we also need to provide the necessary Oracle credentials to start collecting Oracle database metrics:
The lessons learned in this blog post can be easily applied to ODBC monitoring and troubleshooting in general, not just Oracle. If you’re having any issues or wish to share your experience with ODBC or Oracle database monitoring – feel free to leave us a comment!
Определяем переменные того пользователя, под кем будем настраивать и проверять.
Перелогиниваемся и смотрим есть ли наши переменные в
Создадим директорию, где будет находится файл для подключения
создаем сам файл подключения
Проверяем подключение, предполагается, что у вас в oracle уже есть УЗ с именем zabbix и паролем, который вы определили
если вы увидели, что то типа такого — то все отлично
выполним простеший запрос
Убедимся, что у нас стоят необходимые компоненты
Нас интересуют, чтобы были установлены
Теперь поправим файл /etc/odbcinst.ini добавив туда путь до ораклового драйвера
вставляем в самый конец
проверим, что все зависимости корректны выполнив ldd и нет not found зависимостей, на которые ссылаются в других статьях
ldd: warning: you do not have execution permission for `/usr/lib/oracle/ 12.2 /client64/lib/libsqora.so. 12.1 '
libclntshcore.so. 12.1 => /usr/lib/oracle/ 12.2 /client64 //lib/libclntshcore.so.12.1 (0x00007f98de84a000)
ODBC — настройка подключения
Теперь настроим подключение через ODBC. ВАЖНО — ServerName НЕ МОЖЕТ СОДЕРЖАТЬ НИЖНЕГО ПОДЧЕРКИВАНИЯ (_)
После этого у нас должно получится подключится к БД Oracle через клиент ODBC (всегда используйте параметр -v, если будет ошибка подключения, скажет детально в чем проблема):
Так же для очистки совести, что у нас все работает, делаем запрос:
В болшьшинсве статей, содержиться не актуальная информация для настройки для centos 6. Для настройки Centos 7, нужно выполнить другие шаги, приступим
Создадим файл, который укажет на переменно окружение для zabbix-proxy
внутрь добавляем 2 строчки
Теперь создадим сам файл с переменными
внутрь, вставляем уже абсолютные пути и без экспорта переменных
теперь перечитываем настройки рестартим прокси
После чего, осталось сделать какой либо простейший запрос с сервера, чтобы убедится что все работает
преполагается, что создавать шаблоны или хотябы создавать item для сервера вы умеет.
для проверки, будем использовать самый простеший запрос
где unique short description — любое краткое и удобное вам имя, DSN то имя, которое мы указали в /etc/odbc.ini — ORA_TESTDB
После добавления, прокся может подтупливать, если хочется убедится сразу, хорошо помогает, если ее рестартануть
и в сервере в разделе Monitoring→latest data для вашего сервера, для которого вы делали уведем
LD config
While we did install the rpm package, the Oracle 19.12 client package did auto-configure LD path at the global level – it means every user on the system can use the Oracle instant client. We can see the LD path have been configured under:
This will print:
To ensure that the required Oracle libraries are recognized by the OS, we can run:
It should print:
Note: If for some reason the ldconfig command shows links to other dynamic libraries – that’s when we might have to create a separate ENV file for Zabbix server/Proxy, which would link the Zabbix application to the correct dynamic libraries, as per the example at the start of this section.
Общее
Создадим пользователя zabbix и базу zabbixdb
psql -U postgres
CREATE ROLE zabbix WITH PASSWORD ‘ExamplePass21312’ LOGIN;
CREATE DATABASE zabbixdb WITH OWNER zabbix;
\q
проверим что создалось корректно и мы можем войти
Теперь поставим компоненты
yum install zabbix-server-pgsql zabbix-web-pgsql zabbix-agent zabbix-get
Check if the Oracle service port is reachable
To save us some headache down the line, let’s first check the network connectivity to our Oracle database host. Let’s check if we can reach the default Oracle port at the network level. In this example, we will try to connect to the default Oracle database port, 1521. Depending on which port your Oracle database is listening for connections, adjust accordingly,. Make sure the output says ‘Connected to 10.1.10.15:1521’:
Читайте также: