Elastic-Agent (Metricbeat) でOracle DBを監視・可視化する際の設定メモ
Elastic Oracle Integration
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でインストールされたKibanaダッシュボードでElasticsearchに収集されたデータが確認できる。
※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を監視できるようになった。