designetwork

ネットワークを軸としたIT技術メモ

Elastic-Agent (Metricbeat)でOracle DBを監視・可視化する

Elastic-Agent (Metricbeat) でOracle DBを監視・可視化する際の設定メモ

Elastic Oracle Integration

docs.elastic.co

Metricbeat単体はこちら Oracle module | Metricbeat Reference [8.9] | Elastic

設定ポイント

Oracle DBが稼働するサーバにElastic Agentをインストールし、AgentがSQLを実行してメトリクスを収集する。Elastic AgentはFleet Management構成とする。

(Oracle DBサーバ以外からJDBCでの監視もできるようだが、今回は未検証)

Elastic Agentに環境変数を設定

ドキュメントにも記載がある通り、Oracle Instant ClientでDBに接続するために環境変数を設定する必要がある。 Elastic Agentはsystemdによって管理されており、起動時に EnvironmentFile から変数を読み込む。

# systemctl status elastic-agent
● elastic-agent.service - Elastic Agent is a unified agent to observe, monitor and protect your system.
   Loaded: loaded (/etc/systemd/system/elastic-agent.service; enabled; vendor preset: disabled)
# cat /etc/systemd/system/elastic-agent.service
[Unit]
Description=Elastic Agent is a unified agent to observe, monitor and protect your system.
ConditionFileIsExecutable=/usr/bin/elastic-agent

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/bin/elastic-agent
WorkingDirectory=/opt/Elastic/Agent
Restart=always
RestartSec=120

EnvironmentFile=-/etc/sysconfig/elastic-agent

[Install]
WantedBy=multi-user.target

デフォルトでは対象ファイルが存在しないため、ファイルを作成して変数を定義する。

# vi /etc/sysconfig/elastic-agent
ORACLE_PASSWORD="PASSWORD"
ORACLE_HOSTNAME=HOSTNAME
ORACLE_SID=ORCLCDB
ORACLE_BASE=/opt/oracle/oradata
ORACLE_HOME=/opt/oracle/product/21c/dbhome_1
PATH=/opt/oracle/product/21c/dbhome_1/bin

※変数設定内で変数を参照できないため $ORACLE_HOME/bin などは設定不可。PATHは必要でないかも。ORACLE_PASSWORD, ORACLE_HOSTNAME は設定汎用化。

Elastic-Agent再起動

# systemctl restart elastic-agent

Oracle Integration設定

setting value
Oracle DSN USERNAME/${env.ORACLE_PASSWORD}@${env.ORACLE_HOSTNAME}:1521/SERVICE_NAME?sysdba=1

※Elastic-Agentドキュメントでは oracle://<user>:<password>@<connection_string>, <user>:<password>@<connection_string> だが、Metricbeatでは user/pass@0.0.0.0:1521/ORCLPDB1.localdomain, user/password@0.0.0.0:1521/ORCLPDB1.localdomain as sysdba となっており、バージョンによって要調整かも。

Metricbeat: Oracle module | Metricbeat Reference [8.9] | Elastic

環境変数の読み取りについてはこちら: Env Provider | Fleet and Elastic Agent Guide [8.9] | Elastic

確認

Integrationでインストールされたダッシュボードでデータが確認できる。

Sysmetricsは私の環境では参照できず。CDBを参照することで取得できるが、Visualizeでキーとなっているservice.address(redacted)になっている。
Elastic-Agent 8.5->8.8で解消した。

エラー対応

インストール検証時に発生したエラー対応

logs-elastic_agent.metricbeat-* のログを確認し原因を特定する。

ORA-01804

Error fetching data for metricset sql.query: could not open connection: testing connection: ORA-01804: Error while trying to retrieve text for error ORA-01804

対応ORACLE_xxx環境変数設定見直し

以下の通りプロセスの環境変数を確認する。上記手順を見直して環境変数を設定する。

# systemctl status elastic-agent
---
● elastic-agent.service - Elastic Agent is a unified agent to observe, monitor and protect your system.
   Loaded: loaded (/etc/systemd/system/elastic-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since ...
 Main PID: 153297 (elastic-agent)
    Tasks: 65
   Memory: 226.3M
   CGroup: /system.slice/elastic-agent.service
           ├─153297 /opt/Elastic/Agent/elastic-agent
           ├─153317 /opt/Elastic/Agent/data/elastic-agent-...
           ├─153327 /opt/Elastic/Agent/data/elastic-agent-...
           ├─153338 /opt/Elastic/Agent/data/elastic-agent-...
           ├─153350 /opt/Elastic/Agent/data/elastic-agent-...
           └─153359 /opt/Elastic/Agent/data/elastic-agent-...

# cat /proc/153297/environ
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binPWD=/opt/Elastic/AgentLANG=en_US.UTF-8SHLVL=0

ORA-12154

Error fetching data for metricset sql.query: could not open connection: testing connection: dpoPool_create user=USERNAME extAuth=0: ORA-12154: TNS:could not resolve the connect identifier specified

対応:TNSリスナー構成見直し

0.0.0.0, 127.0.0.1 などローカルでListenしていない場合あり。

Timezone

metricbeat stderr: "godror WARNING: discrepancy between DBTIMEZONE (\"+00:00\"=0) and SYSTIMESTAMP (\"+09:00\"=900) - set connection timezone, see https://github.com/godror/godror/blob/master/doc/timezone.md\n"

対応:Timezone設定見直し

SELECT DBTIMEZONE FROM DUAL;
SELECT SYSTIMESTAMP FROM DUAL;

タイムゾーンの差異がある場合、Oracle DSN 設定でタイムゾーンを指定する。
USERNAME/${env.ORACLE_PASSWORD}@${env.ORACLE_HOSTNAME}:1521/SERVICE_NAME?sysdba=1&timezone=Asia/Tokyo

ORA-01005

Error fetching data for metricset sql.query: could not open connection: testing connection: dpoPool_create user=<USERNAME>:<PASSWORD> extAuth=0: ORA-01005: null password given; logon denied

対応:認証情報見直し

oracle://USERNAME:PASSWORD@xxx, oracle://USERNAME/PASSWORD@xxx, USERNAME:PASSWORD@xxx, USERNAME/PASSWORD@xxx など構文誤りの可能性もあり。

ORA-28009

Error fetching data for metricset sql.query: could not open connection: testing connection: dpoPool_create user=sys extAuth=0: ORA-28009: SYSでの接続はSYSDBAまたはSYSOPERで行う必要があります

対応:認証情報・権限見直し

まとめ - Elastic-Agent (Metricbeat)でOracle DBを監視・可視化する

# vi /etc/sysconfig/elastic-agent
---
ORACLE_PASSWORD="PASSWORD"
ORACLE_HOSTNAME=HOSTNAME
ORACLE_SID=ORCLCDB
ORACLE_BASE=/opt/oracle/oradata
ORACLE_HOME=/opt/oracle/product/21c/dbhome_1
PATH=/opt/oracle/product/21c/dbhome_1/bin

により環境変数を設定し、監視先として

USERNAME/${env.ORACLE_PASSWORD}@${env.ORACLE_HOSTNAME}:1521/SERVICE_NAME?sysdba=1

を設定することで、Elastic-Agent Oracle IntegrationでOracle DBを監視できるようになった。