ログを「見える化」する
仕事でログを見える化する必要がでてきた。昔、Treasure Dataのアカウントを作っていたことを思い出したので、試しにこのサイトのアクセスログをTreasure Dataで分析できるようにしてみた。
CDP(カスタマーデータプラットフォーム)のトレジャーデータ - 散らばった顧客データをひとつにまとめる。 - Treasure Data
あらゆるビジネスの中心に一貫性のある顧客体験を。トレジャーデータのCustomer Data Cloudは、マーケティング、カスタマーサポート、営業活動から業務部門にいたる企業内の各部門の連携を実現します。
ログフォーマットは変更しない
ググってみると、そのものが見つかった。nginx + fluentd + TreasureData – Qiita。この通りfluentd(td-agent)を入れてみる。DBはTreasure Dataのコンソールからポチポチ。
記事の通りtd-agent.confも設定し、td-agentをスタートさせると、/var/log/td-agent/td-agent.logに
2017-10-22 11:55:04 +0900 [warn]: pattern not match: "216.xx.yyy.237 - - [22/Oct/2017:11:55:04 +0900] \"GET /archives/tag/rspec HTTP/1.1\" 301 178 \"-\" \"Mozilla/5.0 (compatible; xxxxxxx/1.1; http://www.example.org/xbot, help@example.com)\" \"-\""
と警告が出てデータが投入されない。「format nginx」って、Nginxのデフォルトのフォーマットではないのか?
Nginxのログフォーマットはそのままで処理したい。もう少しググってみて、nginx のログを fluentdに流す(pattern not match対策) – Qiitaという記事を発見。これに従ってformatを指定して、td-agentを再起動!
2017-10-22 12:12:01 +0900 [warn]: "164.xx.164.yy - - [22/Oct/2017:12:12:01 +0900] \
"GET /archives/date/2016/11 HTTP/1.1\" 200 7475 \"-\" \"Mozilla/5.0 (compatible; ExampleBot/5.2; +http://example.com/robot/)\" \"-\"" error="invalid time format: value = 22/Oct/2017:12:12:01 +0900, error_class = ArgumentError, error = argument out of range"
argument out of rangeと言われる。もう一度記事を確認すると、formatの他にtime_formatも指定している。time_formatもtd-agent.confに書き足して、再起動。
td-agentの設定で対処可能
システム構築後にfluentd(td-agent)を入れる場合、既存のログのフォーマットを変更するのは難しい。だが、td-agent.confで柔軟に設定を行うことができるため、Nginxのログはデフォルトのまま処理することができた。
コメント