# aws でauto scaling しろよ、というのはさておき
- http://httpd.apache.org/docs/2.2/rewrite/rewritemap.html
- http://httpd.apache.org/docs/2.2/programs/httxt2dbm.html
RewriteMap で外部のファイル/コマンドを実行した値を変数に入れて、RewriteCond で条件判別する。
このときリアルタイムな処理をするならRewriteMap で prg (External Rewriting Program) を使って、perlやシェルスクリプトなどで動的にload averageの値を拾ってくれば良い。
が、リクエスト毎に外部プログラムが走るのでもしかしてオーバヘッドになりうるということと、そもそもload averageは1/5/15分平均の値で、1秒ごとに劇的に変化する値でもないので、例えばcron等でload averageをファイルに書き出しておいて、txt かdbmで見るほうがサーバ負荷に優しい気がする。
# オーバヘッドうんぬんは真面目に負荷かけて調べてないので予想
実験
スクリプトはだいぶ適当
毎分設定するcron
- get_la.sh
#!/bin/sh file=/var/tmp/la.txt dbm=/var/tmp/la.dbm ldavg_1=`cat /proc/loadavg | cut -d ' ' -f 1` echo "ldavg_1 $ldavg_1" > $file /usr/sbin/httxt2dbm -i $file -f db -o $db
apacheの設定
RewriteEngine On #RewriteMap la txt:/var/tmp/la.txt RewriteMap la dbm=db:/var/tmp/la.dbm RewriteCond ${la:ldavg_1} >1.00 RewriteRule ^/index.html /var/www/html.simple/index.html [L]
これでload average が1を越えたら/var/www/html.simple/index.htmlが表示された