亀のコツコツクラウドインフラ

2024年12月31日

SystemErrorsのメトリクス生成してカスタムメトリクスを作成!【DynamoDB】

はじめに

以下のような方にオススメの内容になっています。

  • 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の信頼性とパフォーマンスをさらに向上させることが可能です。

この記事を参考に、自分の環境で試してみてください!

この記事を書いた人

コツコツ亀

コツコツ亀

Webエンジニアとして活動中
AWSを使用してWebアプリケーションを作ったり、サーバーを構築したりしています。

関連記事

新着記事