Oracle

Oracle

Agent Check Agentチェック

Supported OS Linux Mac OS Windows

Oracle ダッシュボード

概要

Oracle Database サーバーからメトリクスをリアルタイムに取得して、可用性とパフォーマンスを視覚化および監視できます。

セットアップ

インストール

前提条件

Oracle インテグレーションを使用するには、Oracle Instant Client ライブラリをインストールするか、Oracle JDBC Driver をダウンロードする必要があります (Linux のみ)。 ライセンスの制約により、これらのライブラリは Datadog Agent に含まれていませんが、Oracle から直接ダウンロードできます。

Oracle Instant Client
Linux
  1. Linux 用の Oracle Instant Client のインストールに従ってください。

  2. 以下を確認してください。

    • Instant Client Basic パッケージと SDK パッケージの両方がインストールされます。Oracle のダウンロードページにあります。

      Instant Client ライブラリのインストール後に、ランタイムリンカがライブラリを見つけることができることを確認します。たとえば、ldconfig を使用します。

      # Put the library location in an ld configuration file.
      
      sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > \
          /etc/ld.so.conf.d/oracle-instantclient.conf"
      
      # Update the bindings.
      
      sudo ldconfig
      
    • 両方のパッケージは、特定のマシン上のすべてのユーザーが使用できる単一のディレクトリ (たとえば、/opt/oracle) に解凍されます。

      mkdir -p /opt/oracle/ && cd /opt/oracle/
      unzip /opt/oracle/instantclient-basic-linux.x64-12.1.0.2.0.zip
      unzip /opt/oracle/instantclient-sdk-linux.x64-12.1.0.2.0.zip
      
Windows
  1. Oracle Windows インストールガイドに従って、Oracle Instant Client を構成します。

  2. 以下を確認してください。

    • Microsoft Visual Studio 2017 再頒布可能パッケージまたは適切なバージョンが Oracle Instant Client にインストールされます。

    • Oracle のダウンロードページInstant Client Basic パッケージと SDK パッケージの両方がインストールされます。

    • 両方のパッケージは、特定のマシン上のすべてのユーザーが使用できる単一のディレクトリ (たとえば、C:\oracle) に抽出されます。

JDBC Driver

: この方法は Linux でのみ機能します。

Java 8 以降は、JDBC Driver を使用するときに Agent が使用するライブラリの 1 つである JPype のシステムに必要です。

インストールしたら、次の手順を実行します。

  1. JDBC Driver JAR ファイルをダウンロードします。
  2. ダウンロードしたファイルのパスを $CLASSPATH に追加するか、チェック構成ファイルの jdbc_driver_path の下に追加します (サンプル oracle.yaml を参照)。

Datadog ユーザーの作成

Oracle Database サーバーへの適切なアクセス権を持つ、読み取り専用の datadog ユーザーを作成します。管理者ユーザー (SYSDBAまたはSYSOPER`) で Oracle Database に接続し、以下を実行します。

-- Oracle Script を有効にします。
ALTER SESSION SET "_ORACLE_SCRIPT"=true;

-- Datadog ユーザーを作成します。パスワードのプレースホルダーは、安全なパスワードに置き換えてください。
CREATE USER datadog IDENTIFIED BY <パスワード>;

-- Datadog ユーザーにアクセス権を付与します。
GRANT CONNECT TO datadog;
GRANT SELECT ON GV_$PROCESS TO datadog;
GRANT SELECT ON gv_$sysmetric TO datadog;
GRANT SELECT ON sys.dba_data_files TO datadog;
GRANT SELECT ON sys.dba_tablespaces TO datadog;
GRANT SELECT ON sys.dba_tablespace_usage_metrics TO datadog;

: Oracle 11g を使用している場合、次の行を実行する必要はありません。

ALTER SESSION SET "_ORACLE_SCRIPT"=true;
Oracle 12c または 19c

管理者としてルートデータベースにログインして、datadog ユーザーを作成し、アクセス許可を付与します。

alter session set container = cdb$root;
CREATE USER c##datadog IDENTIFIED BY password CONTAINER=ALL;
GRANT CREATE SESSION TO c##datadog CONTAINER=ALL;
Grant select any dictionary to c##datadog container=all;
GRANT SELECT ON GV_$PROCESS TO c##datadog CONTAINER=ALL;
GRANT SELECT ON gv_$sysmetric TO c##datadog CONTAINER=ALL;

コンフィギュレーション

ホスト

ホストで実行中の Agent に対してこのチェックを構成するには:

  1. Agent のコンフィギュレーションディレクトリのルートにある conf.d/ フォルダーの oracle.d/conf.yaml ファイルを編集します。serverport を更新し、監視するマスターを設定します。使用可能なすべてのコンフィギュレーションオプションの詳細については、サンプル oracle.d/conf.yaml を参照してください。

    init_config:
    
    instances:
      ## @param server - string - required
      ## The IP address or hostname of the Oracle Database Server.
      #
      - server: localhost:1521
    
       ## @param service_name - string - required
       ## The Oracle Database service name. To view the services available on your server,
       ## run the following query: `SELECT value FROM v$parameter WHERE name='service_names'`
       #
       service_name: <SERVICE_NAME>
    
       ## @param username - string - required
       ## The username for the Datadog user account.
       #
       username: <USERNAME>
    
       ## @param password - string - required
       ## The password for the Datadog user account.
       #
       password: <PASSWORD>
    
  2. Agent を再起動します

カスタムクエリのみ

インスタンスのデフォルトのメトリクスチェックをスキップし、既存のメトリクス収集ユーザーでのみカスタムクエリを実行するには、値が true のタグ only_custom_queries を挿入します。これにより、Oracle インテグレーションの構成済みインスタンスがシステム、プロセス、およびテーブルスペースメトリクスの実行をスキップし、Datadog ユーザー作成セクションで説明されているアクセス許可なしでカスタムクエリを実行できます。この構成エントリが省略された場合、指定したユーザーには、カスタムクエリを実行するためのテーブルアクセス許可が必要です。

init_config:

instances:
  ## @param server - string - required
  ## The IP address or hostname of the Oracle Database Server.
  #
  - server: localhost:1521

    ## @param service_name - string - required
    ## The Oracle Database service name. To view the services available on your server,
    ## run the following query:
    ## `SELECT value FROM v$parameter WHERE name='service_names'`
    #
    service_name: "<SERVICE_NAME>"

    ## @param user - string - required
    ## The username for the user account.
    #
    user: <USER>

    ## @param password - string - required
    ## The password for the user account.
    #
    password: "<PASSWORD>"

    ## @param only_custom_queries - string - optional
    ## Set this parameter to any value if you want to only run custom
    ## queries for this instance.
    #
    only_custom_queries: true

コンテナ化

コンテナ環境の場合は、オートディスカバリーのインテグレーションテンプレートのガイドを参照して、次のパラメーターを適用してください。

パラメーター
<インテグレーション名>oracle
<初期コンフィギュレーション>空白または {}
<インスタンスコンフィギュレーション>{"server": "%%host%%:1521", "service_name":"<SERVICE_NAME>", "username":"datadog", "password":"<PASSWORD>"}

検証

Agent の status サブコマンドを実行し、Checks セクションで oracle を探します。

カスタムクエリ

カスタムクエリの指定もサポートされています。各クエリには、次の 3 つのパラメーターを含める必要があります。

パラメーター説明
metric_prefix各メトリクスのプレフィックス。
query実行する SQL です。簡単なステートメントにすることも、複数行のスクリプトにすることもできます。結果のすべての行が評価されます。
columns列を表すリストです。左から右の順に並べられます。次の 2 つの必須データがあります。
a. type - 送信方法 (gaugecount など)。
b. name - メトリクス名のサフィックス。これが metric_prefix に付加されて完全な名前になります。typetag の場合、この列は、このクエリによって収集されるすべてのメトリクスに適用されるタグと見なされます。

オプションで、tags パラメーターを使用して、収集される各メトリクスにタグのリストを適用できます。

以下のメトリクスは

self.gauge('oracle.custom_query.metric1', value, tags=['tester:oracle', 'tag1:value'])
self.count('oracle.custom_query.metric2', value, tags=['tester:oracle', 'tag1:value'])

以下の構成例から作成されます。

- metric_prefix: oracle.custom_query
  query: |  # 複数行のスクリプトが必要な場合は、パイプを使用します。
   SELECT columns
   FROM tester.test_table
   WHERE conditions
  columns:
  # スキップする列にはこれを入れます。
  - {}
  - name: metric1
    type: gauge
  - name: tag1
    type: tag
  - name: metric2
    type: count
  tags:
  - tester:oracle

使用可能なすべての構成オプションの詳細については、サンプル oracle.d/conf.yaml を参照してください。

データベースロックの識別に役立つクエリコンフィギュレーションを作成します。

  1. カスタムクエリを含めるには、conf.d\oracle.d\conf.yaml を変更します。custom_queries ブロックのコメントを解除し、必要なクエリと列を追加して、Agent を再起動します。
  init_config:
  instances:
      - server: localhost:1521
        service_name: orcl11g.us.oracle.com
        user: datadog
        password: xxxxxxx
        jdbc_driver_path: /u01/app/oracle/product/11.2/dbhome_1/jdbc/lib/ojdbc6.jar
        tags:
          - db:oracle
        custom_queries:
          - metric_prefix: oracle.custom_query.locks
            query: |
              select blocking_session, username, osuser, sid, serial# as serial, wait_class, seconds_in_wait
              from v_$session
              where blocking_session is not NULL order by blocking_session              
            columns:
              - name: blocking_session
                type: gauge
              - name: username
                type: tag
              - name: osuser
                type: tag
              - name: sid
                type: tag
              - name: serial
                type: tag
              - name: wait_class
                type: tag
              - name: seconds_in_wait
                type: tag
  1. v_$session にアクセスするには、DATADOG にアクセス許可を付与し、アクセス許可をテストします。
SQL> grant select on sys.v_$session to datadog;

##アクセスを検証するために DD ユーザーと接続します。


SQL> show user
USER is "DATADOG"


##ビューを表示するための同義語の作成
SQL> create synonym datadog.v_$session for sys.v_$session;


Synonym created.


SQL> select blocking_session,username,osuser, sid, serial#, wait_class, seconds_in_wait from v_$session
where blocking_session is not NULL order by blocking_session;
  1. 構成が完了すると、oracle.custom_query.locks メトリクスに基づいてモニターを作成できます。

収集データ

メトリクス

oracle.buffer_cachehit_ratio
(gauge)
Ratio of buffer cache hits
Shown as fraction
oracle.cursor_cachehit_ratio
(gauge)
Ratio of cursor cache hits
Shown as fraction
oracle.library_cachehit_ratio
(gauge)
Ratio of library cache hits
Shown as fraction
oracle.shared_pool_free
(gauge)
shared pool free memory %
Shown as percent
oracle.physical_reads
(gauge)
physical reads per sec
Shown as read
oracle.physical_writes
(gauge)
physical writes per sec
Shown as write
oracle.enqueue_timeouts
(gauge)
enqueue timeouts per sec
Shown as timeout
oracle.gc_cr_block_received
(gauge)
GC CR block received
Shown as block
oracle.cache_blocks_corrupt
(gauge)
corrupt cache blocks
Shown as block
oracle.cache_blocks_lost
(gauge)
lost cache blocks
Shown as block
oracle.logons
(gauge)
number of logon attempts
oracle.active_sessions
(gauge)
number of active sessions
oracle.long_table_scans
(gauge)
number of long table scans per sec
Shown as scan
oracle.service_response_time
(gauge)
service response time
Shown as second
oracle.user_rollbacks
(gauge)
number of user rollbacks
Shown as operation
oracle.sorts_per_user_call
(gauge)
sorts per user call
oracle.rows_per_sort
(gauge)
rows per sort
Shown as row
oracle.disk_sorts
(gauge)
disk sorts per second
Shown as operation
oracle.memory_sorts_ratio
(gauge)
memory sorts ratio
Shown as fraction
oracle.database_wait_time_ratio
(gauge)
memory sorts per second
Shown as percent
oracle.session_limit_usage
(gauge)
session limit usage
Shown as percent
oracle.session_count
(gauge)
session count
oracle.process.pga_used_memory
(gauge)
PGA memory used by process
Shown as byte
oracle.process.pga_allocated_memory
(gauge)
PGA memory allocated by process
Shown as byte
oracle.process.pga_freeable_memory
(gauge)
PGA memory freeable by process
Shown as byte
oracle.process.pga_maximum_memory
(gauge)
PGA maximum memory ever allocated by process
Shown as byte
oracle.temp_space_used
(gauge)
temp space used
Shown as byte
oracle.tablespace.used
(gauge)
tablespace used
Shown as byte
oracle.tablespace.size
(gauge)
tablespace size
Shown as byte
oracle.tablespace.in_use
(gauge)
tablespace in-use
Shown as percent
oracle.tablespace.offline
(gauge)
tablespace offline

イベント

Oracle Database チェックには、イベントは含まれません。

サービスのチェック

oracle.can_connect
Returns OK if the integration can connect to the oracle database, CRITICAL otherwise
Statuses: ok, critical

oracle.can_query
Returns OK if the integration can run all the queries, CRITICAL otherwise
Statuses: ok, critical

トラブルシューティング

一般的な問題

Oracle Instant Client

  • Oracle Instant Client ファイルと SDK ファイルの両方が同じディレクトリにあることを確認します。 ディレクトリの構造は次のようになります。
|____sdk/
|____network/
|____libociei.dylib
|____libocci.dylib
|____libocci.dylib.10.1
|____adrci
|____uidrvci
|____libclntsh.dylib.19.1
|____ojdbc8.jar
|____BASIC_README
|____liboramysql19.dylib
|____libocijdbc19.dylib
|____libocci.dylib.19.1
|____libclntsh.dylib
|____xstreams.jar
|____libclntsh.dylib.10.1
|____libnnz19.dylib
|____libclntshcore.dylib.19.1
|____libocci.dylib.12.1
|____libocci.dylib.18.1
|____libclntsh.dylib.11.1
|____BASIC_LICENSE
|____SDK_LICENSE
|____libocci.dylib.11.1
|____libclntsh.dylib.12.1
|____libclntsh.dylib.18.1
|____ucp.jar
|____genezi
|____SDK_README

Linux
  • Oracle の Linux インストールドキュメントを参照してください。
Windows
  • ご使用のバージョンで Microsoft Visual Studio 再頒布可能パッケージの要件が満たされていることを確認します。詳細については、Windows ダウンロードページを参照してください。
  • Oracle の詳細な Windows インストールドキュメントを参照してください。

JDBC Driver (Linux のみ)

  • JVMNotFoundException が発生した場合:

    JVMNotFoundException("No JVM shared library file ({jpype._jvmfinder.JVMNotFoundException: No JVM shared library file (libjvm.so) found. Try setting up the JAVA_HOME environment variable properly.})"
    
    • JAVA_HOME 環境変数が設定され、正しいディレクトリを指していることを確認してください。
    • 環境変数を /etc/environment に追加します:
      JAVA_HOME=/path/to/java
      
    • 次に、Agent を再起動します。
  • このエラー Unsupported major.minor version 52.0 が発生した場合は、古いバージョンの Java が実行されています。 お使いの Java システムをアップデートするか、新しいバージョンをインストールし、上記の手順に従って JAVA_HOME 変数を 新しいインストールに割り当てるかのにいずれかを行う必要があります。

  • Agent から次のコマンドを実行して、環境変数が正しく設定されていることを確認します。 表示された出力が正しい値と一致することを確認してください。

      sudo -u dd-agent -- /opt/datadog-agent/embedded/bin/python -c "import os; print("JAVA_HOME:{}".format(os.environ.get("JAVA_HOME")))"
    

ご不明な点は、Datadog のサポートチームまでお問い合わせください。