Metabase nginx ログ解析

解析までいうほどじゃないが可視化

可視化といえばfluentd + elasticsearch + kibanaだったが バージョンがどんどんあがっていきついていけなくなった ついでに環境を作るのがめんどくさい

旧バージョンならansible化してるので動かせるけどもっと楽にみたかったので調べた

Metabase https://www.metabase.com/

DBのログを可視化したりできるツールがあったので使ってみた

まずnginxのアクセスログはLTSVにしてあるのでそれをfluentdでmysqlに流し込む fluentdやfluentdのプラグインmysqlのインストールは割愛

nginxのlog_formatはこんな感じになっている

[code lang=text] log_format ltsv 'time:$time_iso8601' '\tremote_addr:$remote_addr' '\trequest_method:$request_method' '\trequest_length:$request_length' '\trequest_uri:$request_uri' '\thttps:$https' '\turi:$uri' '\tquery_string:$query_string' '\tstatus:$status' '\tbytes_sent:$bytes_sent' '\tbody_bytes_sent:$body_bytes_sent' '\treferer:$http_referer' '\tuseragent:$http_user_agent' '\tforwardedfor:$http_x_forwarded_for' '\trequest_time:$request_time' '\tupstream_response_time:$upstream_response_time' '\tcookie_uid:$cookie_uid' ; [/code]

いろいろ出してけどDBに突っ込むのは一部とする

DB

[code lang=text] create database nginx; CREATE TABLE request_log ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, time varchar(30) NOT NULL, request_uri varchar(500) DEFAULT NULL, uri varchar(500) DEFAULT NULL, status varchar(5) DEFAULT NULL, useragent varchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; [/code]

fluentd.conf

[code lang=text] <source> @type tail format ltsv tag nginx path /Users/astel/Desktop/fluentd/hoge.log pos_file /Users/astel/Desktop/fluentd/hoge_pos.pos </source> <match nginx> @type mysql_bulk include_time_key yes host localhost database nginx username root password root column_names id,time,request_uri,uri,status,useragent table request_log flush_interval 5s </match> [/code]

fluentd -c fluentd.conf で起動して cat access.log >> hoge.log で流し込む

dbの中身がそれっぽくなったらMetabaseを起動する macだったのでmac版をインストールした jar版でも動いた

適当に名前とメールアドレスとDBをセットアップしていじってたらグラフでてきた そんな感じ

apiのログなのでかなり細かめにでちゃったけど絞り込めば自分の好きなグラフとかデータとか出せそう 別にmysqlじゃなくてもprestoとかも見えたので色々出せそうな雰囲気はあった

簡単に使えたので今後可視化するときは使っていきたい (DBにデータを突っ込みかたとかDBの設定とかが得意ではないのでそこらへんの設定はよしなにしてやって