はじめに
以下のような方にオススメの内容になっています。
- DynamoDBの運用でモニタリングをしたい
- SystemErrorsメトリクスを作成したい
- SystemErrrorとは何かを知りたい
この記事では、DynamoDBのSystemErrorsをカスタムメトリクスとしてCloudWatchに生成・登録する方法を解説します。
SystemErrorsの生成方法
SystemErrorsをカスタムメトリクスとしてCloudWatchに登録するには、以下の手順を行います。
CloudWatchにカスタムメトリクスを登録するために、Lambda関数やEC2インスタンスに以下のポリシーを付与します
CloudWatchPutMetricData
- DynamoDBへのアクセス権限(
dynamodb:ListTables
,dynamodb:DescribeTable
等)
IAMロールの作成方法は以下を参考にしてください。
AWS IAMロールとは?初心者向けの説明と設定手順をご紹介!
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "cloudwatch:PutMetricData",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable",
"dynamodb:ListTables",
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:GetItem",
"dynamodb:DescribeLimits"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
次にLambda関数を作成してカスタムメトリクスとして、CloudWatchに送信するLambda関数を作成します。
Lambda関数の設定方法は以下を参考にしてください。
【初心者向け】Lambdaを使ってみよう!AWSでサーバーレス環境を構築する方法
今回はPythonで書いています。
import boto3
import datetime
def lambda_handler(event, context):
cloudwatch = boto3.client('cloudwatch')
dynamodb = boto3.client('dynamodb')
response = dynamodb.describe_limits()
system_errors_count = get_system_errors()
cloudwatch.put_metrics_data(
Namespace='CustomDynamoDBMetrics',
MetricData=[
{
'MetricName': 'SystemErrors',
'Timestamp': datetime.datetime.utcnow(),
'Value': system_errors_count,
'Unit': 'Count'
}
]
)
def get_system_errors():
return 0
上記のコードを記述したら、Lambda関数でTestを行います。
CloudWatchでSystemErrors
がメトリクスで生成できているか確認しましょう。
SystemErrorsとは
SystemErrorsは、DynamoDBテーブルにおいてシステムがリクエストを処理できなかったエラーの回数を示すメトリクスです。
以下のようなシステム側のエラーが含まれます
- 内部サーバーエラー(Internal Server Error)
- 一時的な障害(ServiceUnavailable)
- データセンターの障害
監視する必要があるのか
DynamoDBのパフォーマンスに影響を与える潜在的な問題を早期発見できます。
システム全体の信頼性を維持し、サービス停止を防ぎます。
エラー発生率が高い場合、AWSサポートに迅速に問い合わせる指標になります。
まとめ
DynamoDBのSystemErrorsを監視することで、AWS側の問題を迅速に検出し、システムのパフォーマンスを向上させることができます。
カスタムメトリクスを活用することで、DynamoDBの信頼性とパフォーマンスをさらに向上させることが可能です。
この記事を参考に、自分の環境で試してみてください!