CloudWatch Logsの異常検出の異常ディテクターが存在する状態で、AWS CLIやboto3で異常ディテクターの作成処理をしたときの動作を確認する

CloudWatch Logsの異常ディテクターが存在するとき、さらに作成しようとした際の動作を確認してみました。結果としては作成できませんでした。
2024.01.18

CloudWatch Logsの異常検出を設定するとき、一括設定しようとすると、どうやらレートリミットに抵触する可能性があります。

CloudWatch Logs quotasでは言及されていませんが、CloudWatch service quotasには、anomaly detectionの記載があります。

10 TPS per Region. The maximum number of operation requests you can make per second without being throttled.

CloudWatch service quotas - Amazon CloudWatch

ただし、上記は「CloudWatch anomaly detection」のことであり、「Log anomaly detection」ではないと考えられます。(一方でそこまで異なる値にはならないと思います。感想ですが。)

そのため、1秒あたりのリクエスト数を考慮してスクリプトを作成してみようと思いましたが、「すでにあるDetectorを再び作成したらどうなるんだろう?」と気になったので、試してみました。

おすすめの方

  • CloudWatch Logsの異常検出をAWS CLIで作成したい方
  • CloudWatch Logsの異常検出をboto3で作成したい方
  • すでにあるDetectorを再び作成したらどうなるか知りたい方

異常ディテクターの一覧を取得する

いくつかの異常ディテクターが存在します。

$ aws logs list-log-anomaly-detectors \
    --query 'anomalyDetectors[*].detectorName'

[
    "lambda-2-log-anomaly-detector-sample",
    "/aws-glue/jobs/output",
    "/aws-glue/jobs/error",
    "/aws-glue/crawlers",
    "lambda-1-log-anomaly-detector-sample"
]

今回は、「lambda-1-log-anomaly-detector-sample」に対して、作成処理を試してみます。

すでにある異常ディテクターを作成してみる

AWS CLI

aws logs create-log-anomaly-detector \
    --log-group-arn-list "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/lambda-log-test" \
    --detector-name "lambda-1-log-anomaly-detector-sample" \
    --evaluation-frequency FIFTEEN_MIN \
    --anomaly-visibility-time 21

実行すると、次のエラーが発生しました。ひとつのロググループに対して、ひとつの異常ディテクターのみ作成できるようです。

An error occurred (LimitExceededException) when calling the CreateLogAnomalyDetector operation (reached max retries: 2): Found active AnomalyDetector for input logGroupArn.

boto3

app.py

import boto3

logs = boto3.client("logs")

LOG_GROUP_ARN = (
    "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/lambda/lambda-log-test"
)


def main():
    logs.create_log_anomaly_detector(
        logGroupArnList=[LOG_GROUP_ARN],
        detectorName="lambda-1-log-anomaly-detector-sample",
        evaluationFrequency="FIFTEEN_MIN",
        anomalyVisibilityTime=21,
    )


if __name__ == "__main__":
    main()

実行すると同様に次のエラーが発生しました。

botocore.errorfactory.LimitExceededException: An error occurred (LimitExceededException) when calling the CreateLogAnomalyDetector operation: Found active AnomalyDetector for input logGroupArn.

さいごに

異常ディテクター名を変更してもダメでした。CloudWatch Logsの異常ディテクターをCLIまたはboto3で作成する場合は、下記どちらかの対応をすると良いですね。

  • すでに存在するかどうかを調べて、存在しない場合のみ異常ディテクターを作成する
  • 問答無用で異常ディテクターを作成して、LimitExceededExceptionが発生したら無視する

参考