先日のメモで「jdresolveの終焉」と書きましたが、代わりになる適当な一括リゾルブアプリケーションを発見することが出来ずにいます。メンテナンスされていないパッケージではありますが、jdresolve は本当に使い易かった!
logresolve も httpdログファイルならjdresolveと同じくIPアドレス→ホスト名変換してくれるのですが、ログファイルが大きくなるにつれ時間が掛かりすぎると感じるようになってきました。今や1ヶ月分の名前解決に40分以上です。キャッシュを使わないところが遅さの原因なのでしょう。最初は大目に見ていましたが、一日分のアクセスログが増える毎に約5分ずつ遅くなることが判明し、次のリゾルバーを考えないといけないと実感しました。fastresolve は高速なのはいいけど、DNSに負荷が掛かりすぎで使う気になれず。
もし、p5-Net-DNS パッケージが 0.72ではなく0.68 のままなら jdresolve を使えることがわかっています。バージョン 0.68 の /usr/ports/dns/p5-Net-DNS をどこかから持ってこれれば、pkg_delete した後に、もう一度 Net::DNSを復活できるのでは?と考えました。
複数サーバーの /usr/ports を探しましたが、全て最新の0.72になっており諦めかけた時、portsnap に切り替える前、ports のバックアップをとったことを思い出しました。中を見てみたら、残っていました。0.68 のMakefileが。問題は、Net::DNSと依存関係がある他のモジュールが、0.68を受け付けてくれるかどうか。p5-Net-DNS を tar で固めて、対象ホストの /usr/ports に展開。
# make deinstall reinstall
とやってみたところ。
> jdresolve ip.txt tokyo.lifewithunix.jp - - [01/Nov/2012:00:00:04 +0900] tokyo.lifewithunix.jp - - [01/Nov/2012:00:00:09 +0900] crawl-66-249-73-3.googlebot.com - - [01/Nov/2012:00:00:10 +0900] 173.199.115.171.ahrefs.com - - [01/Nov/2012:00:00:17 +0900] 173.199.116.179.ahrefs.com - - [01/Nov/2012:00:10:47 +0900] Total Lines: 5 Total Time : 00:00:01 (5.00 lines/s) Total Hosts: 4 Resolved Hosts: 4 (100.00%) Unresolved Hosts: 0 (0.00%) Average DNS time: 0.5000s per request Max DNS time: 1s (consider this value for your timeout)
で復活。わーい。
他のツールを探す前に、最初からこれを試せば良かった。
今後のこともあるので、ソースとtarボールをここに登録しておくことにします。perl5.12 用なので、5.14, 5.16のいずれかにperlを上げてしまった場合は、ソースからビルドして再インストールする必要があります。
パッケージ : p5-Net-DNS-0.68.tbz (perl5.12系)
ソース : p5-Net-DNS-068.tgz