ども、 cloudpack の かっぱ (@inokara) です。
はじめに
pidstat というツールを教えて頂いた上にその結果を Graphite に送るスクリプトも見つけたのでそれをちょっと改変して各プロセス毎の CPU 使用率を Graphite に送るスクリプトを作ってみたメモ。
参考
- pidstat(1) – Linux man page
- 原因調査用Linuxコマンド
- プロセス単位のリソース使用量を調べる (pidstat)
- 10 pidstat Examples to Debug Performance Issues of Linux Process
- report per-process IO stats with pidstat or sar
pidstat とスクリプト
pidstat
- 各プロセス毎のリソース状態を出力するツールで sysstat パッケージに含まれる
pidstat
だけを実行すると実行時点の各プロセス毎の CPU 使用率を出力する-d
オプションで各プロセス毎の I/O を出力-r
オプションでメモリ
などなど…詳細は man pidstat
CPU 使用率を送るスクリプト
#!/bin/bash hostname=`hostname -s` carbon_host=${your_graphite_host} carbon_port=2003 # 以下のように出力されるので... # Time PID %usr %system %guest %CPU CPU Command # 1424534381 1822 0.00 1.00 0.00 1.00 0 pidstat # 1424534381 3480 0.00 1.00 0.00 1.00 0 bash # 1424534381 19933 1.00 0.00 0.00 1.00 0 sensu-client # 以下のように graphite に送る pidstat -h -u 1 | grep --line-buffered -v '^$' | grep --line-buffered -v '^#' | grep --line-buffered -v '^Linux' | awk --assign=hostname=${hostname} '{ printf "servers.%s.pidstat.cpu.%s.usr %s %snservers.%s.pidstat.cpu.%s.system %s %snservers.%s.pidstat.cpu.%s.guest %s %sn", hostname, $8, $3, $1, hostname, $8, $4, $1, hostname, $8, $5, $1 ; fflush(); }' | nc ${carbon_host} ${carbon_port}
暫く放置
以下は手元の検証環境で sensu-server + Graphite もろもろ全部入りなサーバーの状態。
各プロセス毎の CPU 使用率が一目瞭然。
むむ…可視化は楽しいけど…
pidstat は初めて使ったけど便利だと思う。今まで使ってなくて本当に悔しいし恥ずかしいので寝ます。
おやすみなさい。
元記事はこちらです。
「pidstat の結果を Graphite に送る bash スクリプト」