発端は、PHPやApacheのerror_logを、リリース直後に1箇所でtailしたい要望があったためです。
また、access_logの集計に使っている商用ソフトウェアを廃止することによるコスト削減も狙っていました。
結論から言えば、かなり残念な結果に。
Webサーバ2台で検証環境ですらかなりのCPUを消費するので、Webサーバが10台以上ある本番環境では使いものにならないように思います。
ボクの感想としては2つ。
・I/Oがボトルネックになると予測していたのでディスクアレイも検証したのに残念。
・ベンチか設定が間違ってるだけと信じたいですが、そもそも1GB超/1台/日のaccess_logを処理するのはやはり無理か・・・。
ちなみに、Webサーバで内蔵ディスクにTCP出力しているのは、syslogサーバの取りこぼしに備えてです。
access_logの精度を求めるなら内蔵ディスク、概算やerror_logのエラー検知ならsyslogサーバ、と使い分けるつもりでした。
詳細は次の通り。
まず、負荷試験の構成。
|負荷試験サーバ| ↓|Webサーバ x 2| ⇒内蔵ディスクにもログ出力 ↓ |syslogサーバ| ⇒内蔵ディスク or ディスクアレイ ・WebサーバのApacheは、access_log、error_logともにsyslog出力 ・Webサーバのsyslogは、TCPで内蔵ディスクにファイル出力 ・Webサーバのsyslogは、TCP/UDPでsyslogサーバに転送 ・syslogサーバは、内蔵ディスクやディスクアレイにファイル出力
検証には次のような機器を使いました。
(Webサーバ) CPU: Xeon E5640(Quad) 内蔵ディスクRAID: 5 (syslogサーバ) CPU: Xeon E5502(Dual) 内蔵ディスク: SATA2, RAID5 ディスクアレイ: SATA2, RAID5, SCSI
設定内容は次のように、logger経由でsyslog転送しました。
(Webサーバ) $ cat /etc/httpd/conf/extra/httpd-vhost.confCustomLog "| /bin/logger -p local3.info -t aplog001i" combinedmob_uniq ErrorLog "| /bin/logger -p local3.info -t aperr001i" $ cat /etc/syslog-ng/syslog-ng.conf # Apache log destination d_aplog001i { file("/home/www/sss01test/running/logs/apache/mobile/i/access_log" owner(root) group(root) perm(0644) template("$MSGONLY\n") template_escape(no)); }; filter f_aplog001i { facility(local3) and program("aplog001i"); }; log { source(s_sys); filter(f_aplog001i); destination(d_aplog001i); }; log { source(s_sys); filter(f_aplog001i); destination(d_ulog_sss01); }; (syslogサーバ) $ cat /etc/syslog-ng/syslog-ng.conf destination d_aplog001i { file("/var/log/httpd-ng/access_log.aplog001i_stb" owner(root) group(root) perm(0644)); }; #destination d_aplog001i { file("/mnt/das/testsyslog/access_log.aplog001i_stb" owner(root) group(root) perm(0644)); }; log { source(t_server); filter(f_host_stb); filter(f_aplog001i); destination(d_aplog001i); };
負荷試験はシンプルにApache Benchを使い、TCPやUDPの違い、出力ストレージの違いを調べました。
グラフは、各サーバのCPU使用率(user, sys)です。
CPU使用率はUDPの方が5%増しくらいですが、処理時間はUDPの方が倍くらい速いです。
UDPでの取りこぼし率は0.00194%でしたが、もしかしたら台数が増えるとどこかのタイミングで急増するんでしょうか。
ストレージの差がもっと出るかと思いましたが、たぶんCPUがボトルネックで違いが現れないのだと思います。
機会があればAmazonなどで追試をしてみたいと思います。
上から(c200, n200000, TCP, syslogは内蔵ディスクへ出力)、(c200, n200000, UDP, syslogはディスクアレイへ出力)
0 件のコメント:
コメントを投稿