株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

パブリッククラウドでのデータベース監視・モニタリング その4

峯岸です。引き続きAWSの監視について投稿します。今回は前回に引き続きOracle Databaseのアラートログ監視についてです。

CloudWatch Logsサブスクリプションフィルタを用いたアラートログ監視実装

CloudWatch Logsサブスクリプションフィルタを用いたアラートログ監視実装について設定方法を説明していきます。メトリクスフィルタと異なる点はAWS Lambdaに連携することでメールの通知内容等をユーザ側で制御できるという点です。

AWS Lambdaとは関数(プログラムコード)の実行環境を提供するサービスです。さまざまなプログラミング言語に対応していますが、今回はライブラリが充実しているPythonで実装していきます。

サブスクリプションフィルタ使用時のアーキテクチャ図

まず、サブスクリプションフィルタ使用時の流れですが、以下のスライドにまとめました。

各項目の手順について説明します。

①アラートログをCloudWatchに連携

こちらについては前回の投稿をご参照ください。

②サブスクリプションフィルタからLambda関数の呼び出し

まず、準備としてLamda関数用のIAMロールとLambdaからSNSにアクセスするためのVPCエンドポイントを作成します。

Lamda関数用のIAMロールの作成

IAMコンソール画面の左側のリストからロール(①)をクリックし、「ロールを作成」ボタン(②)を押下します。

信頼されたエンティティを選択画面で信頼されたエンティティタイプにAWSのサービス(③)を選択、ユースケースにLambda(④)を選択し、「次へ」ボタン(⑤)を押下します。

許可を追加画面で以下のIAMポリシーを選択し、「次へ」ボタン(⑥)を押下します。

  • CloudWatchLogsReadOnlyAccess
  • AmazonSNSFullAccess
  • AWSLambdaVPCAccessExecutionRole

名前、確認、および作成画面でロール名(⑦)を入力し、「ロールを作成」ボタン(⑧)を押下します。

これでLambdaが必要なサービスにアクセスするためのIAMロールが作成できました。ただし、このままではVPC内に作成したLambdaがSNSサービスと通信できないため、引き続きVPC内にSNSのVPCエンドポイントを作成します。

SNSサービス連携用のVPCエンドポイントの作成

VPCコンソール画面の左側のリストからエンドポイント(⑨)をクリックし、「エンドポイントの作成」ボタン(⑩)を押下します。

エンドポイントの作成画面にて名前タグ(⑪)にエンドポイント名を入力します。

画面をスクロールし、サービス名にSNSを選択(⑫)、VPCにRDSが存在するVPC(⑬)を選択します。

画面をさらにスクロールし、SNSのVPCエンドポイントを作成するサブネット(⑭)およびセキュリティグループ(⑮)を選択します。

画面の最下部までスクロールし、エンドポイントの作成(⑯)ボタンを押下します。

これでSNS用のVPCエンドポイントを作成できました。続いてLambda関数を作成します。

Lamda関数の作成

Lambdaコンソール画面の左側のリストから関数(⑰)をクリックし、「関数の作成」ボタン(⑱)を押下します。

関数の作成画面で、関数名(⑲)を入力し、ランタイムにPython 3.9(⑳)を選択、アーキテクチャにx86-64(㉑)、実行ロールに既存のロール(㉒)を選択、実行ロール名に本投稿で作成したロール名(㉓)を選択、VPCを有効化(㉔)にチェックを入れ、VPC(㉕)、サブネット(㉖)、セキュリティグループ(㉗)を選択し、「関数の作成」ボタン(㉘)を押下します。

続いてサブスクリプションフィルタを作成します。作成したLambdaの画面に遷移しているので、「+トリガーを追加」(㉙)をクリックします。

トリガーの追加画面で、CloudWatch Logsを選択(㉚)し、ロググループにアラートログ(㉛)のロググループを選択、フィルターの名前(㉜)を入力し、フィルターパターンに"ORA-"(㉝)を入力後、「追加」ボタン(㉞)を押下します。

以上で、サブスクリプションフィルタの作成が完了しました。

③Lambda関数からSNSトピックの呼び出し

サブスクリプションフィルタを用いて受け取ったアラートログの情報を読み込み、SNSトピックを呼び出すプログラミングコードを作成します。

作成したLambda関数を開き、「コード」タブ(㉟)のコード欄(㊱)にプログラミングコードを記載します。記載後、「Deploy」ボタン(㊲)を押下すれば、デプロイ完了です。

なお、以下に実際のソースコードも載せておきます。

import base64
import json
import gzip
import boto3

def lambda_handler(event, context):

    try:
        # SNS通知設定
        sns_topic_arn = 'arn:aws:sns:ap-northeast-1:********:rds-email-topic'
        sns_client = boto3.client('sns')
        subject = 'RDS ORACLE ERROR'

        # CloudWatch Logの読み込み
        cloud_log_data= event['awslogs']['data']
        compressed_data= base64.b64decode(cloud_log_data)
        uncompressed_data = gzip.decompress(compressed_data)
        logdataload = json.loads(uncompressed_data)

        # JSONデータよりエラー情報の読み込み
        message = logdataload['logEvents'][0]['message']

        # SNSへの通知実行
        request = {
            'TopicArn': sns_topic_arn,
            'Subject': subject,
            'Message': message
        }
        response = sns_client.publish(**request)

    except:
        print('Error')

上記内容で、Lambda関数を作成した場合、以下のようにメールが送信されます。

メールのサブジェクトなどを変更したい場合は、上記ソースコードのsubject変数の内容を変更すれば変更可能です。また、特定のORA-エラーに対してメッセージ内容を変更するなど、Lambda関数を修正すれば様々な制御が可能になります。

特定のORAエラーの除外設定

通知させたくないORAエラーがある場合にはサブスクリプションフィルターのフィルターパターンを変更することで除外可能です。

作成したLambda関数を開き、「設定」タブ(㊳)の「トリガー」(㊴)を開き、サブスクリプションフィルターにチェックを入れ(㊵)、「編集」ボタン(㊶)を押下します。

トリガーを編集画面でフィルターパターンに除外条件を追加(㊷)します。例えばORA-04031を除外したい場合には以下のように設定します。

"ORA-" -"ORA-04031"

複数、除外したい条件があるのであれば続けて記載します。

"ORA-" -"ORA-04031" -"ORA-07445"

フィルターパターンを追加したら「保存」ボタン(㊸)を押下すれば設定完了です。

RDS for Oracleなどクラウドのマネージドデータベースサービスを監視できる製品

これまでの投稿ではCloudWatchを用いた監視実装についてご紹介してきましたが、当社で取り扱っているソーラーウィンズ社のDPA(Database Performance Analyzer)という製品で今回までにご紹介させていただいた監視の実装が可能です。以下に当社の技術情報へのリンクも記載しますのでご参考いただければ幸いです。

セッション数監視
表領域監視
アラートログ監視
DB接続監視
※DPAはOracle Database以外にも主要なデータベース製品の監視が可能です

DPAは基本的にはDBのパフォーマンスモニタリング製品ですが、監視機能も備えた製品となっております。もし、ご興味をお持ちの方がいらっしゃいましたら当社営業担当までご連絡いただければ幸いです。

パブリッククラウドのデータベース構築はコーソルにお任せを!

コーソルではパブリッククラウドでも監視可能なデータベースの監視製品やモニタリングする製品を取り揃えています。運用まで見据えてデータベース全体を設計しますのでパブリッククラウド上でのデータベース構築については是非コーソルにお問い合わせください。

クラウド設計・導入サービス

クラウドベンダーの選定からクラウド上での環境構築までお客様を支援いたします。データベースに強みを持った当社が運用まで見据えた設計を行います。

クラウド設計・構築サービス

Database Performance Analyzer (DPA)

Database Performance Analyzer (DPA)は、オンプレミスとクラウド上の多くのデータベース製品に対応したデータベース性能管理製品です。低価格であるため、非常に導入しやすいです。

Database Performance Analyzer DPA

自動SQLチューニング機能を持つToad

Database Performance Analyzer (DPA)で検出された問題SQLをチューニングする際に、Toad for Oracle / Toad for SQL Serverの SQL Optimizer機能を使用できます。

リモートDBAサービス

リモートDBAサービスはDB・運用の専門家がお客様のデータベースに対して必要な時に必要な対応を行うリモート接続型運用保守サービスです。

リモートDBAサービス

時間制コンサルティングサービス

時間制コンサルティングサービスは”必要な時に” ”必要な時間だけ”契約できる時間契約型のコンサルティングサービスです。

時間制コンサルティングサービス

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ