サーバーとデータベースを24時間監視するときに設定する項目
公開日 2026-08-13 · 更新日 2026-08-13 · 最終検証日 2026-08-13
結論
死活監視・性能監視・ログ監視の3種類を分けて設計し、ホスト/データベース/アプリケーションの各層に指標を割り当てます。そのうえで、利用者が実際に通る経路そのものを外部から監視する外形監視を必ず加えます。内部指標がすべて正常でも利用者側で失敗している事象は起こり得るため、「顧客が先に気づく」状態を防げるのは外形監視だけです。しきい値は単一の固定値ではなく、継続時間と変化率を条件に組み立てます。
この文書の適用条件
| 対象製品 | Amazon RDS / Amazon Aurora / SQL Server / MySQL / Amazon CloudWatch |
|---|---|
| 確認バージョン | AWS CLI v2 / Amazon CloudWatch の公開API、MySQL 5.7以降、SQL Server 2012以降(2026-08-13 時点の仕様に基づく) |
| 適用環境 | AWS、Azure、オンプレミス |
| 必要権限 | CloudWatchアラーム作成は `cloudwatch:PutMetricAlarm`。MySQLの状態確認は `PROCESS` 権限相当、SQL Serverは `VIEW SERVER STATE` |
| 実行影響 | SQLは参照のみ。`put-metric-alarm` はCloudWatchアラームリソースを新規作成する |
| 再起動 | 不要 |
| 最終検証日 | 2026-08-13 |
そのまま実行できるコマンド
- 対象
- Amazon CloudWatch(AWS CLI v2)
- 権限
- cloudwatch:PutMetricAlarm
- 変更作業
- あり(CloudWatchアラームを作成/上書きする)
- Production実行
- 可能。ただし通知先と対応手順を決めてから作成すること
# 対象: Amazon CloudWatch(AWS CLI v2)
# 権限: cloudwatch:PutMetricAlarm
# 変更作業: あり(同名アラームが存在する場合は上書きされる)
# Production 実行: 可能。通知先とランブックを用意してから作成すること
#
# 通知先の SNS トピック ARN は環境変数で渡す(この文書には実 ARN を記載しない)
# export SNS_TOPIC_ARN="<自環境の SNS トピック ARN>"
aws cloudwatch put-metric-alarm \
--alarm-name "rds-db-sample-instance-cpu-sustained" \
--alarm-description "CPU使用率が継続して高い状態を検知する" \
--namespace AWS/RDS \
--metric-name CPUUtilization \
--dimensions Name=DBInstanceIdentifier,Value=db-sample-instance \
--statistic Average \
--period 300 \
--evaluation-periods 3 \
--datapoints-to-alarm 3 \
--threshold 80 \
--comparison-operator GreaterThanThreshold \
--treat-missing-data missing \
--alarm-actions "$SNS_TOPIC_ARN" \
--ok-actions "$SNS_TOPIC_ARN"`--threshold 80` はあくまで書式を示すための値であり、推奨値ではありません。しきい値は自環境の平常時分布(p95・p99)から決めてください。ポイントは `--evaluation-periods` と `--datapoints-to-alarm` で「継続していること」を条件にしている点です。単発のスパイクで鳴らすとアラート疲れの原因になります。`--treat-missing-data` の指定は、データ欠測時の挙動を明示的に決めるために必須です。
- 対象
- MySQL 5.7 以降 / Amazon Aurora MySQL
- 権限
- グローバルな状態変数の参照権限(PROCESS 権限相当)
- 変更作業
- なし(参照のみ)
- Production実行
- 可能
-- 対象: MySQL 5.7 以降 / Amazon Aurora MySQL
-- 権限: グローバル状態変数の参照権限(PROCESS 権限相当)
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
-- 現在の接続数
SHOW STATUS LIKE 'Threads_connected';
-- 起動以降の最大同時接続数(ピークの把握に使う)
SHOW STATUS LIKE 'Max_used_connections';
-- 接続上限
SHOW VARIABLES LIKE 'max_connections';
-- 上限に達して拒否された接続の累計
SHOW STATUS LIKE 'Aborted_connects';`Threads_connected` を `max_connections` と比較して使用率を出します。`Max_used_connections` は起動以降のピークなので、瞬間値では捉えられない山を確認できます。監視では瞬間値だけでなく使用率の傾向を見てください。
- 対象
- SQL Server 2012 以降 / Amazon RDS for SQL Server
- 権限
- VIEW SERVER STATE
- 変更作業
- なし(参照のみ)
- Production実行
- 可能
-- 対象: SQL Server 2012 以降 / Amazon RDS for SQL Server
-- 権限: VIEW SERVER STATE
-- 変更作業: なし(参照のみ)
-- Production 実行: 可能
SELECT
(SELECT COUNT(*) FROM sys.dm_exec_sessions
WHERE is_user_process = 1) AS user_sessions,
(SELECT COUNT(*) FROM sys.dm_exec_requests
WHERE session_id > 50) AS active_requests,
(SELECT COUNT(*) FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0) AS blocked_requests,
@@MAX_CONNECTIONS AS max_connections_configured;`@@MAX_CONNECTIONS` は構成上の上限を返します。`sp_configure` の `user connections` が 0(既定)の場合は製品既定の上限値が返るため、実際の制約はメモリとワーカースレッドになります。監視で重要なのは上限との比率よりも `blocked_requests` の推移で、ここが増え始めたらブロッキングチェーンの調査に進みます。
- 対象
- Amazon CloudWatch(AWS CLI v2)
- 権限
- cloudwatch:DescribeAlarms
- 変更作業
- なし(参照のみ)
- Production実行
- 可能
# 対象: Amazon CloudWatch(AWS CLI v2)
# 権限: cloudwatch:DescribeAlarms
# 変更作業: なし(参照のみ)
# Production 実行: 可能
aws cloudwatch describe-alarms \
--query "MetricAlarms[].{Name:AlarmName,Metric:MetricName,\
Threshold:Threshold,Periods:EvaluationPeriods,Missing:TreatMissingData,\
State:StateValue,Actions:AlarmActions[0],Enabled:ActionsEnabled}" \
--output table`Enabled` が false のアラーム、`Actions` が空のアラーム、`State` が長期間 INSUFFICIENT_DATA のアラームは、実質的に機能していません。監視設定の棚卸しでは、まずこの3つを洗い出します。
結果の読み方
| 列 | 意味 | 確認するポイント |
|---|---|---|
| Threads_connected / user_sessions | 現在の接続数 | 上限に対する比率を見る。上限直前で張り付くならプール設定かリーク |
| Max_used_connections | 起動以降の最大同時接続数 | 瞬間値では見えないピーク。上限に近い値なら余裕が無い |
| max_connections / max_connections_configured | 接続上限の設定値 | アプリケーション側プールの合計最大値がこれを超えていないか |
| Aborted_connects | 確立に失敗した接続の累計 | 増加が続くなら認証失敗か上限到達。ログ監視と突き合わせる |
| active_requests | 実行中のリクエスト数 | 接続数が多くてもactiveが少なければアイドル接続。対処が変わる |
| blocked_requests | ブロックされているリクエスト数 | ゼロから増え始めた時点が調査開始点。継続するならブロッキングチェーンを追う |
| AlarmName / State | アラーム名と現在の状態 | 長期間 INSUFFICIENT_DATA のものは監視できていない |
| TreatMissingData | 欠測時の扱い | 未指定のままだと欠測時の挙動が意図と異なる場合がある。明示的に決める |
| ActionsEnabled / AlarmActions | 通知の有効状態と通知先 | falseまたは通知先が空なら、鳴っても誰にも届かない |
こういう状況で使います
- 障害を顧客からの連絡で知ることがある
- アラートが多すぎて、重要なものが埋もれている
- 夜間と休日に誰が対応するかが決まっていない
- アラートは届くが、受け取った人が何をすればよいか分からない
- 監視は入れているが、何を監視しているのか一覧がない
- CPU使用率のような分かりやすい指標だけを見ていて、ロック待ちやレプリケーション遅延を見ていない
考えられる原因(可能性の高い順)
01
3種類の監視が区別されていない
死活監視(プロセスやエンドポイントが応答するか)、性能監視(応答はするが遅くなっていないか)、ログ監視(エラーが出ていないか)は目的も検知できる事象も違います。どれか1つだけでは、他の2種類が検知する障害を見逃します。
02
内部指標しか見ていない
CPU・メモリ・接続数がすべて正常でも、DNS、ロードバランサ、証明書、アプリケーションの例外、外部連携先の障害によって利用者からは使えない状態になり得ます。内部指標をいくら増やしてもこの経路は監視できません。
03
しきい値が単一の固定値で設計されている
「CPU 80%を超えたら通知」のような単発条件は、平常時の山でも鳴ります。鳴りすぎるアラートは無視されるようになり、結果として本物のアラートも見逃されます。継続時間(何回連続で超えたか)と変化率(普段との差)を条件に組み込む必要があります。
04
アラートに対応手順が紐づいていない
通知を受け取った人が何を確認し、どこまでを自分で対応し、どの条件でエスカレーションするかが決まっていないと、通知は「気づき」で止まり対応につながりません。
05
夜間・休日の体制が設計されていない
24時間監視は「監視ツールが24時間動いている」ことではなく「24時間、対応できる人に届く」ことです。オンコールの当番、連絡がつかない場合の次の連絡先、対応者の負荷分散が決まっていないと、深夜の通知は翌朝まで放置されます。
06
監視設定が棚卸しされていない
通知先が退職者のアドレスのまま、アクションが無効のまま、対象リソースが削除済みのまま、といった設定は「あるのに機能しない監視」になります。設定した時点では正しくても、時間とともに劣化します。
確認手順
- 1
監視対象の一覧を作る
参照のみホスト・データベース・アプリケーションの各層で、現在何を監視しているかを一覧化します。抜けを議論する前に現状を可視化します。
- 2
外形監視の有無を確認する
参照のみ利用者が実際に通る経路(DNS→LB→アプリ→DB)を外部から確認する監視があるかを確認します。無ければ最優先の追加項目です。
- 3
アラームの棚卸しを行う
参照のみ`describe-alarms` で、無効化されているもの、通知先が空のもの、長期間 INSUFFICIENT_DATA のものを洗い出します。
- 4
過去のアラート発報数を数える
参照のみ直近1か月に何件鳴り、そのうち何件が対応を要したかを数えます。対応不要の比率が高いなら、しきい値設計が原因です。
- 5
過去の障害が何で検知されたかを振り返る
参照のみ直近の障害について、監視が先に検知したか、利用者からの連絡が先だったかを確認します。後者があれば監視の穴が特定できます。
- 6
エスカレーション経路を書き出す
参照のみ一次対応者、二次対応者、連絡がつかない場合の代替、判断が必要な場合の責任者を明文化します。
- 7
アラームを追加する
低不足している項目について `put-metric-alarm` でアラームを作成します。作成前に通知先とランブックを用意します。
対応方法
すぐに実施できる低リスクの対応
外形監視を追加する
低利用者が使うエンドポイントに対して、外部から定期的にリクエストを送り、ステータスコードと応答時間を記録します。「顧客が先に気づく」状態を防ぐ唯一の手段です。
通知が届かないアラームを直す
低ActionsEnabledがfalse、通知先が空、宛先が無効なアドレスになっているアラームを修正します。監視項目を増やす前にこちらが先です。
事前検討が必要な変更
層ごとに監視項目を割り当てる
低ホスト層はCPU・メモリ・スワップ・ディスク使用率・ディスク待ち時間・ネットワーク。データベース層は接続数と上限、実行中セッション数、ロック待ちとブロッキングチェーン、レプリケーション遅延、トランザクションログ/binlogの使用量、スロークエリ件数、バッファキャッシュヒット率、ログイン失敗。アプリケーション層はHTTPステータスの比率、応答時間のパーセンタイル、キュー滞留数です。
しきい値に継続時間と変化率を組み込む
低単発の超過ではなく「n回連続で超過」を条件にし、平常時分布からの乖離で判定する項目を併用します。CloudWatchでは `--evaluation-periods` と `--datapoints-to-alarm` が該当します。
アラートごとにランブックを用意する
参照のみ各アラートについて「何を確認するか」「どこまで対応してよいか」「どの条件でエスカレーションするか」を書きます。ランブックの無いアラートは作らない、という運用ルールにするのが有効です。
エスカレーション基準を明文化する
参照のみ一次対応の範囲、二次対応へ渡す条件、責任者へ上げる条件を定義します。判断に迷う時間が対応の遅れになります。
オンコール体制を設計する
参照のみ当番の交代周期、連絡がつかない場合の次の宛先、深夜対応後の代休など、人が持続できる形にします。持続しない体制は数か月で形骸化します。
ログ監視を追加する
低データベースのエラーログ、認証失敗、OOM Killer、ディスク関連のカーネルメッセージなど、メトリクスには現れない事象を検知します。
再起動・サービス影響を伴う変更
監視基盤を統合する
高複数ツールに分散した監視を集約すると、通知経路とダッシュボードが変わります。移行期間中は旧新の並行運用が必要で、切り替え時の監視断が最大のリスクです。
自動復旧アクションを導入する
専門家レビュー必須アラームから自動的に再起動やフェイルオーバーを行う仕組みは、誤検知時に自ら障害を起こします。導入するなら適用条件を厳密に限定し、手動停止の手段を必ず用意してください。
!注意事項
- この文書ではSLA、MTTR、検知までの所要時間といった数値目標を示しません。これらは対象システムの要件と体制によって決まるものであり、一般値を当てはめても意味を持ちません。自社の要件から定義してください。
- `--threshold 80` などのしきい値は書式を示すための例であり、推奨値ではありません。平常時の分布(p95・p99)を測ってから決めてください。
- 監視項目を増やすほど良いわけではありません。対応手順の無いアラートは、鳴った回数だけ現場の判断コストを増やし、結果として全体の反応を鈍らせます。
- `put-metric-alarm` は同名のアラームが存在する場合、確認なしに上書きします。既存アラーム名との重複に注意してください。
- 内部メトリクスがすべて正常でも、利用者から見て使えない状態は発生します。外形監視を代替できる内部指標はありません。
- 自動復旧アクションは誤検知時に自らサービスを止めます。導入前に、誤検知が起きた場合の影響と停止手段を必ず設計してください。
バージョン・環境による違い
これで解決しない場合に確認すること
通知が実際に届くかを試験する
テスト通知を送り、深夜帯を含めて受信者に届くかを確認します。設定上は正しくても、受信側のフィルタで落ちていることがあります。
監視対象から漏れたリソースがないか確認する
新規に作成されたインスタンスが監視設定に含まれているかを定期的に確認します。作成時にアラームを付ける自動化が有効です。
過去の障害を監視項目に反映する
発生した障害それぞれについて「この監視項目があれば先に気づけたか」を検証し、不足していた項目を追加します。
アラートの発報件数を定期的に振り返る
対応不要のアラートが多いなら、しきい値か監視項目そのものを見直します。件数の推移自体を指標にします。
ランブックの内容が現状と合っているか確認する
構成変更後もランブックが更新されていないと、対応手順が実態と食い違います。定期的な更新の担当を決めてください。
この文書の根拠と限界
一般的な技術説明
Amazon CloudWatch のアラーム仕様、MySQL の状態変数、SQL Server の動的管理ビュー(sys.dm_exec_sessions、sys.dm_exec_requests)の公開仕様と、監視設計の一般的な考え方に基づきます。SLA・MTTR・検知時間などの数値目標や、特定環境の実測値は含みません。しきい値はご自身の環境の平常時分布から決定してください。
よくある質問
24時間監視では何を設定すればよいですか?
死活監視・性能監視・ログ監視の3種類を分けて設計し、ホスト層(CPU・メモリ・スワップ・ディスク使用率・ディスク待ち時間・ネットワーク)、データベース層(接続数と上限、実行中セッション、ロック待ちとブロッキング、レプリケーション遅延、ログ/binlog使用量、スロークエリ、バッファヒット率、ログイン失敗)、アプリケーション層(HTTPステータス比率、応答時間パーセンタイル、キュー滞留)に項目を割り当てます。さらに利用者経路の外形監視を必ず加えます。
顧客が先に障害に気づいてしまう状況はどう防げますか?
内部メトリクスをいくら増やしても防げません。利用者が実際に通る経路(DNS、ロードバランサ、証明書、アプリケーション、データベース)を外部から定期的に叩く外形監視を追加してください。内部の指標がすべて正常でも、この経路のどこかで利用者から見て失敗している状態は発生します。
アラートが多すぎて見なくなっています。どうすればよいですか?
しきい値の設計を見直してください。単発の超過ではなく継続時間(何回連続で超えたか)を条件にし、平常時の分布からの乖離で判定する項目を併用します。加えて、対応手順(ランブック)の無いアラートは作らないというルールを設けると、鳴る理由の説明できないアラートが減ります。
しきい値は何%に設定すればよいですか?
一般値は提示できません。平常時に何%で推移しているかは環境ごとに全く違います。まず平常時のp95・p99を測り、そこからの乖離としきい値超過の継続時間で条件を組み立ててください。例示したコマンドの `--threshold 80` は書式を示すための値です。
夜間と休日の体制はどう作ればよいですか?
オンコール当番の交代周期、一次対応の範囲、連絡がつかない場合の次の宛先、エスカレーション基準、深夜対応後の代休までを決めて明文化してください。24時間監視はツールが動いていることではなく、対応できる人に届くことです。持続可能な負荷になっているかを定期的に見直してください。
Productionで実行できますか?
接続数を確認するSQLと `describe-alarms` は参照のみで本番環境でも実行できます。`put-metric-alarm` はアラームを新規作成し、同名のものがあれば上書きするため、通知先と対応手順を用意したうえで実行してください。
この文書がカバーする質問
- 顧客が先に障害を発見する状況を防ぐ方法
- データベース監視で見るべき指標が知りたい
- アラートが多すぎて対応できない
- 夜間・休日の障害対応体制をどう作るか
リスク表示の意味
- 参照のみデータと設定を変更しません。
- 低影響は限定的ですが、権限と負荷の確認が必要です。
- 中性能・ロック・コストに影響する可能性があります。
- 高障害・データ損失・復旧作業が発生する可能性があります。
- 専門家レビュー必須本番適用前に別途レビューが必須です。
GIIPの対応範囲
監視項目の一覧を作ること自体は設計作業で終わります。24時間監視が難しいのは、深夜と休日に人が起きていること、そして届いたアラートに対して判断ができることの2点です。GIIPではAWSとAzure上の複数データベースおよび約30のWebサービスについて、一次切り分け(メトリクスの突き合わせ、直近の変更履歴の確認、影響範囲の特定)をAIエージェントが担当し、再起動やフェイルオーバーのように取り返しのつかない判断は人間の専門家が行う分担で運用しています。人が24時間張り付く前提を置かずに、対応の初動だけは常時動く状態を作るという考え方です。
執筆・技術検証
GIIP プロダクション運用チーム
大規模Webサービス、SQL Server、Oracle、AWS、Azureの設計・移行・運用に約30年従事。x12largeクラスのAWS RDS for SQL Server環境12セット、約12万テーブルのOracle環境、約3TBのTiDBからAurora MySQLへの移行を経験。現在も複数のクラウドデータベースと約30のWebサービスを、AIエージェントと人間の専門家が継続的に監視・運用しています。
AWS RDSで大きいインスタンス1台と小さいインスタンス複数台に分ける場合の違い
RDSのサイジングで「大きい1台」と「小さい複数台」を比べるときの技術的な差分と、決める前に測るべきCloudWatch指標を整理した文書です。
infrastructureAWS EBSのIOPSと物理ディスクのIOPSは何が違うのか
EBSのIOPSがなぜ物理ディスクのIOPSと直接比較できないのかを、上限の適用箇所(ボリューム/インスタンス)と測定方法から整理した文書です。
sql-serverRDS for SQL Serverでトランザクションログの使用率を確認する方法
ログ使用率を DBCC SQLPERF(LOGSPACE) と sys.dm_db_log_space_usage で確認し、解放されない理由を log_reuse_wait_desc で切り分ける参照専用手順です。
aurora-mysqlAurora MySQLでbinlogの保持時間を確認・設定する方法
binlogの保持時間は `mysql.rds_show_configuration` で確認し、`mysql.rds_set_configuration` に時間単位で設定します。binlog_formatはクラスターパラメータで、変更には再起動が必要です。
関連サービス
24時間監視の設計と体制を相談する
同じ確認を複数の環境で継続する必要がある場合は、運用体制ごと相談できます。
24時間監視の設計と体制を相談する