検索しても軒並み何年もまえのエントリーばかりなので、2017年にもなって今更かと思いつつ。
自分の設定メモもかねて。
TL;DR: さくらのレンタルサーバー(スタンダード)にtiarra(Log::DBIつき)+tiarraMetroを入れたはなし
追記:DBに保存した日本語が化けたので対処した点
Tiarra配布サイトから最新版(現時点で2010年なので多分同じですが)を入れたいディレクトリに解凍。
tiarra.confを書き換えます。
- generalブロック
- ユーザー情報…書いた
- tiarra-password…まあ設定する
- control-socket-name…tiarraMetroのために適当につけた
- 文字コード系はutf8に
- notice-error-messages:1 …自分用なら見えるほうがよかろうと
- networksブロック
- multi-server-mode: 0…接続したいサーバーが1つだったので
- 接続先のhostとportを書いた
- モジュール類
- Channel::Join::Connectを有効化、networkに書いたサーバーのチャンネルを
- Log::Channelで日別logをとる
- Log::Recentが地味に便利だったので
- System::Errorを有効に、自分用だし
- Log::DBIを入れた。
source: DBI:mysql:データベースの名前:データベースのホスト名:3306
user: ユーザー名
pass: パスワード
と保存するチャンネルの指定。sourceがややわかりにくかったけど、ホスト名のところはさくらの場合つまりmysql番号.db.sakura.ne.jpのことだった。 - System::SendMessageをtiarraMetroのために
tiarra本体だけならそんな感じ。
ログを検索可能な状態にしたかったので、tiarraMetroを入れた。
これは素直にgitからひっぱってconf.ymlを編集したら問題なく動いた。下準備は大変だった。
まずtiarra本体Log::DBIを入れた。
tiarraMetroに同梱されているDBI.pmを指示通り入れて、mySQLにテーブルも作って、うまくいくようだったけれどしばらくするとデータベースとの接続がタイムアウトするのかMySQL server has gone awayと言われてしまった。
ので、エラーが出る行(91, 134)の直前に強引に
$dbh->{mysql_auto_reconnect} = 1;
$dbh->do("set names utf8");
を放り込んでちゃんとつながってくれーと祈ったら繋がったらしく、以後エラーは出なくなった。
追記:utf8で読み書きしているはずで、テキストログは全く問題なかったのにデータベースでだけ日本語が化けた。
ので、同梱されていたDBI.pmを精査したところ、263行目でjisとあるのが怪しいとふんでutf8に書き換えたところ、以後化けなくなった。
更に追記:日本語が化ける件、auto_reconnectの後にset namesし直すようにしたら今度こそ直ったので、書き足しておきます。
また、これまでLog::Channelがとってくれたtxtログをdbに入れるため、tiarraのテキストログをDBへインポートするを使ってインポートを試みた所、まずSQLにつながらないと言われた。
host指定がないのがまずかったようだったので、lib/model/model.pyにhost指定を付け加えてみた。変更範囲はこのあたり。
self.con = MySQLdb.connect(host=self.host, user=self.user, passwd=self.passwd,
db=self.db, charset=self.charset,
use_unicode=True)
self.cur = self.con.cursor()
@classmethod
def read_conf(self):
conf = ConfigParser.SafeConfigParser()
conf.read(CONFIG_INI)
self.host = conf.get('db', 'host')
self.user = conf.get('db', 'username')
config.iniにホストを書き足した
host=データベースのホスト名
ところ、データベースにつながらない問題は解決した。が、走らせてみるとUnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-19: ordinal not in range(128)と止まってしまった。
DBを調べると日本語が含まれる行で止まったらしいと分かった。これは自力では解決できず、pythonがわかる知人の力を借りて最終的に解決した。
lib/model/log.pyの最後の方の.decode(‘utf-8’)を消して、スクリプトを実行する直前に
$ setenv PYTHONENCODING UTF-8
することで強引に解決した。
そんなこんなで2017年にもなってtiarraをインストールしてみた話でした。
十七夜屋