「入門 監視 ― モダンなモニタリングのためのデザインパターン」を読んだメモ
· 約19分
Memo
アンチパターン・デザインパターン
- 監視設定の自動化
- json などの構造化ログでメトリクスを収集すれば、その後の自動化が楽になる(場合による)
- 高い SLA を守るためにはその分高頻度のメトリクス収集が必要
- ユーザ視点の監視
- 可能な限り SaaS を使う。コスト・効果ともに優れている場合が多い
アラート
- 敏感すぎる・鈍感すぎるアラートにならないようにアラートの削除とチューニング
- 自動復旧できないか?
- インシデント対応の役割分担
- 現場指揮官、起こったことの記録者、調整役、インシデント対応者
- (実際にこれを分けるのは難しそう)
- PagerDuty Incident Response
統計
- パーセンタイルの理解が間違ってた…
ビジネスの監視
- 16 Startup Metrics
- 16 More Startup Metrics
- ビジネスKPI (key performance indicator)
- 担当プロダクトの KPI は何?
フロントエンド監視・アプリケーション監視
- ページロード時間とビジネスの関係について
- Navigation timing API のタイムライン
- https://sentry.io/welcome/
- アプリケーションのヘルスチェック
- StatsD
- 分散トレーシング
- マイクロサービスアーキテクチャの監視をするための方法論とツールのこと?
- マイクロサービス: 機能を小さなサービスに分割して API で連携する
- どこのリクエストから始まってどこで終わるかなどがわかりにくい
- リクエストにタグをつけてトレースする
- https://github.com/openzipkin/zipkin
- 分散トレーシングシステムのZipkinを使ってみた話
- マイクロサービスアーキテクチャの監視をするための方法論とツールのこと?
サーバ監視
メトリクス収集ツールについて
-
紹介されていた中では collectd, telegraf あたりが良さそう
-
- プラグインでカスタムメトリクスを収集できるが、telegraf などのほうが柔軟?
- パフォーマンスは良さそう
-
- プラグインが豊富で様々なデータソースからメトリクスを収集できる
- リソース消費が多い?
-
- カスタムメトリクスを収集できる
- Python 製でパフォーマンスが若干劣る?
- あまりメンテナンスされていなさそう
CPU
- top などで確認できる
- 内部的には
/proc/stat
からのデータ取得
cat /proc/stat
cpu 33413 59 13366 2018394 1458 2262 687 0 0 0
cpu0 1973 2 801 126259 81 91 66 0 0 0
cpu1 2106 3 711 126291 104 68 37 0 0 0
cpu2 2189 5 806 126152 102 65 29 0 0 0
cpu3 1875 1 791 126367 134 69 35 0 0 0
cpu4 2452 22 930 126026 69 69 29 0 0 0
cpu5 2173 0 773 126261 66 60 26 0 0 0
cpu6 2029 4 669 126380 67 89 59 0 0 0
cpu7 2005 0 780 126315 114 76 57 0 0 0
cpu8 1655 1 1575 124644 93 1199 160 0 0 0
cpu9 2204 0 1125 125957 70 70 28 0 0 0
cpu10 1919 4 705 126452 62 65 28 0 0 0
cpu11 2151 0 847 126234 103 70 26 0 0 0
cpu12 1979 3 674 126485 97 66 26 0 0 0
cpu13 2756 1 684 125664 119 65 25 0 0 0
cpu14 2115 3 697 126376 73 64 24 0 0 0
cpu15 1826 1 790 126523 96 70 25 0 0 0
intr 2023571 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 3805 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45306 60782 0 0 0 0 0 0 0 0 0 45 16562 587 133165 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 5771496
btime 1713664320
processes 16869
procs_running 2
procs_blocked 0
softirq 1061126 57397 66610 143 41034 44699 0 7992 508718 45 334488
Memory
- free などで確認
- buff は FS のメタデータのキャッシュ
- cache はデータ本体のキャッシュ
- shared は多分共有ライブラリなど
% free -h
total used free shared buff/cache available
Mem: 31Gi 3.6Gi 24Gi 106Mi 3.0Gi 27Gi
Swap: 4.0Gi 0B 4.0Gi
- 内部的には
/proc/meminfo
からのデータ取得
cat /proc/meminfo
MemTotal: 32676436 kB
MemFree: 26243212 kB
MemAvailable: 28892088 kB
Buffers: 3212 kB
Cached: 3081776 kB
SwapCached: 0 kB
Active: 4194420 kB
Inactive: 1483412 kB
Active(anon): 2706408 kB
Inactive(anon): 0 kB
Active(file): 1488012 kB
Inactive(file): 1483412 kB
Unevictable: 3136 kB
Mlocked: 48 kB
SwapTotal: 4194300 kB
SwapFree: 4194300 kB
Zswap: 0 kB
Zswapped: 0 kB
Dirty: 272 kB
Writeback: 0 kB
AnonPages: 2585280 kB
Mapped: 960064 kB
Shmem: 113560 kB
KReclaimable: 85464 kB
Slab: 231872 kB
SReclaimable: 85464 kB
SUnreclaim: 146408 kB
KernelStack: 18544 kB
PageTables: 44560 kB
SecPageTables: 0 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 20532516 kB
Committed_AS: 12818284 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 170084 kB
VmallocChunk: 0 kB
Percpu: 12352 kB
HardwareCorrupted: 0 kB
AnonHugePages: 712704 kB
ShmemHugePages: 0 kB
ShmemPmdMapped: 0 kB
FileHugePages: 374784 kB
FilePmdMapped: 18432 kB
CmaTotal: 0 kB
CmaFree: 0 kB
Unaccepted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 0 kB
DirectMap4k: 959096 kB
DirectMap2M: 8284160 kB
DirectMap1G: 25165824 kB
- OOMKiller のログを監視するのも大切
Network の監視
- ifconfig や ip コマンドで確認
- /proc/net/dev からのデータ取得
Disk の監視
- iostat や df などで確認
iostat
Linux 6.8.6-arch1-1 (strix) 04/21/2024 _x86_64_ (16 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.71 0.00 0.74 0.05 0.00 97.50
Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscd
sda 27.38 1172.47 534.96 197.67 2230709 1017793 376084
zram0 0.03 0.62 0.00 0.00 1180 4 0
- /proc/diskstats からのデータ取得
cat /proc/diskstats
8 0 sda 18834 2018 4461434 26986 34351 23700 2080266 16927 0 24827 46864 228 0 774072 471 4649 2478
8 1 sda1 129 1053 8442 50 12 0 10 1 0 64 52 0 0 0 0 0 0
8 2 sda2 18599 965 4448448 26912 34338 23700 2080256 16925 0 24787 44309 228 0 774072 471 0 0
254 0 zram0 54 0 2360 0 1 0 8 0 0 10 0 0 0 0 0 0 0
8 16 sdb 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Load average の監視
-
CPU の処理待ちをしているプロセスの指標
-
uptime などで確認
uptime
11:27:17 up 35 min, 1 user, load average: 0.54, 0.57, 0.48
- /proc/loadavg からのデータ取得
cat /proc/loadavg
0.63 0.58 0.49 2/1168 22514
SSL 証明書の監視
- 有効期限の監視と通知
Web サーバの監視
- レスポンスのステータスコードを監視する
DB の監視
- スレッド数(コネクション数)の監視
- cf. 実践ハイパフォーマンス MySQL
MQ の監視
- queue の長さの監視 => ConsumerLag?
- consumption ratio
- consume のスピード
cache
- hit/miss ratio
DNS
- qps の監視
- BIND の場合はメトリクスを収集するためのオプションがある
- collectd のプラグインと組み合わせて監視できる
NTP
- kerberos の認証などで問題になりうる
- ntpstat
Logging
- 収集
- syslog
- 保存
- SaaS を使用?
- 分析
- 目的、用途に応じて使い分ける
- Splunk
- grep などのコマンドラインツール
- ELK スタック (Elasticsearch, Logstash, Kibana)
- 目的、用途に応じて使い分ける
セキュリティ監視
- cf. The Practice of Network Security Monitoring
- auditd
- sudo のログなどを収集できる
- audisp-remote プラグインでリモートにログを送信できるので改ざんされにくい
- syslog に依存せずにログ収集できるので syslog を攻撃者に停止されたりしてもログが残る
- rkhunter
- rootkit の検出
- https://www.kali.org/tools/rkhunter/
etc
- nagios
- zabbix