🙄

システム監視とAWS

2024/05/27に公開

システム監視ってどうしたら良いのか分からないので勉強したことをまとめます。

書くこと

  • 監視ってなに?
  • なにをしたら良いの?
  • 監視で利用するAWSサービス
    • CloudWatch, SNS, Health
    • 具体的な設定方法までは書きません。別途記事書きたい。

監視とは

サーバーやアプリケーション、ネットワーク機器、データベースなどのコンポーネントから情報を計測・収集し、問題が起こった場合にいち早く知ること。

システム監視で行うこと3つ+α

① 監視ツールを導入

システムのログやメトリクスを収集する監視ツールを導入する。AWSにおける監視ツールは後述。

  • ログ: いつ、誰が、どういった操作をしたのか
  • メトリクス: いつ、なにが、どういう状態だったのか

② メトリクスを監視

サーバーのCPU使用率やメモリ使用率、その他システムのパフォーマンスのメトリクスを監視する。
他にも、サーバーがWebアプリケーションであれば各HTTPステータスコードのレスポンス数、データベースであればクエリの数や読み書き操作であるディスクIOなども監視対象。

③ アラートを通知

システムに不具合が起こったときに、状況をいち早く把握し、適切な対応を取れるようにするため、運用者にアラームを通知する。ログ監視では、エラーや特定の文字列があればアラートを通知したり、メトリクス監視であれば閾値を設け、その閾値以下・未満でアラートを通知するなど。

まとめるとこんな感じ

+α アラートの閾値を変更

アラートの閾値は後から変更することがある。アラートが頻繁にきてるのにシステムの稼働に問題がない場合、閾値を上げるなど。

監視で利用するAWSサービス

Amazon CloudWatch Metrics

AWSリソースのパフォーマンスに関するデータを収集・可視化できるサービス。現在・過去のAWSリソースの稼働状況を確認できる。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/working_with_metrics.html

Amazon CloudWatch Metrics Insights

クエリを用いて複雑な条件を指定し、グラフとして表示したいメトリクスを自分好みに作成することができる。
クラスメソッドさんのこちらの記事が詳しい↓
https://dev.classmethod.jp/articles/ga-amazon-cloudwatch-metrics-insights/

統合 CloudWatch エージェント

統合 CloudWatch エージェントをEC2にインストールすることで、EC2でデフォルトで収集されるメトリクスに加えて、メモリ使用率やディスク使用率などOSレベルで吐き出されるメトリクスを収集できる。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html

Amazon CloudWatch Alarm

監視対象から異常を検知した際にアラームを発報する機能。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#:~:text=高解像度メトリクスでアラーム,を参照してください。

アラームには以下のような種類があり、いずれかのアラームで定義した閾値を超える、もしくは閾値の範囲に戻ったときにアラームの状態が変化する。

アラームの種類

アラームの種類 内容
静的な閾値に基づくアラーム 一つのメトリクスに対する静的な閾値によるアラーム
異常検出に基づくアラーム 過去のメトリクスの分析をもとに自動で異常検出するアラーム
数式の基づくアラーム 一つ以上のメトリクスに数式を用いた閾値によるアラーム
複合アラーム 他の複数のアラームの状態を監視するアラーム

アラームの状態

アラームの状態 内容
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を組み合わせて社内のコミュニケーションツールに通知したりできる。
https://aws.amazon.com/jp/sns/

Amazon CloudWatch ダッシュボード

メトリクスを単一の画面に表示するダッシュボードを作成できる。表示するメトリクスを一度設定するだけでリソースの稼働状況を定常的に確認できる(→都度グラフ化する作業がない)。
表示の形式も豊富で、複数並べて表示することも可能↓

Amazon CloudWatch Logs

AWSクラウド上の様々なリソースやアプリケーションから生成されるログデータを収集、保存、モニタリングするためのマネージドサービス。以下の3要素から構成される。

要素 内容
ログイベント アプリケーションやAWSリソースによって記録されたログ
ログストリーム アプリケーションやAWSリソースから送信された順序によって集約された一連のログイベント
ロググループ ログストリームをグルーピングしたもの

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html

監視するログの例

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 HealthYour Account Healthがある。

種類 内容
Service Health 各AWSリージョン規模での障害情報を確認できる
Your Account Health イベントの詳細、影響を受けるAWSリソース、イベントへ対応するための推奨事項を確認できる

まとめ

監視とは何か、何をするのか、関連のAWSサービスをまとめました。どなたかの役に立てれば幸いです。

NCDCエンジニアブログ

Discussion