はじめに
Lambdaが安定稼働しているかどうかをできるだけ労力をかけずにモニタリングしたい。
ということで、Lambdaのエラー発生率がしきい値を超えた時にslack通知する仕組みを構築してみた。
通知までの流れ
以下のような流れでSlackへの通知を行う
- CloudWatchアラーム
↓ - SNS
↓ - AWS Chatbot
↓ - Slack
CloudFormation
Alarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: Alarm if Error occured more than expected.
AlarmActions:
- !Ref SlackNotificationTopic
Metrics:
- Expression: errors / invocations
Id: errorrate
ReturnData: true
- Id: errors
MetricStat:
Metric:
Namespace: AWS/Lambda
MetricName: Errors
Dimensions:
- Name: FunctionName
Value: !ImportValue FunctionName
Period: !Ref AlarmPeriod
Stat: Sum
Unit: Count
ReturnData: false
- Id: invocations
MetricStat:
Metric:
Namespace: AWS/Lambda
MetricName: Invocations
Dimensions:
- Name: FunctionName
Value: !ImportValue FunctionName
Period: !Ref AlarmPeriod
Stat: Sum
Unit: Count
ReturnData: false
ComparisonOperator: GreaterThanThreshold
Threshold: !Ref AlarmThreShold
EvaluationPeriods: !Ref AlarmEvaluationPeriods
TreatMissingData: ignore
SlackNotificationTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: SlackNotificationTopic
ChannelSetting:
Type: AWS::Chatbot::SlackChannelConfiguration
Properties:
ConfigurationName: ErrorNotification
IamRoleArn: !GetAtt ChatbotIamRole.Arn
LoggingLevel: ERROR
SlackChannelId: !Ref SlackChannelId
SlackWorkspaceId: !Ref SlackWorkspaceId
SnsTopicArns:
- !Ref SlackNotificationTopic
ChatbotIamRole:
Type: AWS::IAM::Role
Properties:
RoleName: ErrorNotification-chatbot-role
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: chatbot.amazonaws.com
Action: sts:AssumeRole
Policies:
- PolicyName: ErrorNotification-chatbot-policy
PolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- cloudwatch:Describe*
- cloudwatch:Get*
- cloudwatch:List*
Resource:
- "*"
軽く説明
CloudWatch
エラーレートという指標はデフォルトで用意されていないので、こちら側で Error / Invocation のメトリクスを設定する必要がある。
Metrics:
の項目の中で①一定期間内のinvocationの合計②一定期間内のerrorの合計 というメトリクスを生成し、② / ①の数式を実行した値をアラームの指標とする。Period:
がデータポイントの詳細度であり、例えば「60」に設定すると60秒ごとにデータが評価されるようになる。
その他の項目については公式ガイドを見るのがわかりやすい。
AWS Chatbot
※ AWS ChatbotでSlackのクライアント登録はコンソールで行う必要があるため注意。
チャネル設定の作成のみCloudFormationで行う。
おわりに
もっと簡単な構成があれば教えてください〜〜〜〜