日曜研究室 〜技術的な日常〜

技術的な観点から日常を綴ります

   7 月 07

awstatsの自動アップデートには気をつけた方がいい

CentOS5.3で動かしてるアクセス解析ソフトのawstatsが急に動作しなくなるという問題が。 ブラウザで見ても404が返ってくるばかりで、かなり頭の中がパニックになりましたが、まずリバースプロキシとして使ってるDeleGateを疑うことに。 (その前にローカルプロキシのdolipoを疑うというステップがありましたが省略) 色々調べてみましたがDeleGateには問題はありませんでした。 awstatsが動いてたサーバーの/etc/httpd/conf.dあたりを見ると、awstats.conf.rpmnewというファイルが。 yumで自動アップデートする設定にしてるのでそれでアップデートされたんだろうなぁと思い、/var/log/yum.logを見ると案の定今朝更新されてました。 元のawstats.confではバーチャルドメイン対応の設定をしてたのと、awstats.conf.rpmnewにはデフォルトの設定が書かれてただけなので、rpmnewの方を消してapacheを再起動してみましたが、状況は全く変わらず。 ちょっと悶絶するくらい「何で〜?」ってなりましたが、よく調べてみると、どうもawstats本体のディレクトリが/usr/local/awstatsから/var/www/awstatsに変わってるようで、しかも元の/usr/local/awstatsの中身の主要なファイルが消えてました。 もちろんawstats.plも消えてるので404が出るのは当たり前です。 まぁ、yumでアップデートされたんなら古いプログラムファイルが削除されるのは分かるんですけど、なんで/usr/localなんだ? yumでアップデートされるということは、yumかrpmで入れたはず。 でまぁ、ちょっとした謎を抱えたまま、パスが変わってるのは分かったので各種設定ファイルをそれに合わせて書き換えました。 これで、定時のcronでの更新も動作するようになったんですけど、やっぱりブラウザからは閲覧できません。 正確には404ではなくawstats.plは表示されるようになったんですが、集計データが全て0のままで使い物にならない状態でした。 awstatsのバージョンが上がったからデータファイルの互換性がなくなったのかと思いましたがそうでもないみたいで。 現にコンソールからはoutputオプションをつければデータは見れました。 パーミッション等でCGI経由ではデータファイルが読み込めない問題が起きてるのかなと思い、apacheのエラーログを見ましたが全くエラーが記録されておらず。 perlに-wをつけてwarningも記録するようにしてみたら、awstats.plの9533行目で未初期化変数使用のwarningが出ましたが、今回の問題とは関係なさそうでした。 というか関係ないと思いたい。あんなソース読みたくない。 \(^o^)/ こんな感じでゴロゴロして現実逃避してたら、ふと一つの可能性に気づきました。 SELinuxじゃね? 開発コミュニティの理念がアレだとか、めんどくさいとかで評判の悪いSELinuxですが、僕は以前から意地でもSELinuxオンで行く事を決めてたので、今回のサーバーでもオンになっています。 /etc/log/audit/audit.logを見るとビンゴ!わんさかとawstats.plがらみのdeniedが記録されてました。 audit2allowとかで許可してあげると、ちゃんとブラウザでも表示されるようになりました。 しかし、awstatsのディレクトリが変わるってどういうことよ? まぁ元々ソースから入れた訳でもないはずなのに/usr/localに入ってた事がおかしいんですけどね。 perlもファイルが読めないならちゃんとエラー吐いてくれよと。 まぁ、perl/CGIからだとSELinuxのせいでファイルがある事さえ認識できなかったのかもしれないですけど。 これで4時間くらい食ってしまいましたよorz

Read the rest of this entry »

   12 月 10

アクセス解析

実はこのサーバーにawstats(アクセス解析ソフト)を入れていたのですが、今年の5月あたりから全く更新(集計処理)を行っていなかったので、何PV/dayあるのかとかアクセスの動向を全く把握していませんでした。 Analyticsも入れてるはずなので、そっちを見ればいいんですけど、awstatsを半年以上放置してるぐらいで、そもそもアクセス解析を見る気がないのです。 元々、アクセス解析のように数字やグラフでバーンと一覧表示してくれる類のものは好きなのですが、見はじめると気になって気になってしょうがなくなってしまって、アクセス数ありきで記事を書くようになってしまうので見るのをやめてしまいました。 アクセス数が増えるかどうかを気にして文章を書くのは苦痛ですから。 それに、経験上アクセスが増えるときは増えるし、減るときは減るしで、そういう機会に前もってアクセス解析が役に立ったかというと、特にそうでもないしで、もちろん有効活用されてる場面は一般的に多々あるんでしょうけど、自分の場合はその結果を見て文章に気を使う以外に特に行動は起こさないので、心理的な負担になる分見ないほうがマシかなと。 ただ、長期間溜まったWebサーバーのログをawstatsで解析するのは非常に長い時間がかかるので、将来解析結果を見たくなったときに面倒だなということで、今回更新してみました。 ブラウザからだともちろんタイムアウトしてしまうので、ターミナルから実行し、30分ぐらいかかりました。 結果を見ると大したアクセス数ではないのですが(だいたい300~500PV/dayでした)、やっぱり30分もかかるもんなんですねぇ。 で、解析結果が出ると見たくなるのが人情ってもんで、色々見てみると結構昔の記事にもアクセスがあります。 「当時はそれで問題なかったけど、今はもっといい方法があるよ~」と言いたくなるような記事もあって、ちょっと恥ずかしいです。 かと言って、修正しようとは思いませんけどね。日付もきちんと出してるので、古い情報か新しい情報かは読み手で御判断いただくということで。 アクセスが多いのはやっぱり製品の型番をしっかり書いてる記事ですね。 製品の型番は表記の揺らぎも出にくいですし、競合サイトも少ないしでサイト全体のアクセス数の中でも結構比率が高いです。 しかも型番がタグクラウドになってるとさらに強い感じです。型番がURLの一部になりますからね。 でも、今までどおりのペースで書いていこうと思います。 型番が入った記事と言うのは、お金がかかることが多いので。 今月のカードの支払いにMacBookの代金が含まれてて、マジで余裕無いです。今月は。

Read the rest of this entry »

   11 月 06

awstatsをCGI起動で更新

awstatsとかはあまり個人的には好きではありません。 webサーバーの生ログが膨大になると、awstatsを動かすためだけに別の特別な仕組みを考えなきゃ実用にならないくらい時間/負荷が掛かるからです。 awstatsだけではなく、他の「基本的にwebサーバーと同じマシンで生ログを解析するプログラム」も同じです。 正直Google Analyticsだけで良いんじゃないのと思ってるぐらいです。 あくまで自分の用途に限定した話ですから、みんなAnalyticsを使ったほうが良いなんていう主張はしませんが。 仕事でたまにawstatsを組み込んで欲しいという依頼があります。 基本的にはCronで自動的に一日一回更新するようにする事が多いのですが、 レンタルサーバーに設置する場合だと、Cronが使えない場合も多く ブラウザから手動で更新をせざるを得なかったり、 さらに生ログが最近1週間分しか保持されなかったりすると、 手動での更新を1週間以上忘れると、ログが途切れてしまったりとかいう問題が起きてしまいます。 ということで、その問題を解決するために 自分が管理しているサーバーからCronでターゲットのレンタルサーバーにwgetを行い、 ブラウザからの更新処理の真似事をしようという考えが当然浮かぶわけです。 awstatsの設定ファイルのAllowToUpdateStatsFromBrowserが1にセットされていれば、 解析結果のページのURLパラメータにupdate=1を追加してwgetするだけでうまく行きます。 しかし、レンタルサーバーだと負荷の観点からユーザーに好き勝手更新させないために AllowToUpdateStatsFromBrowserを0にしている場合も多いと思いますが、 その場合はwgetするだけではもちろん更新されません。 まぁ、awstats.plのソースをいじって更新用のパラメータをupdateからユーザーが推測しづらい文字列に変更してAllowToUpdateStatsFromBrowserを1にしておくという手も比較的ハードルは低い方法だとは思いますが、 ソースがソースなだけに弄りたくはないところです。(なぜ?と思った方は実際にソースを読んでみたら分かると思います。) じゃあCGI経由でシェルスクリプト呼び出せばいいんじゃない?という考えが浮かびますが、 /usr/local/bin/perl ./awstats.pl -config=example.com -update=1 などと書いたスクリプトをCGIから実行しても更新されません。 awstats.plはGATEWAY_INTERFACE環境変数の有無でWebサーバーから実行されたのかシェルから実行されたのか判別するようになっています。 CGIから実行したシェルスクリプトへは呼び出しが何段階になっても環境変数がそのまま引き継がれてしまう(というか同じ環境で動作すると言ったほうが正確か)ため、 ブラウザから更新を行ったとみなされ、AllowToUpdateStatsFromBrowserが0の場合は更新されません。 じゃあどうすりゃいいのか?って事ですが、そこは簡単に awstats更新用のシェルスクリプトでawstats.plを実行する前に GATEWAY_INTERFACE= export GATEWAY_INTERFACE の2行を追加して、GATEWAY_INTERFACE環境変数をクリアしてしまえば良いわけです。(shの場合) 要はAllowToUpdateStatsFromBrowserが0のawstatsをwget等で更新する場合は、GATEWAY_INTERFACE環境変数をクリアしてからawstats.plを呼び出せば良いということです。 但し、レンタルサーバーだとCGI経由でのシェルスクリプトの実行も禁止されてる場合も多々あり、 そういう場合は、もうどうしようもないと思います。 そういう点でも、HTMLソースさえ自由に編集できさえすれば組み込めるAnalyticsが個人的には好きなわけです。 もちろん、Analyticsはリアルタイムに更新される訳ではないので、自分で管理してるサーバーでほぼリアルタイムにログを解析したい場合は生ログ解析系のプログラムを使うのも悪くはないですが。

Read the rest of this entry »