🍽️ レストラン厨房で例えると超わかりやすい!
Procstat = 厨房スタッフの監視システム
レストランの厨房には、シェフ、調理助手、皿洗い担当など、様々なスタッフ(プロセス)が働いています。
Procstat
は、各スタッフが
何をしているか、疲れていないか、ちゃんと仕事をしているか
を監視する管理システムです。
「メインシェフ(Nginxプロセス)の疲労度は?」
「調理助手(Javaアプリ)は何個の鍋(メモリ)を使ってる?」
「皿洗い担当(データベース)は何枚の皿(ファイル)を扱ってる?」
こんな情報を
リアルタイムで可視化
して、問題を早期発見できます!✨
🎯 Procstatの3つの基本概念
名札(プロセス名)で探す?
制服(実行ファイル)で探す?
担当ポジション(systemd)で探す?
複数の方法で特定可能!
疲労度(CPU使用率)
使用中の道具数(メモリ)
担当している皿数(ファイル数)
作業時間(稼働時間)
あらゆる情報を記録!
リアルタイムでダッシュボード表示
異常値を検知したらアラート
過去のデータで傾向分析
経営判断に活用!
🔍 プロセス特定の4つの方法
厨房スタッフをどうやって識別するか?状況に応じて使い分けよう!
スタッフが出勤時に「出勤カード」を機械に通す方式。カードにスタッフ番号(PID)が記録されている。
📝 説明:
プロセスIDが記録されたファイルを指定。Nginx、Apache、PostgreSQLなど、多くのサービスがPIDファイルを作成する。
→ Nginxのメインプロセスを監視
特定の制服を着ている人を探す方式。「白い帽子とエプロンの人=パティシエ」のように識別。
📝 説明:
実行ファイルの正確なパスで指定。確実に特定のプログラムだけを監視できる。
→ Javaプロセス全てを監視
名札の一部で探す方式。「〇〇シェフ」という名前の人を全員見つける。同じ役職の複数スタッフを一度に監視。
📝 説明:
プロセス名の正規表現パターンで指定。複数の類似プロセスを一括監視できる。
→ Nginxワーカープロセス全てを監視
担当ポジションで探す方式。「デザート部門」「メイン料理部門」のように、チーム単位で監視。
📝 説明:
systemdサービス名で指定。Linuxの標準的なサービス管理と連携できる最もモダンな方法。
→ Nginxサービス全体を監視(推奨)
📊 収集できる主要メトリクス
スタッフの状態を数値化!各メトリクスが示す意味を理解しよう
プロセスがどれだけCPUを使っているか。0-100%で表示。
例: 80%以上が続く → スタッフ増員を検討
プロセスが使用しているメモリ容量(バイト単位)。
例: メモリリーク検知に有効
プロセスが開いているファイルディスクリプタの数。
例: データベース接続数の監視に最適
プロセスが生成しているスレッドの数。
例: スレッドプールの監視
プロセスが起動してからの経過時間。
例: 頻繁な再起動の検知
ディスク読み書きの回数とバイト数。
例: ディスクI/Oの問題特定
🔧 Procstat設定の5ステップ
EC2インスタンスにCloudWatch Agentをインストール。
sudo yum install amazon-cloudwatch-agent
または
sudo apt-get install amazon-cloudwatch-agent
/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json を作成。
監視対象プロセスとメトリクスを指定する。
EC2インスタンスに CloudWatchAgentServerPolicy をアタッチ。
これでCloudWatchにメトリクスを送信できるようになる。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
AWSコンソール → CloudWatch → メトリクス → CWAgent
procstat_* から始まるメトリクスが表示される。
ダッシュボードやアラームを設定して活用!
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"namespace": "MyApp",
"metrics_collected": {
// 🎯 Procstat設定開始
"procstat": [
{
// 方法1: systemdで特定(推奨)
"systemd_unit": "nginx.service",
"measurement": [
{
"name": "cpu_usage",
"rename": "nginx_cpu",
"unit": "Percent"
},
{
"name": "memory_rss",
"rename": "nginx_memory",
"unit": "Bytes"
},
"num_fds",
"num_threads"
]
},
{
// 方法2: PIDファイルで特定
"pid_file": "/var/run/myapp.pid",
"measurement": [
"cpu_usage",
"memory_rss",
"read_bytes",
"write_bytes"
]
},
{
// 方法3: パターンで特定(複数プロセス)
"pattern": "java.*myapp",
"measurement": [
"cpu_usage",
"memory_rss",
"num_fds"
]
}
]
}
}
}
📊 プロセス特定方法の比較
| 方法 | 使用場面 | メリット | デメリット | 推奨度 |
|---|---|---|---|---|
| systemd_unit | systemdで管理されているサービス |
✅ 最もシンプル
✅ 自動的に全プロセス監視 ✅ サービス再起動に対応 |
⚠️ systemd必須 | ⭐⭐⭐⭐⭐ |
| pid_file | PIDファイルを作成するサービス |
✅ 正確に特定できる
✅ 設定が簡単 |
⚠️ PIDファイルが必要
⚠️ 再起動時は新PID |
⭐⭐⭐⭐ |
| exe | 特定の実行ファイルを監視 |
✅ 確実に特定できる
✅ バージョン違いも区別可能 |
⚠️ フルパス必須
⚠️ 複数バージョンは別設定 |
⭐⭐⭐⭐ |
| pattern | 複数の類似プロセスを一括監視 |
✅ 柔軟な指定
✅ 複数プロセス対応 ✅ ワイルドカード使用可 |
⚠️ 予期しないプロセスも対象に
⚠️ 正規表現の知識が必要 |
⭐⭐⭐ |
💼 実践的なユースケース
Webサーバー監視
重要メトリクス:
• CPU使用率(処理負荷)
• メモリ使用量(キャッシュ)
• num_fds(接続数)
• num_threads(ワーカー数)
アラート例:
CPU > 80% が5分継続 → スケールアウト検討
Javaアプリ監視
重要メトリクス:
• memory_rss(ヒープ使用量)
• num_threads(スレッドプール)
• num_fds(DB接続数)
• cpu_time(処理時間)
アラート例:
メモリ使用量が増加傾向 → メモリリーク調査
データベース監視
重要メトリクス:
• num_fds(接続数上限確認)
• read_bytes / write_bytes(I/O)
• cpu_usage(クエリ処理負荷)
• memory_rss(バッファプール)
アラート例:
接続数が上限の80% → 接続プール見直し
バッチ処理監視
重要メトリクス:
• pid_count(実行状態確認)
• cpu_time(処理時間計測)
• read_bytes / write_bytes(進捗確認)
• memory_rss(メモリリーク検知)
アラート例:
バッチが30分以上実行 → 処理の遅延検知
systemdで管理されているサービスは、systemd_unitで指定するのが最もシンプルで確実。サービス再起動にも自動対応。
2. 必要なメトリクスだけ収集しよう:
全メトリクスを収集すると費用がかさむ。重要なメトリクスに絞って、コストと可視性のバランスを取る。
3. measurement配列でメトリクスを厳選:
デフォルトでは多くのメトリクスが収集される。measurementで必要なものだけ指定すると効率的。
4. renameで分かりやすい名前に:
procstat_cpu_usage より nginx_cpu の方が直感的。ダッシュボードが見やすくなる。
5. アラームは段階的に設定:
• Warning: CPU 70% (通知のみ)
• Critical: CPU 90% (即対応)
• Emergency: プロセス停止(自動復旧)
6. 定期的に設定を見直そう:
アプリケーションの成長に合わせて、監視すべきプロセスやメトリクスも変化する。四半期ごとにレビュー。
7. タグを活用して分類:
環境(prod/staging)、役割(web/api)などのタグを付けると、集計やフィルタリングが楽に。
• systemd_unitの綴りが間違っている →
systemctl list-units
で確認
• PIDファイルのパスが間違っている → 実際のパスを確認
• パターンが広すぎる/狭すぎる →
ps aux | grep pattern
でテスト
2. メトリクスがCloudWatchに表示されない:
• IAM権限が不足 → CloudWatchAgentServerPolicyをアタッチ
• Agent設定のJSON構文エラー →
amazon-cloudwatch-agent-ctl -a query-status
で確認
• 収集間隔が長すぎる → metrics_collection_intervalを60秒に設定
3. 費用が予想以上に高い:
• 全メトリクスを収集している → measurementで必要なものだけ指定
• 収集間隔が短すぎる → 60秒以上を推奨(デフォルトは60秒)
• 不要なプロセスを監視 → 本当に必要なプロセスだけに絞る
4. パターンで予期しないプロセスも対象に:
• 正規表現が広すぎる → より具体的なパターンに変更
• 例: "java" → "java.*myapp" のように限定する
5. プロセス再起動でメトリクスが途切れる:
• PIDが変わると追跡できない → systemd_unitやpatternを使う
• pid_fileは再起動に弱い → 可能な限りsystemd_unitを使う
🎓 まとめ
👨🍳 Procstat = 厨房スタッフ監視システム
CloudWatch Agent Procstatを使えば、
サーバー上で動くプロセス(厨房スタッフ)の状態を
リアルタイムで可視化・監視できます
systemd_unit,
pid_file, exe,
patternの4方式
CPU、メモリ、
ファイル数、I/Oなど
あらゆる情報を収集
CloudWatchで
ダッシュボード作成
異常値を即検知
🎯 推奨アプローチ:
1️⃣ まずは
systemd_unit
で主要サービスを監視
2️⃣ 必要なメトリクスだけ
measurement
で指定
3️⃣ ダッシュボードで可視化して
アラーム
設定
4️⃣ 運用しながら段階的に
最適化
Procstatでプロセスの
「今」
を把握して、
問題が大きくなる前に対処しよう!
厨房のスタッフが全員元気に働いているか、
常に見守ることが安定運用の秘訣です!🎉