MySQL HeatWaveのTelemetry(テレメトリ)は、選択したMySQL Serverのログをオブザーバビリティ・サービスへエクスポートするための組み込み機能です。Telemetryの送信先としてOCI Log Analyticsを構成すると、MySQLのログをネイティブにエクスポートし、検索・分析できるようになります。

これにより、以下のようなユースケースに対応できます。

  • Error Log(エラーログ):データベースの起動・停止、エラー、警告、および診断メッセージを記録します。
  • Slow Query Log(スロークエリログ):設定された実行時間のしきい値を超えたSQL文を記録します。
  • General Log(一般クエリログ):クライアントの接続・切断、および受信したSQL文を記録します。
  • Audit Log(監査ログ):クライアントの接続や、データベースおよびテーブルへのアクセスを含む操作を記録します。

事前準備

対象のDB Systemが、以下の前提条件を満たしていることを確認してください。

  • DB SystemでMySQL 8.4.11以降が稼働していること
  • DB Systemがスタンドアロン構成であり、High Availability(HA)またはRead Replicaが構成されていないこと
  • DB SystemがAlways Free DB Systemではないこと
  • 使用するテナンシでOCI Log Analyticsが有効化されていること

ステップ 1. MySQL DB System用Dynamic Groupの作成

MySQL DB Systemは、Resource Principalを使用してテレメトリ・データをOCI Log Analyticsに送信します。OCIコンソールで以下に移動し、Dynamic Groupを作成します

Identity & Security → Domains → <Your Domain> → Dynamic groups

作成したDynamic GroupのMatching Rulesを編集し、指定したコンパートメント内に存在する現在および今後作成されるすべてのMySQL HeatWave DB SystemがDynamic Groupに含まれるように設定します。

構文:
ALL {resource.type = 'mysqldbsystem', resource.compartment.id = '<MYSQL_DB_COMPARTMENT_OCID>'}

ステップ2:必要なIAMポリシーを付与する

テナンシーの 「Identity & Security」→「Policies」→「Create Policy」 に移動し、以下の Policy Statements(ポリシー・ステートメント) を指定してIAMポリシーを作成します。

Allow dynamic-group MySQL_DG to use metrics in compartment <compartment_name>
Allow dynamic-group MySQL_DG  to read management-saved-search in compartment <compartment_name> 
Allow dynamic-group MySQL_DG  to {LOG_ANALYTICS_SOURCE_READ, LOG_ANALYTICS_LOOKUP_READ, LOG_ANALYTICS_QUERY_VIEW, LOG_ANALYTICS_QUERYJOB_WORK_REQUEST_READ} in tenancy
Allow dynamic-group MySQL_DG  to use loganalytics-ondemand-upload in tenancy
Allow dynamic-group MySQL_DG  to use loganalytics-lifecycle in tenancy
Allow dynamic-group MySQL_DG  to use loganalytics-log-group in tenancy

ステップ3:OCI Log Analyticsでログ・グループを作成する

Log Analytics Log Group(ログ・グループ) は、エクスポートされたMySQLログを整理・保存するOCI上の保存先です。テレメトリを構成する前に、ログ・グループを作成します。

  1. Observability & Management → Log Analytics → Administration を開きます。
  2. Log Groups を選択し、Create log group をクリックします。
  3. 対象のコンパートメントを選択します。
  4. 「MySQL 8.4 Logs」など、用途が分かる名前を入力します。
    ※現在、作成後のログ・グループ名の変更はサポートされていません。
  5. ログ・グループを作成します。

また、Dynamic Group(動的グループ) に設定するIAMポリシーでは、MySQL DB Systemに対して、同じコンパートメントまたはテナンシー内の loganalytics-log-group を使用する権限を付与する必要があります。

ステップ4:MySQLでAudit機能を有効化する

監査ログは、デフォルトでは無効になっています。AUDIT_ADMIN 権限を持つ MySQL HeatWave管理者として接続し、監査フィルタを定義します。

一般的な監査フィルタには、次のような選択肢があります。

オプション記録対象主な用途
接続イベント接続、切断、ユーザー変更推奨される基本設定
書込みアクティビティINSERT、UPDATE、DELETEデータ変更に関する追跡・説明責任
表の読取りSELECT タイプのアクセス機密データへのアクセス監視。ただしログ量が多くなる可能性あり
一般イベント問合せおよびコマンドのステータストラブルシューティング。ただしログ量が多くなることが多い
ユーザー別フィルタ選択したアカウントについて上記のイベントを記録特権ユーザーや管理者の監視
実用的な基本設定としては、接続イベントのみを監査対象にする方法:
SELECT audit_log_filter_set_filter(
  'log_connections',
  '{
    "filter": {
      "class": {
        "name": "connection",
        "event": [
          { "name": "connect" },
          { "name": "disconnect" },
          { "name": "change_user" }
        ]
      }
    }
  }'
);

SELECT audit_log_filter_set_user('%', 'log_connections');
特権アカウントに対してのみ、より詳細な監査フィルタを選択的に割り当て:
SELECT audit_log_filter_set_user('admin_user@%', 'log_data_changes');

MySQL Enterprise Auditコンポーネントは、監査レコードをJSON形式で出力するため、audit_log_format=JSON を別途設定する必要はありません。

MySQLの監査フィルタが割り当てられていることを確認します。

SELECT * FROM mysql_audit.audit_log_filter;

SELECT * FROM mysql_audit.audit_log_user;
重要: SQLを全面的に監査する設定は、大量の監査データが生成される可能性があり、さらに機密情報を含むSQLテキストが記録される場合があるため、慎重に使用してください。

詳細については、MySQL Enterprise Auditコンポーネントのドキュメントを参照してください。

ステップ5:OCI Log Analyticsへのエクスポートを構成する

  1. MySQL HeatWave → DB Systems を開き、対象のDB Systemを選択します。
  2. Telemetry タブを開きます。
  3. Edit Configurations を選択します。
  4. Add log analytics configuration を選択します。
  5. ログの種類として Audit log を選択し、使用する Log Analytics Log Group を指定します。
  6. Update telemetry configurations をクリックして設定を保存します。

ステップ6:セキュリティ対策としてログを分離する

一般的な業界のベストプラクティスとして、すべてのデータベース・アクティビティを1つの保存先に集約するのではなく、ログの用途、機密性、保持要件に応じて分離します。監査ログには、専用かつアクセス制限された Log Analytics Log Group を使用します。一方、エラー・ログ、一般ログ、スロー・クエリ・ログなどの運用データについては、監査ログとは別のログ・グループに保存します。

監査データへのアクセスは、権限を付与されたセキュリティ、リスク管理、コンプライアンス担当者のみに限定します。エンジニアリング・チームには、トラブルシューティングに必要な運用ログのみへのアクセスを付与します。また、規制要件および社内ポリシーに適合するログ保持期間を設定し、各ログ・グループの**ログ管理責任者(Log Owner)**を明確に文書化するとともに、アクセス権限を定期的にレビューします。

このようにログを分離することで、**最小権限の原則(Least Privilege)**を適用し、機密性の高いアクティビティ記録を保護できます。また、監査対応を効率化するとともに、ログ・コストの管理やインシデント調査も行いやすくなります。

ステップ7:Log ExplorerでMySQLのログ・データを分析する

Observability & Management → Log Analytics → Log Explorer を開き、適切な Log Group を選択して、対象となるログ・データを絞り込みます。

監査ログは、Log Analytics → Log Explorer の MySQL Database Audit JSON Logs ソースから確認できます。

ステップ8:動作確認

テスト用の接続またはクエリを実行し、Log Explorer で対象のコンパートメントを指定してログを検索します。

ログが表示されない場合は、まず以下の項目を確認します。

  • DB Systemのバージョン
  • スタンドアロン構成であること
  • Dynamic Group(動的グループ)のルール
  • IAMポリシー

監査ログを生成して設定が正しく機能していることを確認するには、MySQLクライアントから接続し、有効化した監査フィルタの条件に一致する操作を実行します。たとえば、接続、切断、または監査対象として設定したSQL操作を実行します。

まとめ

MySQL HeatWaveのテレメトリ機能を使用すると、MySQLのエラー・ログ、スロー・クエリ・ログ、一般ログ、監査ログをOCI Log Analyticsにエクスポートし、トラブルシューティング、セキュリティ分析、コンプライアンス監視を一元的に行うことができます。

Log Analyticsへのネイティブ・エクスポートを利用するには、MySQL 8.4.11以降を実行するスタンドアロンのMySQL HeatWave DB Systemが必要です。

このソリューションを構成するには、Log Analytics Log Group、MySQL DB System用のDynamic Group(動的グループ)、およびDB Systemによるテレメトリ送信を許可するIAMポリシーを作成します。また、MySQL Enterprise Auditでは、可能な限りlog_allを使用するのではなく、接続イベントやデータ変更など、必要なイベントに限定した監査フィルタを有効化することで、機密データがログに記録されるリスクとログの取り込み量を抑えます。

セキュリティのベストプラクティスとして、監査ログと運用ログを分離し、それぞれのテレメトリ構成に適切なLog Groupを指定します。さらに、監査ログへのアクセスを権限のあるチームのみに制限し、ビジネス要件およびコンプライアンス要件に基づいて適切なログ保持期間を設定します。

最後に、テスト接続や監査対象となるデータベース操作を実行し、監査イベントがOCI Log Analyticsへ正常に送信されていることを確認します。