カテゴリ: server

運用に携わっていると、何かの数値をグラフ化しておきたいなんてことが良くあります。

グラフ化しておくメリットは

  • 視覚化することで変化を見やすくする
  • 異常な数値があればすぐに気がつくことが出来る
  • 複数の値の関係を見つけやすい
  • 非エンジニアでも直感的に解りやすい
  • エライ人が喜ぶので評価される(かもしれない)

辺りでしょうか。最後のやつは実際どうかは解りませんが、上4つだけでもかなりのメリットがあります。

ただ、結構描画系ツールの選定やら準備やらが面倒だったりします。が、最近はではkazeburoさんが作ったGrowthForecastHRForecastがあって、すっごく簡単にグラフ生成ができるのでかなりお手軽になりました。今年のYAPCでも良く名前が出ていました。

Perl言語圏だったらおそらく聞いたことはあるんじゃないかな?と思うんですが、先月別の言語圏の方達と話をしていたら知らないという人が居たので、紹介エントリ書こうかなと思った次第です。

GrowthForecast

27

Cronなどで定期的にデータを投げてあげれば上記のようなグラフを良い感じに表示してくれます。複合グラフも簡単に作れるのがとても素敵。特徴としては、

  • 定期的にAPI叩くことで簡単にデータを登録できる
  • RRDToolを使ったカッコイイグラフ表示
  • 過去にさかのぼってデータを投入出来ない
  • 扱えるのは整数のみ

上のグラフは適当に投入したPVのデータとUUのデータを一つにグラフに表示している例。実際はPVとか取るならUUは後述のHRForecastの方が向いています。あくまでグラフとして見る物を投入するのが良くて、特定の箇所のイベント数とか、エラー数、たとえばログインユーザーと非ログインユーザーの比率など、数値として持っておくことが必ずしも重要で無いものが向いているような気がします。

データの投入は本当に簡単でcurl辺りで

$curl -F number=10 http://hf.example.com/api/[大カテゴリ]/[中カテゴリ]/[項目名]

インストール

githubに詳しく書いてあったのでそちらを参照。ちなみに、自分でsakuraVPSに入れたときはパッケージ群はcairo-devel入れたぐらいだった気がします。

cpanm無ければ入れておくとインストールが楽になります。perlbrewなんかでシステムperlと分けておくのが最近の主流ですけど、その辺りはperlbrewあたりで探して貰うと出てくると思います。(書くと長い・・・)

HRForecast

00

HRForecastは過去にさかのぼってデータ登録出来たり、CSVダウンロードやグラフの埋め込みが出来たりします。

  • 定期的にAPI叩くことで簡単にデータを登録できる
  • javascriptを使った動的なグラフ表示
  • 過去にさかのぼってデータを投入出来る
  • データダウンロードやグラフの埋め込みが出来る
  • データの丸めが発生する
  • 扱えるのは整数のみ

前述のGrowthForecastとの違いは遡ってデータを投入できることと、丸めが発生(もっとも細かい粒度で1時間でまとめられる)することです。またグラフ自体もRRDtoolとJavascriptとの違いがあります。こちらはある程度数値が指標となるようなデータPVとかUUとかを取っておくのに向いています。丸めは発生しますが、むしろdailyで取っておきたい事が多いでしょう。

インストール

自分のやった手順を書いておきます。mysqlが入っている前提なので無ければ入れてください。

$git clone git://github.com/kazeburo/HRForecast.git
$cd HRForecast
$cpanm --installdeps .

データベースの作成と権限の追加をしておきます

CREATE DATABASE hrforecast;
GRANT  CREATE, ALTER, DELETE, INSERT, UPDATE, SELECT \\
         ON hrforecast.* TO 'www'\@'localhost' IDENTIFIED BY xxxxx;

付属するschema.sqlを実行

$mysql -D hrforecast -u www < schema.sql

後は設定をいじるだけ

$vi config.pl
{
    dsn => 'dbi:mysql:hrforecast;hostname=127.0.0.1',
    username => 'www',
    password => 'xxxxxx',
    port => '5127',
    host => '127.0.0.1',
    front_proxy => [],
    allow_from => [],
};

リバースプロキシを使う場合はfront_proxyにipを設定します。自分はdaemontoolsでプロセスを起動して、nginxをフロントにしてます。

どちらもPSGIアプリとして書かれていて、起動するためのHTTPサーバまで付属しているので簡単に試すことができると思います。ドキュメントは起動後アクセスしたページにDocsがついているので(これスバラシイと思いました)、それを見れば簡単に使えると思います。

とにかく便利なのでオススメです。

このエントリーをはてなブックマークに追加

仕事でサーバの移転をしていて、Apache2.0系のmod_auth_mysqlが入ったサーバーから、Apache2.2系にセットアップし直したときに、ApacheのAPIの違いから上手く入らずちょっとハマッタのでメモしておきます。

そもそもAPIの違いでApache2.0系からApache2.2系への移行が上手くいかないんですけど、既に同じ問題に直面したことが有る方がいらっしゃって、Apache2 - MySQL認証 / うにっくすさんの覚え書きに手順がありました。

ながれとしては、mod_auth_mysqlを公式サイトからダウンロード、上のサイトで紹介されているpatchをあてて、インストールとなります。

公式サイト
  http://sourceforge.net/projects/modauthmysql/

ダウンロードリンク
  http://sourceforge.net/projects/modauthmysql/files/modauthmysql/3.0.0/mod_auth_mysql-3.0.0.tar.gz/download 

ダウンロードしたファイルとpatchを同フォルダにおいて
$ tar zxvf mod_auth_mysql-3.0.0.tar.gz
$ cd mod_auth_mysql-3.0.0
$ patch -p0 < ../mod_auth_mysql.c.patch
$ sudo /usr/local/apache2/bin/apxs -cia -I/usr/local/mysql/include/mysql/ -L/usr/local/mysql/lib64/mysql/ -lmysqlclient -lz -lm mod_auth_mysql.c; 
でインストールとLoadModuleまで完了です。ただ、このまま起動すると下記のエラーになります。
[error] Internal error: pcfg_openfile() called with NULL filename [error] [client 192.168.0.1] (9)Bad file number: Could not open password file: (null)
これはmod_auth_basic.soより後に記述するとそうなるようで、先にmod_auth_basicが動作してエラーになってしまうようです。mod_auth_basicより先にロードすればいいと記述をみかけたんですが、mod_auth_basicとかメジャーな物は、動的じゃなくて静的にくみこまれている場合も多く、自分の環境がそうだったのですが、ここで詰まってしまいました。

色々さがしていたら海外のMLで解決法をみつけました。

AuthType Basic
AuthUserFile /dev/null
AuthBasicAuthoritative Off

AuthMySQLEnable On
Require valid-user
AuthMySQLHost localhost
AuthMySQLDB test
AuthMySQLUser www
AuthMySQLPassword pass
AuthMySQLUserTable user
AuthMySQLNameField key
AuthMySQLPasswordField secretkey

いったんAuthUserFileを/dev/nullにして、AuthBasicAuthoritativeをOffにします。こうすると、認証ファイルに該当ユーザーが無い場合、下位の認証プロセスに認証を委譲するようにどうさするみたいです。mod_auth_basicのページにも書いてありました。なるほどですねー。勉強になりました。
このエントリーをはてなブックマークに追加

↑このページのトップヘ