Мониторинг OracleDB с помощью Proto Observability

Обновлено 16.09.2026
Сбор метрик экземпляра, сессий, памяти и табличных пространств OracleDB

На этой странице:

Сбор метрик OracleDB

Метрики OracleDB собирает проверка агента oracle. Поддерживаются OracleDB 11g, 12c, 18c, 19c, 21c — как мультитенантные (CDB), так и non-CDB.

Версия агента

Настройка мониторинга OracleDB различается для агентов 7.80.2 и 7.40.2: у них разные права пользователя, способ подключения к базе и набор метрик. Там, где настройка отличается, инструкция разделена на вкладки — выбирайте вкладку своей версии агента.

Узнать версию агента:

protoobp-agent version
Версия агентаГде применяетсяЧто нужно для подключения к OracleDB
7.80.2Linux, Dockerничего: драйвер встроен в агент, Oracle Client и Java не нужны
7.40.2Linux, Docker, WindowsOracle Instant Client или JDBC-драйвер + Java 8+ (только Linux)

Конфигурация OracleDB

Создайте пользователя для мониторинга и выдайте ему права от имени SYSDBA.

Пользователь

  • Мультитенантная база (CDB) — общий пользователь в корневом контейнере; агент подключается к CDB$ROOT и собирает метрики всех PDB:

    CREATE USER c##protoobp IDENTIFIED BY "<PASSWORD>" CONTAINER = ALL;
    ALTER USER c##protoobp SET CONTAINER_DATA=ALL CONTAINER=CURRENT;
    
  • Non-CDB и Oracle 11g:

    CREATE USER protoobp IDENTIFIED BY "<PASSWORD>";
    

Права

Пример — для мультитенантной базы; для non-CDB и Oracle 11g замените c##protoobp на protoobp.

GRANT CREATE SESSION TO c##protoobp;
GRANT SELECT ON V_$SESSION TO c##protoobp;
GRANT SELECT ON V_$DATABASE TO c##protoobp;
GRANT SELECT ON V_$CONTAINERS TO c##protoobp;
GRANT SELECT ON V_$SQLSTATS TO c##protoobp;
GRANT SELECT ON V_$INSTANCE TO c##protoobp;
GRANT SELECT ON DBA_FEATURE_USAGE_STATISTICS TO c##protoobp;
GRANT SELECT ON V_$SQL_PLAN_STATISTICS_ALL TO c##protoobp;
GRANT SELECT ON V_$PROCESS TO c##protoobp;
GRANT SELECT ON V_$CON_SYSMETRIC TO c##protoobp;
GRANT SELECT ON CDB_TABLESPACE_USAGE_METRICS TO c##protoobp;
GRANT SELECT ON CDB_TABLESPACES TO c##protoobp;
GRANT SELECT ON V_$SQLCOMMAND TO c##protoobp;
GRANT SELECT ON V_$DATAFILE TO c##protoobp;
GRANT SELECT ON V_$SYSMETRIC TO c##protoobp;
GRANT SELECT ON V_$SGAINFO TO c##protoobp;
GRANT SELECT ON V_$PDBS TO c##protoobp;
GRANT SELECT ON CDB_SERVICES TO c##protoobp;
GRANT SELECT ON V_$OSSTAT TO c##protoobp;
GRANT SELECT ON V_$PARAMETER TO c##protoobp;
GRANT SELECT ON V_$SQL TO c##protoobp;
GRANT SELECT ON V_$PGASTAT TO c##protoobp;
GRANT SELECT ON V_$ASM_DISKGROUP TO c##protoobp;
GRANT SELECT ON V_$RSRCMGRMETRIC TO c##protoobp;
GRANT SELECT ON V_$DATAGUARD_CONFIG TO c##protoobp;
GRANT SELECT ON V_$DATAGUARD_STATS TO c##protoobp;
GRANT SELECT ON V_$TRANSACTION TO c##protoobp;
GRANT SELECT ON V_$LOCKED_OBJECT TO c##protoobp;
GRANT SELECT ON DBA_OBJECTS TO c##protoobp;
GRANT SELECT ON CDB_DATA_FILES TO c##protoobp;
GRANT SELECT ON DBA_DATA_FILES TO c##protoobp;

Для Oracle 11g пропустите представления, которых в этой версии нет: V_$CON_SYSMETRIC, CDB_TABLESPACE_USAGE_METRICS, CDB_TABLESPACES, V_$PDBS, CDB_SERVICES, V_$TRANSACTION, V_$LOCKED_OBJECT.

Для пользовательских запросов к конкретной PDB дополнительно выполните в этой PDB:

ALTER SESSION SET CONTAINER = <PDB_NAME>;
GRANT SET CONTAINER TO c##protoobp;

При включённом dbm: true (см. Собираемые метрики) дополнительно нужны:

GRANT SELECT ON V_$LOCK TO c##protoobp;
GRANT SELECT ON GV_$LOCK TO c##protoobp;
GRANT EXECUTE ON SYS.DBMS_LOB TO c##protoobp;

Amazon RDS и Autonomous Database. В Amazon RDS прямой GRANT на системные представления недоступен — выдавайте права процедурой exec rdsadmin.rdsadmin_util.grant_sys_object('V_$SESSION','PROTOOBP','SELECT',p_grant_option => false); для каждого представления из списка. В Oracle Autonomous Database указывайте имена представлений без подчёркивания: V$SESSION вместо V_$SESSION.

  • Non-CDB:

    -- Для Oracle 11g эту строку не выполняйте.
    ALTER SESSION SET "_ORACLE_SCRIPT"=true;
    
    CREATE USER protoobp IDENTIFIED BY "<PASSWORD>";
    GRANT CONNECT TO protoobp;
    GRANT SELECT ON GV_$PROCESS TO protoobp;
    GRANT SELECT ON GV_$SYSMETRIC TO protoobp;
    GRANT SELECT ON SYS.DBA_DATA_FILES TO protoobp;
    GRANT SELECT ON SYS.DBA_TABLESPACES TO protoobp;
    GRANT SELECT ON SYS.DBA_TABLESPACE_USAGE_METRICS TO protoobp;
    
  • Мультитенантная база (CDB), Oracle 12c и 19c — в корневом контейнере:

    ALTER SESSION SET CONTAINER = CDB$ROOT;
    CREATE USER c##protoobp IDENTIFIED BY "<PASSWORD>" CONTAINER=ALL;
    GRANT CREATE SESSION TO c##protoobp CONTAINER=ALL;
    GRANT SELECT ANY DICTIONARY TO c##protoobp CONTAINER=ALL;
    GRANT SELECT ON GV_$PROCESS TO c##protoobp CONTAINER=ALL;
    GRANT SELECT ON GV_$SYSMETRIC TO c##protoobp CONTAINER=ALL;
    

Клиент для подключения

Агент 7.80.2 поддерживает два способа подключения:

СпособКогда используетсяЧто нужно на хосте с агентом
Встроенный драйверпо умолчаниюничего: ни Oracle Client, ни Java
Oracle Client (libclntsh.so)oracle_client: true либо задан tns_aliasOracle Instant Client Basic или Oracle Home

Встроенного драйвера достаточно для подключения по server + service_name, в том числе по TCPS. Oracle Client нужен, только если используются tnsnames.ora/LDAP (tns_alias) или возможности SQL*Net, которые встроенный драйвер не поддерживает.

Для Oracle Client:

  1. Установите пакет Instant Client Basic, например в /u01/app/oracle/product/instantclient_19.

  2. Передайте путь к библиотекам агенту — параметром oracle_client_lib_dir в conf.yaml либо переменной окружения:

    echo "LD_LIBRARY_PATH=/u01/app/oracle/product/instantclient_19" \
      >> /etc/protoobp-agent/environment
    

    Если используется полный Oracle Home, дополнительно задайте ORACLE_HOME.

Клиентских библиотек Oracle в составе агента 7.40.2 нет. Агент выбирает способ подключения автоматически:

  1. если на хосте найден Oracle Instant Client — подключается через него;
  2. иначе — через JDBC-драйвер. Этот способ работает только на Linux и требует Java 8 или новее.

Установите один из двух клиентов. Если не установлен ни один, либо Instant Client установлен, но агент не находит его библиотеки, проверка переходит на JDBC и завершается ошибкой No JVM shared library file (libjvm.so) found.

Oracle Instant Client — Linux

  1. Скачайте с сайта Oracle пакеты Instant Client Basic и Instant Client SDK и распакуйте оба в один общий каталог, например /opt/oracle:

    mkdir -p /opt/oracle && cd /opt/oracle
    unzip instantclient-basic-linux.x64-<VERSION>.zip
    unzip instantclient-sdk-linux.x64-<VERSION>.zip
    
  2. Сделайте библиотеки доступными для компоновщика:

    echo /opt/oracle/instantclient_<VERSION> > /etc/ld.so.conf.d/oracle-instantclient.conf
    ldconfig
    

Oracle Instant Client — Windows

  1. Установите Microsoft Visual C++ Redistributable нужной для Instant Client версии.
  2. Распакуйте Instant Client Basic и Instant Client SDK в один общий каталог, например C:\oracle\instantclient_19.
  3. Добавьте этот каталог в системную переменную PATH (служба агента не видит пользовательские переменные) и перезапустите службу агента.

На Windows JDBC не поддерживается — Instant Client обязателен.

JDBC-драйвер — только Linux

  1. Установите Java 8 или новее (например, пакет openjdk-11-jre-headless).

  2. Скачайте с сайта Oracle JDBC-драйвер (ojdbc8.jar или новее) и положите в каталог, доступный пользователю агента pobp-agent, например /opt/oracle/jdbc/ojdbc8.jar.

  3. Укажите путь к файлу в параметре jdbc_driver_path конфигурации проверки (см. Конфигурация ProtoOBP агента).

  4. Если Java установлена не в стандартный каталог /usr/lib/jvm, передайте агенту JAVA_HOME. В 7.40.2 служба агента не читает /etc/protoobp-agent/environment, поэтому используйте drop-in:

    mkdir -p /etc/systemd/system/protoobp-agent.service.d
    cat > /etc/systemd/system/protoobp-agent.service.d/oracle.conf <<'EOF'
    [Service]
    Environment=JAVA_HOME=/usr/lib/jvm/<JAVA_DIR>
    EOF
    systemctl daemon-reload
    

Конфигурация ProtoOBP агента

Если агент запускается в виде службы на хосте

Создайте файл конфигурации проверки:

  • Linux — /etc/protoobp-agent/conf.d/oracle.d/conf.yaml
  • Windows (только 7.40.2) — C:\ProgramData\Protoobp\conf.d\oracle.d\conf.yaml
init_config:

instances:
  - server: <ORACLE_HOST>:1521
    # Имя сервиса CDB (для non-CDB — имя сервиса базы):
    # SELECT value FROM v$parameter WHERE name='service_names'
    service_name: <SERVICE_NAME>
    username: c##protoobp   # для non-CDB — protoobp
    password: "<PASSWORD>"
    tags:
      - env:<ENV>

Подключение по TCPS:

instances:
  - server: <ORACLE_HOST>:2484
    service_name: <SERVICE_NAME>
    username: c##protoobp
    password: "<PASSWORD>"
    protocol: TCPS
    wallet: <WALLET_DIR>

Подключение через tnsnames.ora (требует Oracle Client):

instances:
  - tns_alias: <TNS_ALIAS>
    tns_admin: <TNS_ADMIN_DIR>
    username: c##protoobp
    password: "<PASSWORD>"

Перезапустите агента: systemctl restart protoobp-agent.

RAC. Настройте отдельный instance проверки на каждый узел кластера: агент читает представления V$ конкретного экземпляра, а не общие GV$. Подключайтесь к узлам напрямую — через прокси, балансировщики и пулы соединений проверка не работает.

init_config:

instances:
  - server: <ORACLE_HOST>:1521
    # SELECT value FROM v$parameter WHERE name='service_names'
    service_name: <SERVICE_NAME>
    username: protoobp          # для CDB — c##protoobp
    password: "<PASSWORD>"
    # Только при подключении через JDBC:
    # jdbc_driver_path: /opt/oracle/jdbc/ojdbc8.jar
    tags:
      - env:<ENV>

Подключение по TCPS — укажите protocol: TCPS и порт TCPS-слушателя:

instances:
  - server: <ORACLE_HOST>:2484
    service_name: <SERVICE_NAME>
    username: protoobp
    password: "<PASSWORD>"
    protocol: TCPS
  • Через Instant Client настройки SSL (wallet) берутся из sqlnet.ora клиента. Проверьте подключение с хоста агента:

    sqlplus <USER>/<PASSWORD>@"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCPS)(HOST=<HOST>)(PORT=<PORT>)))(CONNECT_DATA=(SERVICE_NAME=<SERVICE_NAME>)))"
    
  • Через JDBC обязательно укажите хранилище доверенных сертификатов:

        jdbc_driver_path: /opt/oracle/jdbc/ojdbc8.jar
        jdbc_truststore_path: /opt/oracle/truststore/cwallet.sso
        jdbc_truststore_type: SSO          # JKS, SSO или PKCS12
        # jdbc_truststore_password: <TRUSTSTORE_PASSWORD>  # для SSO не нужен
    

Перезапустите агента:

  • Linux — systemctl restart protoobp-agent
  • Windows — "C:\Program Files\Protoobp\Protoobp Agent\bin\agent.exe" restart-service

Выполните проверку работы агента и убедитесь, что в разделе oracle нет ошибок.

Пользовательские запросы

Собственные метрики задаются в custom_queries. Имя метрики — metric_prefix плюс name столбца; столбцы с type: tag становятся лейблами. Пример одинаков для обеих версий агента:

instances:
  - server: <ORACLE_HOST>:1521
    service_name: <SERVICE_NAME>
    username: c##protoobp
    password: "<PASSWORD>"
    custom_queries:
      - metric_prefix: oracle.app
        query: SELECT status, COUNT(*) FROM app.orders GROUP BY status
        columns:
          - name: status
            type: tag
          - name: orders
            type: gauge

Отличия версий:

  • 7.80.2 — параметр pdb: <PDB_NAME> в запросе выполняет его в указанной PDB (по умолчанию — CDB$ROOT).
  • 7.40.2 — параметр only_custom_queries: true в instance отключает стандартные метрики; тогда пользователю достаточно прав на таблицы из пользовательских запросов.

Если агент запускается в виде Docker контейнера

Используется обычный образ агента, без суффикса -jmx.

  1. Добавьте autodiscovery-лейблы к Docker контейнеру с OracleDB.

    • в docker-compose.yaml

      labels:
        com.protoobp.ad.check_names: '["oracle"]'
        com.protoobp.ad.init_configs: "[{}]"
        com.protoobp.ad.instances: '[{"server": "%%host%%:1521", "service_name": "<SERVICE_NAME>", "username": "c##protoobp", "password": "<PASSWORD>"}]'
      
    • или в Dockerfile

      LABEL "com.protoobp.ad.check_names"='["oracle"]'
      LABEL "com.protoobp.ad.init_configs"='[{}]'
      LABEL "com.protoobp.ad.instances"='[{"server": "%%host%%:1521", "service_name": "<SERVICE_NAME>", "username": "c##protoobp", "password": "<PASSWORD>"}]'
      
  2. Примените изменения лейблов для контейнера с OracleDB (перезапуском контейнера), а также перезапустите контейнер с агентом ProtoOBP.

В контейнере используется подключение через JDBC: Java есть только в образе агента с суффиксом -jmx.

  1. Смонтируйте JDBC-драйвер в контейнер агента, например /opt/oracle/jdbc/ojdbc8.jar:/opt/oracle/jdbc/ojdbc8.jar:ro.

  2. Добавьте autodiscovery-лейблы к Docker контейнеру с OracleDB.

    • в docker-compose.yaml

      labels:
        com.protoobp.ad.check_names: '["oracle"]'
        com.protoobp.ad.init_configs: "[{}]"
        com.protoobp.ad.instances: '[{"server": "%%host%%:1521", "service_name": "<SERVICE_NAME>", "username": "protoobp", "password": "<PASSWORD>", "jdbc_driver_path": "/opt/oracle/jdbc/ojdbc8.jar"}]'
      
    • или в Dockerfile

      LABEL "com.protoobp.ad.check_names"='["oracle"]'
      LABEL "com.protoobp.ad.init_configs"='[{}]'
      LABEL "com.protoobp.ad.instances"='[{"server": "%%host%%:1521", "service_name": "<SERVICE_NAME>", "username": "protoobp", "password": "<PASSWORD>", "jdbc_driver_path": "/opt/oracle/jdbc/ojdbc8.jar"}]'
      
  3. Примените изменения лейблов для контейнера с OracleDB (перезапуском контейнера), а также перезапустите контейнер с агентом ProtoOBP.

Выполните проверку работы агента и убедитесь, что в разделе oracle нет ошибок.

Проверка

Убедитесь, что проверка запустилась и собирает метрики:

protoobp-agent status | grep -A 12 "oracle ("

Для агента в контейнере:

docker exec protoobp-agent agent status | grep -A 12 "oracle ("

Ожидается instance со статусом [OK] и ненулевыми Metric Samples. Полный список собранных серий:

protoobp-agent check oracle

Типовые ошибки:

В логе агента при запуске проверки указан способ подключения: driver: oracle — встроенный драйвер, driver: godror — Oracle Client.

СообщениеПричина и решение
missing privileges detected, falling back to deprecated Oracle integrationВыданы права от 7.40.2 либо не хватает прав на V_$INSTANCE и другие представления — выдайте права со вкладки 7.80.2 раздела Конфигурация OracleDB.
ORA-01017: invalid username/passwordНеверные учётные данные; для CDB имя пользователя должно начинаться с c##.
ORA-12514 / ORA-12505 (listener does not currently know of service)Неверный service_name — уточните запросом SELECT value FROM v$parameter WHERE name='service_names'.
DPI-1047: Cannot locate a 64-bit Oracle Client libraryВключён oracle_client (или задан tns_alias), но библиотеки Oracle Client не найдены — см. Клиент для подключения.
Ошибки про libjvm.so, JDBC, jaydebeapiЭто ошибки агента 7.40.2. Проверьте версию агента (protoobp-agent version) и удалите из conf.yaml параметр jdbc_driver_path.
СообщениеПричина и решение
No JVM shared library file (libjvm.so) foundАгент не нашёл Instant Client и перешёл на JDBC, но Java не установлена или не найдена. Установите Instant Client либо Java и задайте JAVA_HOME — см. Клиент для подключения.
Class oracle.jdbc.OracleDriver not foundНе указан или недоступен JDBC-драйвер — проверьте jdbc_driver_path и права пользователя pobp-agent на файл.
Oracle client is unavailable and the integration is unable to import JDBC librariesWindows: не найден Instant Client или не установлен Visual C++ Redistributable.
TCPS connections to Oracle via JDBC requires both jdbc_truststore_type and jdbc_truststore_pathДля TCPS через JDBC не заданы параметры хранилища сертификатов.
ORA-01017: invalid username/passwordНеверные учётные данные; для CDB имя пользователя должно начинаться с c##.
ORA-00942: table or view does not existНе выданы права со вкладки 7.40.2 раздела Конфигурация OracleDB.

Собираемые метрики

Все метрики имеют тип gauge.

Системные метрики (sysmetric) — общие для обеих версий:

МетрикаОписание
oracle_active_sessionsСреднее число активных сессий
oracle_session_countЧисло сессий
oracle_session_limit_usageИспользование лимита сессий, %
oracle_logonsВходы в секунду
oracle_buffer_cachehit_ratioПопадания в буферный кэш, %
oracle_library_cachehit_ratioПопадания в library cache, %
oracle_shared_pool_freeСвободно в shared pool, %
oracle_database_wait_time_ratioДоля времени ожидания, %
oracle_service_response_timeВремя ответа SQL-сервиса
oracle_physical_readsФизические чтения в секунду
oracle_physical_writesФизические записи в секунду
oracle_disk_sortsСортировки на диске в секунду
oracle_memory_sorts_ratioДоля сортировок в памяти, %
oracle_rows_per_sortСтрок на сортировку
oracle_sorts_per_user_callСортировок на пользовательский вызов
oracle_long_table_scansДлинные полные сканирования таблиц в секунду
oracle_enqueue_timeoutsТаймауты блокировок (enqueue) в секунду
oracle_user_rollbacksОткаты транзакций в секунду
oracle_temp_space_usedЗанято во временном табличном пространстве, байты
oracle_gc_cr_block_receivedRAC: получено CR-блоков в секунду
oracle_cache_blocks_corruptRAC: повреждённые блоки глобального кэша
oracle_cache_blocks_lostRAC: потерянные блоки глобального кэша

Табличные пространства (лейбл tablespace) — общие для обеих версий:

МетрикаОписание
oracle_tablespace_usedЗанято, байты
oracle_tablespace_sizeРазмер, байты
oracle_tablespace_in_useЗаполненность, %
oracle_tablespace_offline1, если пространство недоступно

Метрики, которые есть только в одной из версий:

На метриках CDB-экземпляра есть лейбл pdb с именем контейнера, на всех метриках — oracle_version.

МетрикаОписание
oracle_tablespace_maxsizeМаксимальный размер табличного пространства, байты
oracle_pga_over_allocation_countПревышения выделения PGA за интервал
oracle_process_pga_used_memoryИспользуемая PGA процесса, байты
oracle_process_pga_allocated_memoryВыделенная PGA процесса, байты
oracle_process_pga_freeable_memoryОсвобождаемая PGA процесса, байты
oracle_process_pga_max_memoryМаксимум PGA процесса, байты
oracle_session_inactive_secondsВремя бездействия неактивной сессии, секунды
oracle_user_sessionsЧисло пользовательских сессий
oracle_num_cpusЧисло CPU сервера БД
oracle_physical_memory_gbФизическая память сервера БД, ГБ

Группы метрик включаются и отключаются параметрами instance sysmetrics, tablespaces, process_memory, например:

    process_memory:
      enabled: false

Расширенный режим (dbm: true) добавляет метрики ASM (oracle_asm_diskgroup_*), Data Guard (oracle_data_guard_*), Resource Manager (oracle_resource_manager_*), разделяемой памяти (oracle_shared_memory_size) и расширенный набор системных метрик. Режим требует дополнительных прав (см. Конфигурация OracleDB) и создаёт на базе больше запросов.

МетрикаОписание
oracle_cursor_cachehit_ratioПопадания в кэш курсоров, %
oracle_process_pga_used_memoryИспользуемая PGA (лейбл program), байты
oracle_process_pga_allocated_memoryВыделенная PGA (лейбл program), байты
oracle_process_pga_freeable_memoryОсвобождаемая PGA (лейбл program), байты
oracle_process_pga_maximum_memoryМаксимум PGA (лейбл program), байты

Сервисные проверки

Общие для обеих версий:

ИмяОписание
oracle.can_connectCRITICAL, если агент не может подключиться к OracleDB; иначе OK
oracle.can_queryCRITICAL, если при сборе метрик возникли ошибки запросов; иначе OK