
RDS拡張モニタリングの値をDatadogで利用する
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、虎塚です。
今回は、DatadogでRDSを監視するために拡張RDSインテグレーションを有効にする手順を紹介します。
DatadogでのRDS監視
RDSのパフォーマンスデータをDatadogで利用するには、次の3つの方法があります。
- 標準RDSインテグレーション
- 拡張RDSインテグレーション
- RDS+ネイティブDBインテグレーション
1つ目の標準RDSインテグレーションは、CloudWatchのRDSメトリックス値をDatadogで使います。このインテグレーションは、AWSインテグレーションを実行してRDSを選択することで有効にできます。
AWSインテグレーションの設定手順は、次の記事を参照ください。
2つ目の拡張RDSインテグレーションは、RDSの拡張モニタリングで取得できる値をDatadogで使います。このインテグレーションでは、RDSの拡張モニタリングでCloudWatch Logsにputされる値を、AWS LambdaでDatadogに送信することで有効にできます。
今回は、拡張RDSインテグレーションの設定手順を詳しく紹介します。Datadogの公式ドキュメントやAWSブログでの紹介記事は、次のページをご覧ください。
なお、3つ目のRDS+ネイティブDBインテグレーションについては、また別の機会に触れたいと思います。
設定手順
この手順では、主にAWS CLIを使用します。次のバージョンで動作確認しました。
- aws-cli/1.10.64 Python/2.7.10 Darwin/14.5.0 botocore/1.4.54
1. RDS拡張モニタリングの有効化
監視対象のDBインスタンスで、RDS拡張モニタリングを有効にします。その際、Granularityを15秒に設定します。
手順は、次の記事を参考にしてください。
- AWS Management Consoleで作業する(デフォルトの設定を適用する)場合
- AWS CLIで作業する、またはデフォルト以外の設定を適用する、もしくはその両方の場合
設定後、CloudWatch LogsのManagement Consoleを開き、ロググループRDSOSMetricsにDBインスタンスのリソースIDと同じログストリームが表示されていることを確認しておきましょう。
2. KMSでカスタマーマスターキーを作成
AWS KMSでカスタマーマスターキーを作成します。
まず、キーのポリシーファイルを作成します。
{
  "Version": "2012-10-17",
  "Id": "key-consolepolicy-2",
  "Statement": [
    {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::123456789012:root"},
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "Allow access for Key Administrators",
      "Effect": "Allow",
      "Principal": {"AWS": [
        "arn:aws:iam::123456789012:role/my-iam-role"
      ]},
      "Action": [
        "kms:Create*",
        "kms:Describe*",
        "kms:Enable*",
        "kms:List*",
        "kms:Put*",
        "kms:Update*",
        "kms:Revoke*",
        "kms:Disable*",
        "kms:Get*",
        "kms:Delete*",
        "kms:ScheduleKeyDeletion",
        "kms:CancelKeyDeletion"
      ],
      "Resource": "*"
    },
    {
      "Sid": "Allow use of the key",
      "Effect": "Allow",
      "Principal": {"AWS": [
        "arn:aws:iam::123456789012:role/my-iam-role"
      ]},
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "*"
    },
    {
      "Sid": "Allow attachment of persistent resources",
      "Effect": "Allow",
      "Principal": {"AWS": [
        "arn:aws:iam::123456789012:role/my-iam-role"
      ]},
      "Action": [
        "kms:CreateGrant",
        "kms:ListGrants",
        "kms:RevokeGrant"
      ],
      "Resource": "*",
      "Condition": {"Bool": {"kms:GrantIsForAWSResource": "true"}}
    }
  ]
}
キーポリシーで、キーの管理者と利用者を指定しています。キーの利用者として、この手順を実行するユーザのIAMロール (my-iam-role) を含めました。IAMユーザで実行している場合は、user/your-iam-userを指定します。
コマンドを実行して、ポリシー付きのキーを作成します。
aws kms create-key \ --policy file://lambda-datadog-key-policy.json \ --description 'for datadog'
実行結果の例を次に示します。
{
    "KeyMetadata": {
        "Origin": "AWS_KMS",
        "KeyId": "12345678-abcd-1234-abcd-1234567890ab",
        "Description": "for datadog",
        "Enabled": true,
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "CreationDate": 1477388416.36,
        "Arn": "arn:aws:kms:ap-northeast-1:123456789012:key/12345678-abcd-1234-abcd-1234567890ab",
        "AWSAccountId": "123456789012"
    }
}
最後に、作成したキーのKeyIdを指定して、エイリアス (lambda-datadog-key) を設定します。
aws kms create-alias \ --alias-name alias/lambda-datadog-key \ --target-key-id 12345678-abcd-1234-abcd-1234567890ab
3. APIキーとアプリケーションキーの暗号化
ステップ2で作成したキーを使用して、DatadogのAPIキーとAPPキーを暗号化します。
aws kms encrypt --key-id alias/lambda-datadog-key \
  --plaintext '{"api_key":"<datadog_api_key>", "app_key":"<datadog_app_key>"}'
DatadogのAPIキーとAPPキーは、Datadogの左メニューから、[Integrations]→[APIs]を開くと表示されます。各キーがまだ存在しない場合は、新規に作成します。
実行結果の例を次に示します。
{
    "KeyId": "arn:aws:kms:ap-northeast-1:123456789012:key/12345678-abcd-1234-abcd-1234567890ab",
    "CiphertextBlob": "AQECAHgT...VDpGS7I="
}
ステップ5でCiphertextBlobの値を使うので、控えておきます。
4. Lambda用のIAMロールの作成
ステップ5で作成するAWS Lambdaのために、AWSサービスロール (lambda-datadog-post-execution) を作成します。
まず、IAMロールの信頼ポリシーファイルを作成します。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
次に、コマンドを実行して、上の信頼ポリシーを付与したIAMロールを作成します。
aws iam create-role \ --role-name lambda-datadog-post-execution\ --assume-role-policy-document file://lambda-service-role-policy.json
実行結果の例を示します。
{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "lambda.amazonaws.com"
                    }
                }
            ]
        },
        "RoleId": "ABCDEFGABCDEFGABCDEFG",
        "CreateDate": "2016-10-25T10:38:14.135Z",
        "RoleName": "lambda-datadog-post-execution",
        "Path": "/",
        "Arn": "arn:aws:iam::123456789012:role/lambda-datadog-post-execution"
    }
}
最後に、作成したIAMロールに権限ポリシーを付与します。
ポリシーファイルを作成します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "<ENCRYPTION_KEY ARN>"
            ]
        }
    ]
}
コマンドを実行して、IAMロールにインラインポリシーとして上のポリシーつけます。
aws iam put-role-policy \ --role-name lambda-datadog-post-execution \ --policy-name lambda-datadog-policy \ --policy-document file://lambda-datadog-policy.json
5. Lambdaファンクションの作成
Lambdaファンクションを作成します。AWS LambdaのManagement Consoleで、[Create a Lambda function]ボタンをクリックします。
Select blueprint画面で、datadog-process-rds-metricsのブループリントを選択します。
Configure triggers画面で、次のように入力します。
- Log Group: RDSOSMetrics
- Filter Name: 任意 (myLambdaTrigger)
- Enable trigger: オン
[Next]ボタンをクリックします。Configure function画面で、次のように入力します。
- Name: 任意 (lambda-datadog-post-function)
- Runtime: Python 2.7
コードエリア内の
- Handler: lambda_function.lambda_handler
- Role: Choose an existing role
- Existing role: ステップ4で作成したIAMロール (lambda-datadog-post-execution)
- VPC: NoVPC
[Next]ボタンをクリックします。Review画面で設定を確認し、[Create function]ボタンをクリックします。
以上で完了です。
Datadogのダッシュボードで確認
拡張RDSインテグレーションを有効にすると、Datadogで値がどのように見えるかを確認しましょう。
Datadogの左メニューから、[Dashboards]→[Dashboard List]を開き、Integration Dashboard一覧から「AWS RDS (Enhanced Metrics)」 を選択します。
初期状態のダッシュボードは、次のような画面です。


ダッシュボードでは、好きなメトリックスを選択して、好きな場所にグラフを表示できます。
おわりに
RDSの拡張モニタリングで取得できる詳細なデータは、そのままだとCloudWatch Logsに溜まっていくだけです。今回のようにDatadogを使って可視化することで、活用の場面を広げることができそうですね。
それでは、また。














