そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

CentOS6.4にdaemontools入れてみた&GrowthForecast入れて空き容量監視してみた

ガキ使を流し見しつつサーバいじってたら新年になってた。

ここ数年は「流行りの音楽」という概念自体に感心が無くなってしまったせいか、紅白みてても全くピンと来ないのなー。


daemontools

世代がら同名の仮想ディスクドライブツールがちらつくけど、こっちはUnixのサービス管理ツール。

ざっくり言えば起動スクリプトを登録すると自動で起動してくれて、プロセスが落ちたら再起動してくれるツール。


インストール

検索するとOSによる色々な入れ方とかディレクトリの変更とか色々出てきて若干戸惑ったのだけど、シンプルに以下の手順でなんとか動いている。

とりあえずroot権限になり…

# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
# tar xvzf daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
# patch -p1 < daemontools-0.76.errno.patch
# package/install

パッチ入れるの注意。


サービス管理用のディレクトリを用意する

# mkdir /service

後述するが、上記ディレクトリ内にサービスごとのディレクトリを作り、起動スクリプトを入れることにより、daemontoolsによるサービス管理を行うことができる。


起動と登録

下記のコマンドで起動できる。

# csh -cf '/usr/local/bin/svscanboot &'


問題なさそうなら、ブート時に起動できるように上記コマンドを/etc/rc.localに追記する。


サイトによってログがどうのこうのリンクがどうのこうのといったことが書かれているが、ひとまずここまでの手順で動きはしそう。


GrowthForecast

データをhttpで投げると保存&グラフ化してくれる便利ツール。

最近だとFluentdと連携してゴニョゴニョって所で使うのが定番らしいけど、残念ながら僕はそっちは詳しくない・・・


例えば僕のいるソシャゲ業界なんかだと業務で「イベントの参加UUの推移を監視したい」だとか「新アイテムの売上を監視したい」みたいな状況はよくある。

スクリプト書いて数値を出すだけなら大した手間ではないのだが、それを運営側がわかりやすい形にグラフ化するのは意外と面倒くさかったりする。


そんな時にぴったりなのがこのツールで、予めサーバを立ち上げておいた上でcronで定期的に実行するようにした一行コマンドなりスクリプトなりからサーバのapiに集計値をpostすると、時系列で綺麗なグラフにしてくれる。

というか公式が日本語なんで、うだうだ言うよりはそっち見た方が早い。

GrowthForecast - Lightning fast Graphing / Visualization

インストール

公式記載の依存パッケージを入れる。

# groupinstall "Development Tools"
# install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel


おなじみcpanmで一発インストール。

# cpanm -n GrowthForecast


起動とdaemontoolsで管理

データ保存用に適当なディレクトリ(例として/home/user/growforecastとする)を作り、以下のコマンドで起動できる。

$ growthforecast.pl --data-dir /home/user/growthforecast


さて、daemontoolsで起動できるように、上記コマンドを記載したスクリプトを作る。

$ vi /home/user/growthforecast/run

以下を記載

#!/bin/bash
growthforecast.pl  --data-dir /home/user/growthforecast/

起動権限を追加し、daemontoolsで管理できるようにシンボリックリンクを作る

$ chmod +x /home/user/growthforecast/run
$ ln -s /home/user/growthforecast /service/growthforecast


ちなみにデフォルトではサーバはポート5125で起動しているので、まずはhttp://[サーバのドメイン]:5125にアクセスして表示されることを確認。

問題なさそうなら下記のコマンドでデータを投げてみよう。

$ curl -F number=[数値] http://localhost:5125/api/[サービス名]/[グラフ名]/[要素名]

レスポンスのerrorが0なら成功。

再度ページにアクセスすると、新たなページリンクが追加されているので、たどっていくとグラフが表示される。

数分おいてnumberの値を変えて投げてみると、感じがつかめると思う。

空き容量監視をやってみる

GrowthForecastは必要があって入れたというよりは面白そうだから入れてみたって感じなので、折角だからサーバの空き容量監視をしてみることにした。

サーバの空き容量はdf -kコマンドで確認できる。

僕のサーバの場合はNASの共有領域として使うために、/home以下を別のHDDに割り当てている。

MicroServer N54L にハードディスクを増設したよー - そんな今日この頃でして、、、

そこで/home以下だけを取り扱うことにする。


正規表現を駆使して空き領域の割合の前にある空き容量の値を取り出す。

$ df -k|grep '/home'|sed 's/^.* \([0-9]\+\) \+[0-9]\+%.*$/\1/'

上記で正しく値が取り出せたなら、諸々のタイトルを決め、numberに値が入るようなpostをするコマンドを組み立てる。

$ curl -F number=`df -k /home|grep '/home'|sed 's/^.* \([0-9]\+\) \+[0-9]\+%.*$/\1/'` http://localhost:5125/api/server_status/storage/home

上記コマンドで投げた値が正しく受け取られることが確認できたら、crontabに登録。

$ crontab -e

↓を追記する

*/5 * * * * curl -F number=`df -k|grep '/home'|sed 's/^.* \([0-9]\+\) \+[0-9]\+\%.*$/\1/'` http://localhost:5125/api/server_status/storage/home >/dev/null 2>&1

ひとまず5分間隔で。流石にちょっと短すぎる気はする。

crontabでの記述の場合、\%という風にエスケープが必要なことに注意。


追記:容量だと変化が緩慢で面白くないので、無闇にロードアベレージもとってみた

とりあえずuptimeの三項目15分平均だけ投げてみた。

*/15 * * * * curl -F number=`uptime|sed "s/.* \([0-9.]\+$\)/\1/"|sed "s/[ .]//g"` http://localhost:5125/api/server_status/load_average/15min >/dev/null 2>&1

残念ながら少数がサポートされないので、100倍の値による表示。



監視用途だったらそれ用のツールを導入した方が良いんだけれど、完全に趣味のサーバなんでそんなにちゃんと管理しないでも良いし、自分好みで細かくいじれるのが楽しい。

postでデータ入力ができるということは、(多少信頼性は犠牲になるけど)ファイルやDBに比べて気楽に入力できるし、ローカルネットワーク上ならどこからでも入力可能なので、非常に汎用性が高いことに気付かされる。

何かしら遊べそう。