ども、 cloudpackかっぱ (@inokara) です。

はじめに

pidstat というツールを教えて頂いた上にその結果を Graphite に送るスクリプトも見つけたのでそれをちょっと改変して各プロセス毎の CPU 使用率を Graphite に送るスクリプトを作ってみたメモ。

参考

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 もろもろ全部入りなサーバーの状態。
pidstat の結果を Graphite に送る bash スクリプト: 動作確認

各プロセス毎の CPU 使用率が一目瞭然。

むむ…可視化は楽しいけど…

pidstat は初めて使ったけど便利だと思う。今まで使ってなくて本当に悔しいし恥ずかしいので寝ます。
おやすみなさい。

元記事はこちらです。
pidstat の結果を Graphite に送る bash スクリプト