メインコンテンツまでスキップ

「入門 監視 ― モダンなモニタリングのためのデザインパターン」を読んだメモ

· 約19分

Memo

アンチパターン・デザインパターン

  • 監視設定の自動化
  • json などの構造化ログでメトリクスを収集すれば、その後の自動化が楽になる(場合による)
  • 高い SLA を守るためにはその分高頻度のメトリクス収集が必要
  • ユーザ視点の監視
  • 可能な限り SaaS を使う。コスト・効果ともに優れている場合が多い

アラート

  • 敏感すぎる・鈍感すぎるアラートにならないようにアラートの削除とチューニング
  • 自動復旧できないか?
  • インシデント対応の役割分担
    • 現場指揮官、起こったことの記録者、調整役、インシデント対応者
    • (実際にこれを分けるのは難しそう)
  • PagerDuty Incident Response

統計

  • パーセンタイルの理解が間違ってた…

ビジネスの監視

フロントエンド監視・アプリケーション監視

サーバ監視

メトリクス収集ツールについて

  • 紹介されていた中では collectd, telegraf あたりが良さそう

  • collectd

    • プラグインでカスタムメトリクスを収集できるが、telegraf などのほうが柔軟?
    • パフォーマンスは良さそう
  • telegraf

    • プラグインが豊富で様々なデータソースからメトリクスを収集できる
    • リソース消費が多い?
  • Diamond

    • カスタムメトリクスを収集できる
    • 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 の監視

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 の監視

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)

セキュリティ監視

etc

  • nagios
  • zabbix