この記事は公開されてから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でカスタマーマスターキーを作成します。
まず、キーのポリシーファイルを作成します。
lambda-datadog-key-policy.json
{
"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ロールの信頼ポリシーファイルを作成します。
lambda-service-role-policy.json
{
"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ロールに権限ポリシーを付与します。
ポリシーファイルを作成します。
lambda-datadog-policy.json
{
"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を使って可視化することで、活用の場面を広げることができそうですね。
それでは、また。