【AWS】EFSのクライアント接続数をCloudWatch Alarmで監視する
記事の目次
はじめに
EFSを利用している環境で、EFSにクライアントが接続されているかを監視したいという要件がありました。
今回の環境では、EFSへのクライアント接続数は基本的に1台です。
そのため、以下の要件でCloudWatch Alarmを作成しました。
- EFSクライアント接続数を監視
- 基本の接続数は1
- 一時的に2になる可能性あり
- 接続数が0になった場合にALARM
- ALARM時のみSNS通知
- OK状態への復旧通知は不要
- CloudFormationでAlarmを構築
今回は、CloudFormationでEFSのクライアント接続数監視用CloudWatch Alarmを作成する方法を紹介します。
EFSのクライアント接続数を確認する
まず、監視対象のEFSを確認します。
EFSコンソールからファイルシステムを確認できます。
CloudWatchでEFSのメトリクスを監視する場合、AWS/EFS 名前空間の ClientConnections メトリクスを利用できます。
ClientConnections は、ファイルシステムへのクライアント接続数を表すメトリクスです。
標準クライアントを使用する場合、マウントされたEC2インスタンスごとに1接続として扱われます。ClientConnections は FileSystemId ディメンションを使用し、利用可能な統計は Sum です。
今回のように「接続数が0になったことを検知したい」という要件では、ClientConnections をCloudWatch Alarmの監視対象としました。
CloudFormationのパラメータ
今回は、デプロイ時に以下の2つをパラメータとして指定できるようにしました。
- EFS File System ID
- SNS Topic ARN
CloudFormationのデプロイ画面では、以下のように入力します。
EFS File System IDは、EFSコンソールから確認できます。
CloudFormationテンプレート
以下が今回作成したCloudFormationテンプレートです。
AWSTemplateFormatVersion: '2010-09-09'
Description: >
CloudFormation template for monitoring EFS client connections
with a CloudWatch Alarm.
Parameters:
# 監視対象のEFSファイルシステムID
# パラメータ指定がない場合は、以下のEFS IDをデフォルト値として使用する
EfsFileSystemId:
Type: String
Default: fs-xxxxxxxxxxxxxxxxx
Description: EFS File System ID
# CloudWatch Alarm通知先のSNS Topic ARN
# パラメータ指定がない場合は、以下のARNをデフォルト値として使用する
AlarmTopicArn:
Type: String
Default: arn:aws:sns:ap-northeast-1:xxxxxxxxxxxx:xxxxx-sns
Description: SNS Topic ARN for CloudWatch Alarm notifications
Resources:
# EFSクライアント接続数監視用CloudWatch Alarm
#
# EFSへのクライアント接続数が0となった場合に
# ALARM状態とする
EfsClientConnectionsAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
# EFSクライアント接続数が1未満となった場合にALARM
AlarmDescription: >
EFS client connections are less than 1.
# EFSのClientConnectionsメトリクスを監視
Namespace: AWS/EFS
MetricName: ClientConnections
# 監視対象のEFSファイルシステム
Dimensions:
- Name: FileSystemId
Value: !Ref EfsFileSystemId
# 1分間のクライアント接続数を合計して評価
Statistic: Sum
Period: 60
# 1回の評価でALARM判定
EvaluationPeriods: 1
# クライアント接続数が1未満(0)となった場合にALARM
Threshold: 1
ComparisonOperator: LessThanThreshold
# メトリクス欠損時は異常として扱う
TreatMissingData: breaching
# ALARM状態への遷移時のみSNS通知
# OK状態への遷移時は通知しない
AlarmActions:
- !Ref AlarmTopicArnClientConnectionsの監視条件
今回のポイントは、以下の設定です。
Threshold: 1
ComparisonOperator: LessThanThresholdLessThanThreshold は、監視値がしきい値を下回った場合に条件成立となります。
そのため、今回の設定では以下のような判定になります。
| ClientConnections | Alarm状態 |
|---|---|
| 0 | ALARM |
| 1 | OK |
| 2 | OK |
今回の環境では、基本的な接続数は1ですが、一時的に2台となる可能性があります。
そのため、LessThanOrEqualToThreshold ではなく、LessThanThreshold を指定しました。
TreatMissingDataについて
今回は以下を設定しています。
TreatMissingData: breachingTreatMissingData は、CloudWatch Alarmの評価時にメトリクスデータが欠損していた場合の扱いを指定する設定です。
breaching を指定すると、欠損データを異常値として扱います。CloudWatchでは、breaching、notBreaching、ignore、missing の4種類の扱いを指定できます。
今回は、EFSの接続状態を監視する目的であり、メトリクス欠損も異常として扱いたいと考えたため、breaching を指定しました。
※ TreatMissingData の適切な値は監視対象や運用要件によって変わるため、環境に応じて検討が必要です。
OK通知は設定しない
今回、AlarmにはSNS通知を設定しています。
AlarmActions:
- !Ref AlarmTopicArn一方で、OKActions は設定していません。
CloudWatch Alarmでは、AlarmActions はALARM状態への遷移時、OKActions はOK状態への遷移時に実行されます。
今回は、
EFSの接続数が0になった場合に通知したい
という要件でした。
そのため、
接続数 1 → 0
↓
ALARM
↓
SNS通知という動作にしています。
復旧時に通知が不要だったため、OKActions は設定していません。
障害発生時だけ通知したい場合は、OK通知を設定しないという選択肢もあります。
CloudWatch Alarmの作成結果
CloudFormationをデプロイすると、CloudWatch Alarmが作成されます。
今回は、ClientConnections が1以上のため、Alarm状態は OK となっています。
CloudWatch Alarmのグラフ上でも、ClientConnections の値を確認できます。
まとめ
今回は、EFSのクライアント接続数をCloudWatch Alarmで監視しました。
今回のポイントは以下です。
AWS/EFSのClientConnectionsメトリクスを利用FileSystemIdで監視対象のEFSを指定ClientConnections < 1でALARMStatisticはSum- 監視間隔は1分
- ALARM時のみSNS通知
- OK通知は設定しない
- CloudFormationでAlarmをコード管理
EFSへの接続が失われた場合に検知したい場合、ClientConnections メトリクスを利用することで比較的シンプルに監視を構築できます。
今回はCloudFormationで作成しましたが、Alarmの設定値をコードとして管理できるため、環境構築時の設定漏れ防止にもつながると感じました。
- タグ:
- CloudWatch
- EFS