o2tの日記

京都でIT技術者として働くo2tの日記。phpやpythonネタが多いです。

mysqlにsquidログを格納する

squidのログを解析するために、mysqlにimportした時のメモです。

 

ログ解析用のテーブルを作成

格納用のcolumnは以下を参考にして作成しました。

Squidのログファイル

--
-- テーブルの構造 `access_log`
--

CREATE TABLE IF NOT EXISTS `access_log` (
`time` decimal(65,3) NOT NULL,
`duration` int(11) NOT NULL,
`client_address` text NOT NULL,
`result_codes` text NOT NULL,
`byte` int(11) NOT NULL,
`request_method` text NOT NULL,
`URL` text NOT NULL,
`rfc931` int(11) NOT NULL,
`hierarchy_code` text NOT NULL,
`type` varchar(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ログファイルをimportし易い形に変換する

今回扱ったログファイルは、apache準拠ではなく標準フォーマットだったため、少し加工しました。通常、ログはタブ区切りなどですが、squidはそうではない模様。そこで、スペースをタブに変換するため、sedを使って加工しました。

cat access.log | sed -e 's/  */        /g' > exchange_access.log 

 ※/*と/gの間はタブを入力しています。ターミナルでCTRL+vを入力したのち、タブキーを入力すると打てるはず。

注意

ターミナルの文字コードが日本語(UTF-8)になっている場合、「sed: RE error: illegal byte sequence」というエラーが出る場合があります。その場合はLANG設定を「C」に変更して上記コマンドを実行して下さい。

phpmyadminを使ってmysqlにimportする

phpmyadminのインポートタブでインポートをします。

この時、【フォーマット】は「CSV」を選択し、「カラムの区切り記号」には「\t」を記入。この時「円マーク」だとうまくいきませんでした。バックスラッシュじゃなと駄目な感じです。