Zabbix API 同時にログインしたらapache+MySQLがループするバグ

説明するまでもない、次世代の統合監視を担うオープンソースの代表格であるZabbix。ちょっと調査をする必要があったので、色々APIを試したりしていたときに発見した現象。

同時にZabbixAPIを叩きに行ったさいに、apacheとMySQLが高負荷状態に。その状態でWEBブラウザから他のクライアントがログインを試みてもタイムアウトになる。なんだーなんだーと思って調査してみたら、ログイン時にログを残す時のログID取得処理でバグがあった。

調査の内容は以下。

例えば、APIのクライアントから同時にZabbixAPIを叩きにいくと(zabbix-host-status-test.plは自分自身の監視を有効化したり無効化したりするスクリプト)

./zabbix-host-status-test.pl -m on & ./zabbix-host-status-test.pl -m on &

すると、API側のapache+mysqlがループに入り高負荷になる。

続きを読む

Linuxでシンボリックリンクを含んだパスを正しいパス(realpath)に変換する

■ realpath_for_fs() [Download]
・シンボリックリンクを含んだ絶対パスを安全にrealpathに変換

しばしば、シンボリックリンクを含んだ絶対パスをシンボリックリンクを含まない絶対パス(realpath)としてみたい場合がある。

特に、apacheモジュールを実装する上で、apacheはシンボリックリンクをrealpathに解析した上で、Directiveを見てくれないため、realpathでDirectiveを書いていても、シンボリックリンク経由でアクセスがあった場合は、Direvtiveのパスは無視される。

パスのBaseネームがシンボリックリンクであれば、symlinksコマンド等で調べることができるが、絶対パスの途中にシンボリックリンクが含まれている場合はそう簡単には行かない。

続きを読む

apacheへのrequestで消費するリソース量をloggingするモジュール

■ mod_resource_checker  [Download](apcheリソースloggingモジュール)

サーバー内で複数のWEBサービスを提供したい場合に、chroot環境でのIPベースと、Virtualhostを用いたnameベースがある。

IPの枯渇や、ハードウェアにあまりお金をかけない、プロセス数の問題などで、最近ではnameベースを用いてサービスを提供することが多い。

ただし、nameベースでは様々な問題が起きる。

例えば、

  • VirtualHost毎にログを残す場合、VirtualHostの数が増えてくると、fdの数が足りなくなる
  • セキュリティ的にsuEXEC環境をとらないといけなくなる
  • DSO版phpにも対応できるようにmod_ruidを使わないといけない
  • mod_ruidを使うとCAPABILITYの問題で、request毎にプロセスを破棄しないといけなくてパフォーマンスが落ちる

など・・・

続きを読む