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 を使うことでランダムに任意のステータスコードを超簡単に返せるのは嬉しい!

元記事はこちら

(超メモ)mod_mruby を使ってランダムにステータスコードを返す環境を作る