アクセスログ解析の文字化け(いちおう解決)

仕掛かり案件だった、アクセスログ解析の問題点その後について、とりあえず解決したのでご報告。

まず、問題点のおさらい。

1) 解析ページの文字コードの自動判定がうまくいかない件
2) ダウンロードしたログ上で、アクセス時刻が[00:00:00]になってしまう件
3) 同じくダウンロードしたログ上で、転送バイト数が "-"の件

えーと、原因の簡単な3)から。3)については、これは仕様ですね。こうさぎのサーバ自体が、httpdになっている訳ではないので、どうやっても転送バイト数を知る術がないですから仕方がありませんネ。

次に、2)は、これはおそらく意図的にやっているのか、単にフォーマット変換するプログラムがヘボいのかのどちらかだと思いますが、意図的に[00:00:00]にしている可能性がありそうです。それは、こうさぎのコントロールパネル上で表示する分には、認証を通過した登録者本人がその場でナマのログとかあらかじめ用意された軸で見るだけですが、ダウンロードして高機能なログ解析ツールで解析するとアクセスしたホスト(IP)とアクセス時刻の相関関係や傾向がわかります(今回使用している、Webalizerでは、ここまで高度なことはできません)。また、解析結果が手元に残ります。こういった高度なアクセスログ解析をあまりヨシとしない考えの方もいらっしゃるので、そういう解析の実質的な無効化のため、ダウンロードするファイルには、タイムスタンプをネグっているんではないか、と想像しましたが、穿ち(うがち)すぎデスカ?

#こうさぎのコントロールパネル上では、アクセス時刻が見えるということは、データとしては存在していて、画面表示用にはそれを取り出している訳ですから、ダウンロード用ファイルに取り出せない技術的理由はないはずです。それでも、実際にはタイムスタンプをネグっているのだから、意図的にやっているのではないか、と考えるわけです。

というわけで、あまり厳密な解析をするつもりもないので、いま自宅サーバ上で公開している解析ページには、アクセス元のホスト名(もしくはIPアドレス)のリスト表示をやめました。時系列のアクセス数、アクセス上位のURLのリスト、Entry/ExitのURLのリスト、リファラーのリスト、頻度の高い検索文字列のリスト、ユーザエージェントの種類、国別リストだけにしました。

最後に、1)の文字化けの件ですが、いちおう解決しました。

直接の原因は、WWWサーバソフトとして thttpd を使用しているんですが、その設定ファイル、thttpd.confで、charset="Shift_JIS" としていたため、HTTPヘッダ上で、charset(エンコーディング)情報が"Shift_JIS"として渡ってくるようになっていました。ブラウザ側では、HTTPヘッダの情報を解釈してエンコードを"Shift_JIS"と判定していて、文字化けが発生していたのです。

解決策としては、thttpd.conf で、charset="" として、明示的に指定しないようにしました。また、文字化け対策用のEUC-JP固有の漢字コードを埋め込むように、webalizer.conf の HTMLHead 文のコメントアウトをはずし、設定しなおしました。具体的には、

HTMLHead  <!--\xfd\xfe-->
※ ("\xfd\xfe"は、直接、16進コードで 0xfd 0xfeのバイナリコードを埋め込んであります)

という文を追加して、<META>タグで指定していたcharset="x-euc-jp"はやめました。
この文字化け対策については、次のところを参考にしました(今回は、Yahoo Japanでの対策方法を流用させてもらいました)。

・Yahoo! JAPANが実施している文字化け対策
・文字化けしないようにするには
・「美乳」で文字化けが直るって本当?

#「美乳」はさすがにアレなんで、3番目の記事にあるコード表をじーっと見て、「収入増理屈」という組み合わせを見つけましたけど、 0xfd 0xfe のほうがピンポイントで特異点にあたるので、今回は使いませんでした。

これで、一番気にかかっていた、文字化けは解消できたハズなので、これにて、クローズとします。(w

| | コメント (0) | トラックバック (0)

アクセスログ解析、その後

えーと、アクセスログ解析の続きです。

一つ前の記事で、こうさぎの機能で採取するログの形式について書きましたが、ちょっと整理してみました。


  1. こうさぎのコントロールパネルの画面で、「生ログ」を表示させた場合は、アクセス時刻は正しく表示される

  2. 同じく「先月のログをダウンロード」で、ファイルに落としてくると、アクセス時刻は[00:00:00]になってしまう

  3. 2.で落としたログファイルのフォーマットは、CLF(Common Log Format)もどきで、そのままでは、Apache系のログ解析ツールでは正しく解析できない(はず)。

ここで、1.と2.でアクセス時刻の表示に食い違いがありますが、いつものワタシの勝手な想像すると、アクセスログ自体は、おそらくデータベース(RDB系もしくはXML-DB系)に記録していて、そこから、PHPで画面用にレンダリングしたり、ダウンロード用にフォーマット整形している、と考えたんですが、どうなんでしょうか。

あと、3.のログフォーマットですが、他のWWWサーバでのログと見比べて、なんとなく原因がわかりました。

【ApacheなどのCLF形式】

192.168.1.10 - - [29/Aug/2004:13:07:45 +0900] "GET / HTTP/1.1" 200 4110 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

【こうさぎからファイルに落とした直後のログ形式】

192.168.1.10 - - [28/August/2004:00:00:00] "http://invoke.cocolog-nifty.com/blog/2004/08/" 200 - "http://app.cocolog-nifty.com/t/comments" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

【CLFに近づけるため、一部加工したあとの状態】

192.168.1.10 - - [28/Aug/2004:00:00:00 +0900] "GET http://invoke.cocolog-nifty.com/blog/2004/08/ HTTP/1.0" 200 - "http://app.cocolog-nifty.com/t/comments" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

折りかえってしまっているのでわかりづらいですが、相違点としては、

1) 日時の「月」の表記が異なる(こうさぎのログは、フルスペル)
2) 日時の後ろに「タイムゾーン」の表記がない
3) HTTPのメソッド(GETとかHEADとか)の表記がない、また、HTTPのプロトコルバージョンの表記もない
4) HTTPレスポンスコード(200)の後ろに、転送バイト数がない(ハイフン "-")

のあたりが異なりますネ。

というわけで、上記の手直し(加工)をしたログを再度、解析ツールへかけて、作り直しましたので、リンク先の内容も前回よりは多少マシになっているハズです。
ただし、検索キーワードの順位テーブルのところ、本来は、EUC-JPの文字コードなんですが、ブラウザの文字コード判定がうまくいかなくて、文字化けしてしまいます。ブラウザのエンコードの設定を再度自動判定するか、日本語(EUC)に設定してもらえば、見えるようになります(それでも一部は文字化けするかもしれないけど)。

一応、<META>タグで、charset="x-euc-jp" を<HEAD>タグの中に入れてあるんですが、どうも効いてないみたいです。これは、WebalizerがDebian標準の英語版なんで、日本語化したバイナリを作らないとダメかも。もしくは、perlのJcodeで、文字コード変換(フィルタ)を通しておくやり方をとる必要がありそう。

ちょっと、継続案件とします。(w


| | コメント (0) | トラックバック (0)

玄箱の時刻合わせ(その後)

ちょっと前に書いた、玄箱の時刻合わせですが、あのあと、シコシコと、adjtimexのtickの微調整をやってました。それで、現時点でなんとか納得のいく値を見つけ、現状はこんな感じです(adjtimex --printの結果)。

[invoke@obbligato:500 ~]$ /sbin/adjtimex --print
         mode: 0
       offset: 2202
    frequency: 11456073
     maxerror: 559331
     esterror: 1452
       status: 1
time_constant: 6
    precision: 1
    tolerance: 33554432
         tick: 9960
     raw time:  1094485510s 119954us = 1094485510.119954
 return value = 5
[invoke@obbligato:501 ~]$

で、ntpq -p の結果はこちら。

[invoke@obbligato:502 ~]$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp2.jst.mfeed. mf-isdn1.mfeed.  2 u    2 1024  377   11.512    2.007   2.430
*192.168.1.3     nist1.e-timing.  2 u  952 1024  377    1.148    3.988   0.066
[invoke@obbligato:503 ~]$

ちなみに、192.168.1.3のマシンは、FreeBSD 4.9R-p11が動いていて、タイムカード機で有名AMANOが公開しているNTPサーバ(stratum 1らしい)と同期させてます。
オフセット値があんまりよくならないですが、とりあえず、これで大きな狂いはなくなったと判断することにします(w。

おまけ:
玄箱は、実際には下の写真のような感じで設置してます。写真左から、Bフレッツファミリー100のONU、BB有線ルータ(NTT-ME MN8300)、玄箱です。

photo by IXY Digital 400

| | コメント (0) | トラックバック (1)

玄箱の時刻合わせ

昨日書いた、玄箱での時計の狂いの件、その後、2chとかの掲示板に、参考情報が載っているのを発見。adjtimex というコマンドで、tick (システムクロックの補正係数)を調整すれば、よいらしい。早速、apt-get install adjtimex で
インストール。そして、起動スクリプトである、/etc/init.d/adjtimex の中身を覘くと、/etc/adjtimex.conf から設定値をオーバーライドするようなんで、そこへ、TICK=10022 と設定しておく(元々、TICK=10000になっていた)。

その後、sudo /etc/init.d/adjtimex start で設定を反映させ、念のため、/sbin/adjtimex --print で変更されたか確認。ntpdate で一旦、上位サーバと同期させてから、ntpd を起動。たしかにズレは少なくなったが、まだ微調整が必要な感じ。offset とか、jitterがあまりよくない。まぁ、これで、1つ懸案事項が片付いたので、良しとしよう。

|

自宅サーバのリプレース

前に書いた自宅サーバのマシンは、ThinkPad230Cs×2台と、Dynabook SatellitePro 420CTの1台で、まぁめちゃくちゃ非力なわけです。特にThinkPad230Csは、i486SX 33MHzとPentium以前のCPUで、かつバスクロックも33MHzとよく動いているなぁ、という代物です。それで、玄人指向の玄箱を、Vine化とかDebian化しているサイトを見つけ、これを利用しようと目論む。Vine化は結構面倒な作業が必要な感じだったんで、お手軽にできそうなDebian化に挑戦。

まず、組み込むHDDは、数年前に買って、お蔵入りしていた、WesternDigital WD205AAを引っ張りだしてきた。UltraDMA33だけど、今回の用途では無問題。その後、上記のサイトにある手順にしたがい、無事、DebianがインストールされたLinux Boxのできあがり。先人たちの苦労に感謝。
あ、もちろん、Debian化した直後のIPアドレスは、192.168.0.0/24のネットワークアドレス配下になっているんで、自宅LAN環境の192.168.1.0/24にあわせて変更してます。いちおう、ThinkPadのほうでも、Debian 3.0(Woody)を入れて使っていたので、そっちから適当に設定ファイルなんかを持ってきて、apt-getでsshサーバとapacheとか、sambaやntpなんかをインストール。そいえば、この玄箱のRTCは非常に精度が悪く、ntpでなかなか同期が収束しない。ntpdate -u で強制的に上位ntpサーバと同期させても、しばらくすると、5~6秒くらい進んだり遅れたりする。仕方がないんで、cronで、30分毎に強制的に、ntpdateすることにしている。

まだまだ、設定が未完だけど、ある程度チェックできたら、リプレースするつもり。やっと、ブログのタイトルらしい話題が書けたかも(w。

| | コメント (0) | トラックバック (1)

OSの更新完了(portsは更新中)

自宅サーバのFreeBSDマシンの4.9R-p10から-p11への更新がやっと終わった。何しろ、内蔵ディスクが、1.6GBしかなく、容量的に、ルートと/usrの2つしかパーティション切られず、buildworldするとかなり容量的にキビシイのだ。あと、portupgradeもやったんだけど、案の定、ezm3のコンパイルで容量が不足して、Abortしてしまう。なんとか、外付けSCSI経由(MACNICA MIRACLE SCSI-II)でHDDをつなぎ、空きを作って再トライ。まだ、コンパイル中。

そそ、また「こうさぎ」がなにやら書き込んだようだけど、相も変わらず、意味不明(w。こうさぎの奴、いつのまに潮干狩りへ行ったんだろうか?タイトルまで真似るとは、ふてー奴だ(w。

| | コメント (0) | トラックバック (0)

サーバOSの更新

Blogのタイトルにあるくせに、pcunix系の記事を全然書いていなかった(ある意味、意図的ではあったのだけど)。
さて、今、ウチにある自宅サーバは、3台のノートPCで動かしている。

1) Mainサーバ: TOSHIBA Dynabook SatellitePro 420CT (Pentium 100MHz, 40MB Memory)
FreeBSD 4.9-RELEASE-p10

2) Subサーバ: IBM ThinkPad 230Cs (i486SX 25MHz, 20MB Memory)
NetBSD 1.6.2

3) WWWサーバ: IBM ThinkPad 230Cs (i486SX 25MHz, 20MB Memory)
Debian GNU/Linux 3.0r1(Woody)

1)は、自宅LAN環境のローカルなDNS, mail(smtp, pop3), samba(WINS) として運用している。
2)は、まあSubということにしてあるけど、特にコレといった特定の用途がないままでほったらかし状態。
3)は、とりあえず、thttpdで自宅WWWサーバということにしてある。

それで、1)のサーバのOSの更新(-p10から-p11)を行っているが、本当は、4.10-RELEASEにUpgradeしたほうがよいのかもしれない。4.9のメンテナンス終了予定日は、2004年10月31日となっているので、obsoleteになる可能性高い。しかし、buildworldするともう半日~1日仕事なので、寝る前に流しておく。kernelは面倒だから再構築せずに、GENERIC_LAPTOPを不要なdeviceだけ無効化して使っている。

これが終わったら、portupgrade もしておこう。

| | コメント (0) | トラックバック (0)