tl;dr
ログ監視ツールの動作確認の為に Apache と mod_mruby を使ってランダムにステータスコードを返す環境を作ってみた。
memo
参考
mruby コード
$ cat /etc/apache2/hooks/handler.rb code = ['200', '404', '503'] return Apache.return code.sample.to_i
これだけ! 簡単!
Apache への組み込み
以下のように定義する。
$ cat /etc/apache2/mods-available/mruby.load LoadModule mruby_module /usr/lib/apache2/modules/mod_mruby.so AddHandler mruby-script .rb $ cat /etc/apache2/mods-available/mruby.conf mrubyHandlerMiddle /etc/apache2/hooks/handler.rb mrubyTranslateNameMiddle /etc/apache2/hooks/rewrite.rb $ ln -nfs /etc/apache2/mods-available/mruby.load /etc/apache2/mods-enabled/mruby.load $ ln -nfs /etc/apache2/mods-available/mruby.conf /etc/apache2/mods-enabled/mruby.conf
レスポンス生成時の mrubyHandlerMiddle
に Ruby のスクリプトが実行されるように定義する。
尚、フックのタイミングについては以下の記事が参考になる。
コンテナ
コンテナにしている。
以下のようにビルド。
$ docker build --no-cache=true -t inokappa/mod_mruby .
以下のように起動。
$ mkdir /tmp/log/apache2 $ docker run --name=mrb-apache -v /tmp/log/apache2:/var/log/apache2 -d -i -p 29290:80 inokappa/mod_mruby
適当にアクセス。
$ curl -I localhost:29290/
以下のようにランダムにレスポンスコードが返ってくる。
$ curl -I localhost:29290/ HTTP/1.1 200 OK Date: Fri, 20 Nov 2015 00:54:46 GMT Server: Apache/2.4.10 (Debian) Content-Type: text/html; charset=iso-8859-1 $ curl -I localhost:29290/ HTTP/1.1 503 Service Unavailable Date: Fri, 20 Nov 2015 00:54:46 GMT Server: Apache/2.4.10 (Debian) Connection: close Content-Type: text/html; charset=iso-8859-1 $ curl -I localhost:29290/ HTTP/1.1 404 Not Found Date: Fri, 20 Nov 2015 00:54:47 GMT Server: Apache/2.4.10 (Debian) Content-Type: text/html; charset=iso-8859-1 $ curl -I localhost:29290/ HTTP/1.1 404 Not Found Date: Fri, 20 Nov 2015 00:54:48 GMT Server: Apache/2.4.10 (Debian) Content-Type: text/html; charset=iso-8859-1
以下のようにログも記録されている。
$ tail -f /tmp/log/apache2/access.log 172.17.0.1 - - [21/Nov/2015:00:38:45 +0000] "HEAD / HTTP/1.1" 200 133 "-" "curl/7.35.0" 172.17.0.1 - - [21/Nov/2015:00:38:45 +0000] "HEAD / HTTP/1.1" 200 133 "-" "curl/7.35.0" 172.17.0.1 - - [21/Nov/2015:00:38:46 +0000] "HEAD / HTTP/1.1" 200 133 "-" "curl/7.35.0" 172.17.0.1 - - [21/Nov/2015:00:38:47 +0000] "HEAD / HTTP/1.1" 404 140 "-" "curl/7.35.0" 172.17.0.1 - - [21/Nov/2015:00:38:48 +0000] "HEAD / HTTP/1.1" 503 169 "-" "curl/7.35.0" 172.17.0.1 - - [21/Nov/2015:00:38:49 +0000] "HEAD / HTTP/1.1" 200 133 "-" "curl/7.35.0" 172.17.0.1 - - [21/Nov/2015:00:38:49 +0000] "HEAD / HTTP/1.1" 503 169 "-" "curl/7.35.0" 172.17.0.1 - - [21/Nov/2015:00:38:50 +0000] "HEAD / HTTP/1.1" 404 140 "-" "curl/7.35.0"
以上
任意のレスポンスコードを返すのは Apache 単体でも実現できるが、mod_mruby を使うことでランダムに任意のステータスコードを超簡単に返せるのは嬉しい!