RDS Datadogログ監視

RDSのログ監視をDatadogで行うための設定。 公開されている情報は、リソースの使用率等を監視するものが多い。 ここではログ監視のみに限定して記載する。

参考サイト

手順

RDSのログをCloudWatchLogsに出力する。

RDSのログのエクスポート設定 https://aws.amazon.com/jp/blogs/database/monitor-amazon-rds-for-mysql-and-mariadb-logs-with-amazon-cloudwatch/

Log export concepts
The new log export feature supports the following log types for MySQL and MariaDB:

- Error log – contains diagnostic messages generated by the database engine, along with startup and shutdown times.
- General query log – contains a record of all SQL statements received from clients, and also client connect and disconnect times.
- Slow query log – contains a record of SQL statements that took longer to execute than a set amount of time and that examined more than a defined number of rows. Both thresholds are configurable.
- Audit log – provided by using the MariaDB Audit Plugin, this log records database activity on the server for audit purposes. Refer to the Aurora MySQL documentation for more information on advanced auditing in Aurora.

LambdaFunctionの作成

Lambda用のロール作成

AWSLambdaBasicExecutionRole-YYYYYY
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "arn:aws:logs:ap-northeast-1:XXXXXX:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:ap-northeast-1:XXXXXX:log-group:/aws/lambda/lambda-datadog:*"
            ]
        }
    ]
}

連携用の権限:必要なものを追加する。 "cloudfront:GetDistributionConfig", "cloudfront:ListDistributions", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeLoadBalancerAttributes", "lambda:AddPermission", "lambda:GetPolicy", "lambda:RemovePermission", "redshift:DescribeClusters", "redshift:DescribeLoggingStatus", "s3:GetBucketLogging", "s3:GetBucketLocation", "s3:GetBucketNotification", "s3:ListAllMyBuckets", "s3:PutBucketNotification", "logs:PutSubscriptionFilter", "logs:DeleteSubscriptionFilter", "logs:DescribeSubscriptionFilters"

Lambda作成

1.Lambdaのコンソールから[関数の作成]をクリック。 2.[一から作成]を選択。 3.入力項目を指定し、[関数の作成]をクリックする。 - 関数名 - ランタイム:Python3.7 - アクセス権限:[既存ロールを使用する]から、事前に作成したLambdaロールを指定。

Lambdaの設定

1.Lambdaのソースは以下から入手する。 - https://github.com/DataDog/datadog-serverless-functions/blob/master/aws/logs_monitoring/lambda_function.py

2.ソース中の以下の行を、実環境の情報で更新する。 DD_API_KEY = "YOUR_DATADOG_API_KEY"

【APIKEYの情報】 https://docs.datadoghq.com/ja/integrations/amazon_web_services/?tab=allpermissions#create-a-new-lambda-function
[Integrations]-[APIs]-[API Keys]から対象のキーを選択する。(キーの部分にマウスオーバーすると表示される)

3.環境変数 - DD_TAGS:Datadogに連携されたときに追加するタグ - INCLUDE_AT_MATCH:絞り込みの正規表現

4.その他設定 - EUサイトを使用している場合、DD_SITE の値を datadoghq.eu に変更する。(使用しているポートが異なる) - [基本設定]欄 - メモリ:1GBくらい - タイムアウト:120秒 - [同時実行数]欄 - 同時実行の予約:100 - [レイヤの追加] - [レイヤーバージョン ARN を提供]を指定 - arn:aws:lambda:ap-northeast-1:464622532012:layer:Datadog-Python37:5

5.[保存]をクリックする。

6.Datadog設定 [Integrations]-[Integrations]でAWSを選択。 [Collect Logs]タブで対象となるAWSアカウントを選択。[Enter a Lambda ARN]に作成したLambda関数のARNを入力する。(AWSのコンソールで、作成したLambdaの詳細画面で右上に表示されている)

7.Lambdaトリガーの設定 作成したLambdaの詳細画面で[+トリガーを追加]をクリックする。 トリガーの設定画面:このLambdaを実行するきっかけとなるAWSサービスを指定する。 - トリガー:CloudWatchLogs - ロググループ:対象のRDSがログを出力していれば、それが表示される。複数指定する場合は、1つずつ指定する。 - フィルターの名前:識別のための名前を指定する。 - フィルターパターン:連携するデータをトリガーでフィルターする場合は、条件を記載する。
[参考]フィルタ設定 https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html