RDS for Oracleにて、Alert/Trace/Listener(監査)ログにエラーを書き込んでテストしたい!【AWS】

RDSアイキャッチ画面

監視設定のテスト等でRDS for Oracleの監査ログにエラーを書き込む必要がある場合、マネージドサービスであるRDSでは、直接ログに書き込みができないので一工夫必要です。

今回はそのエラーを書き込む方法を紹介します。

・RDS for Oracleにて、Alertログに”ORA-“というエラーを出したい
・RDS for Oracleにて、Traceログに”ERROR”というエラーを出したい
・RDS for Oracleにて、Listenerログに”TNS-“というエラーを出したい

前提条件

・RDS for Oracleは作成ずみ
・クライアントにSQLPlusは導入し、接続テスト済み
・CloudWatch Logsへのログ発行設定済み

テスト準備

RDSに接続している環境にて、SQL Plusを用いてRDSに接続します。
※SQL文を実行できれば、SQL DeveloperでもなんでもOKです。

参考ログインコマンド

sqlplus 'user_name@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dns_name)(PORT=port))(CONNECT_DATA=(SID=database_name)))'

AlaertログにORAエラーを出す方法&確認方法

下記のSQL分を実行し、エラーを出します

create tablespace system datafile size 100M;
参考 おらくるのいる生活

CloudWatchログより確認

次にCloudWatch ログに先ほど出力させたエラーログが出ていることを確認します。

CloudwWatch ログのダッシュボードへ移動し、左メニューのログのインサイトをクリック
ロググループには今回の検索対象である「alertログ」を選択します。
※alertログのロググループ名は/aws/rds/instance/RDS名/alertです。

下記内容を貼り付け「クエリの実行」をクリック

fields @timestamp, @message
| filter @message like /ORA-/
| sort @timestamp desc

traceログにエラーを出す方法

下記をexample.sqlで保存し、SQLPlus上で実行

BEGIN
   -- エラーを引き起こすSQL文
   SELECT * INTO some_var FROM non_existent_table;
EXCEPTION
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END;

CloudWatch ログより確認

先ほどと同様に、CloudWatchインサイトを用いて確認しましょう。
ロググループには今回の検索対象である「traceログ」を選択します。
※traceログのロググループ名は/aws/rds/instance/RDS名/traceです。

fields @timestamp, @message
| filter @message like /err/
| sort @timestamp desc
CloudWatchトレースログ確認結果

Listenerログにエラーを出す方法

リスナーログの場合は、SQL Plusにて接続する際の認証を失敗する必要がありますので、 ユーザー名を実在しないユーザーにして実行してください。

sqlplus 'test@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=database-2.????????.ap-northeast-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=orcl)))'

今までと同様にCloudWatchログを確認します

fields @timestamp, @message
| filter @message like /TNS/
| sort @timestamp desc
クラウドウォッチ実行結果

以上です!参考になれば幸いです。