システム監視とAWS
システム監視ってどうしたら良いのか分からないので勉強したことをまとめます。
書くこと
- 監視ってなに?
- なにをしたら良いの?
- 監視で利用するAWSサービス
- CloudWatch, SNS, Health
- 具体的な設定方法までは書きません。別途記事書きたい。
監視とは
サーバーやアプリケーション、ネットワーク機器、データベースなどのコンポーネントから情報を計測・収集し、問題が起こった場合にいち早く知ること。
システム監視で行うこと3つ+α
① 監視ツールを導入
システムのログやメトリクスを収集する監視ツールを導入する。AWSにおける監視ツールは後述。
- ログ: いつ、誰が、どういった操作をしたのか
- メトリクス: いつ、なにが、どういう状態だったのか
② メトリクスを監視
サーバーのCPU使用率やメモリ使用率、その他システムのパフォーマンスのメトリクスを監視する。
他にも、サーバーがWebアプリケーションであれば各HTTPステータスコードのレスポンス数、データベースであればクエリの数や読み書き操作であるディスクIOなども監視対象。
③ アラートを通知
システムに不具合が起こったときに、状況をいち早く把握し、適切な対応を取れるようにするため、運用者にアラームを通知する。ログ監視では、エラーや特定の文字列があればアラートを通知したり、メトリクス監視であれば閾値を設け、その閾値以下・未満でアラートを通知するなど。
まとめるとこんな感じ
+α アラートの閾値を変更
アラートの閾値は後から変更することがある。アラートが頻繁にきてるのにシステムの稼働に問題がない場合、閾値を上げるなど。
監視で利用するAWSサービス
Amazon CloudWatch Metrics
AWSリソースのパフォーマンスに関するデータを収集・可視化できるサービス。現在・過去のAWSリソースの稼働状況を確認できる。
Amazon CloudWatch Metrics Insights
クエリを用いて複雑な条件を指定し、グラフとして表示したいメトリクスを自分好みに作成することができる。
クラスメソッドさんのこちらの記事が詳しい↓
統合 CloudWatch エージェント
統合 CloudWatch エージェントをEC2にインストールすることで、EC2でデフォルトで収集されるメトリクスに加えて、メモリ使用率やディスク使用率などOSレベルで吐き出されるメトリクスを収集できる。
Amazon CloudWatch Alarm
監視対象から異常を検知した際にアラームを発報する機能。
アラームには以下のような種類があり、いずれかのアラームで定義した閾値を超える、もしくは閾値の範囲に戻ったときにアラームの状態が変化する。
アラームの種類
アラームの種類 | 内容 |
---|---|
静的な閾値に基づくアラーム | 一つのメトリクスに対する静的な閾値によるアラーム |
異常検出に基づくアラーム | 過去のメトリクスの分析をもとに自動で異常検出するアラーム |
数式の基づくアラーム | 一つ以上のメトリクスに数式を用いた閾値によるアラーム |
複合アラーム | 他の複数のアラームの状態を監視するアラーム |
アラームの状態
アラームの状態 | 内容 |
---|---|
OK | 閾値の範囲内 |
ALARM | 閾値の範囲外 |
INSUFFICIENT_DATA | アラームの状態を判断するのに十分なデータが無いなど(参考) |
また、アラームの状態を適切に変更するためにメトリクスを評価する期間、タイミングを設定できる。
メトリクスを評価する要素
要素 | 内容 |
---|---|
期間 | メトリクスを評価する期間。評価された時点を「データポイント」という |
Evaluation Periods (評価期間) | アラームの評価の対象となる直近のデータポイント数 |
Datapoints to Alarm (アラームを実行するデータポイント) | アラームの状態を決定するのに必要なデータポイント数 |
例)
期間を3分、Evaluation Periodsを10、Datapoints to Alarmを2に設定
→ 3(分)×10=30(分) が 評価対象期間 で、その間に閾値を2回超えたらアラーム状態にする。
Amazon SNS
メッセージの送受信を仲介するマネージドサービス。CloudWatch Alarmを使用した監視においては、発信元にCloudWatch Alarmを指定し、受信先にEメールアドレスを指定したり、AWS ChatbotやLambdaを組み合わせて社内のコミュニケーションツールに通知したりできる。
Amazon CloudWatch ダッシュボード
メトリクスを単一の画面に表示するダッシュボードを作成できる。表示するメトリクスを一度設定するだけでリソースの稼働状況を定常的に確認できる(→都度グラフ化する作業がない)。
表示の形式も豊富で、複数並べて表示することも可能↓
Amazon CloudWatch Logs
AWSクラウド上の様々なリソースやアプリケーションから生成されるログデータを収集、保存、モニタリングするためのマネージドサービス。以下の3要素から構成される。
要素 | 内容 |
---|---|
ログイベント | アプリケーションやAWSリソースによって記録されたログ |
ログストリーム | アプリケーションやAWSリソースから送信された順序によって集約された一連のログイベント |
ロググループ | ログストリームをグルーピングしたもの |
監視するログの例
AWSアカウントに関するログ
ログの種類 | 内容 |
---|---|
操作ログ | AWSアカウント上の操作履歴 |
認証ログ | いつ、どの認証情報(IAM)でAWSアカウントにアクセスしたのか |
アクセスログ | どの認証情報(IAM)でAWSアカウントにアクセスしたのか |
設定変更ログ | AWSアカウント上で設定変更された内容 |
エラーログ | AWSアカウント上で発生したAPIエラー |
AWSリソースに関するログ
ログの種類 | 内容 |
---|---|
操作ログ | AWSリソース上の操作履歴 |
認証ログ | いつ、誰が、AWSリソースにログインしたのか |
アクセスログ | AWSリソースへの接続履歴 |
イベントログ | AWSリソースで発生した事象や動作 |
通信ログ | 端末とサーバー間、AWSリソース間の通信内容 |
設定変更ログ | AWSリソースで設定変更された内容 |
エラーログ | AWSリソース上で発生したエラー |
Amazon CloudWatch Logs メトリクスフィルター
CloudWatch Logsが受け取るログをフィルタリングし、数値としてCloudWatch Metricsへ送信する機能。アプリケーションのログのエラーや文字列をカウントして可視化・アラートの設定ができる。
Amazon CloudWatch Logs サブスクリプションフィルター
CloudWatch Logsが受け取るログをフィルタする機能で、フィルタしたログをCloudWatch Metricsではなく、LambdaやKinesisへ送信できる。
エラーログを受け取ってから通知するまで
- アプリ → CloudWatch Logs → Amazon CloudWatch Logs メトリクスフィルター → CloudWatch Metrics → Amazon CloudWatch Alarm → SNS → 通知
- アプリ → CloudWatch Logs → Amazon CloudWatch Logs サブスクリプションフィルター → Lambda → SNS → 通知
Amazon Health
AWSサービスの障害情報や個別のAWSリソースに影響があるイベントを確認できる。Amazon Healthには大きく分けてService HealthとYour Account Healthがある。
種類 | 内容 |
---|---|
Service Health | 各AWSリージョン規模での障害情報を確認できる |
Your Account Health | イベントの詳細、影響を受けるAWSリソース、イベントへ対応するための推奨事項を確認できる |
まとめ
監視とは何か、何をするのか、関連のAWSサービスをまとめました。どなたかの役に立てれば幸いです。
NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion