Metabaseを使ってNginxのアクセスログ可視化する
TL;DR
- nginxのアクセスログをtd-agent使ってmysqlへ格納
- metabaseで可視化
- 自分はログをmysqlに入れるとこまでやって可視化するときkibanaを使ってましたが、kibanaはelasticsearchが前提でmysqlとの連携で最初上手くいかなかった。
- OSSのデータ可視化ツール「Metabase」が超使いやすいを読んで使ってみたらめっちゃ便利だった。
環境
環境 | バージョン |
---|---|
OS | ubuntu 16.04 |
MySQL | 5.7.20 |
td-agent | 2.3.6-0 |
Metabase | 0.27.2 |
導入
前提
一応のインストールの一例
-
nginxのインストール
-
mysql-serverのインストール
-
td-agentのインストール
- nginxのログをtd-agentを利用して、MySQLに突っ込んでみた 〜アクセスログのデータベース化
curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-xenial-td-agent3.sh | sh
-
設定の一例
log_format ltsv "time:$time_iso8601\t"
"ip:$remote_addr\t"
"user:$remote_user\t"
"req:$request\t"
"status:$status\t"
"method:$request_method\t"
"size:$body_bytes_sent\t"
"uri:$request_uri\t"
"file:$request_filename\t"
"referer:$http_referer\t"
"ua:$http_user_agent\t"
"reqt:$request_time\t"
"cache:$upstream_cache_status\t"
"vhost:$host";
access_log /var/log/nginx/access.log ltsv;
<match nginx.access>
@type mysql_bulk
host localhost
database <データベース名>
username <ユーザ名>
password <パスワード>
column_names date,ip,user,req,status,method,size,uri,file,referer,ua,reqt,cache,vhost
key_names ${time},ip,user,req,status,method,size,uri,file,referer,ua,reqt,cache,vhost
sql INSERT INTO <データベース名>(NULL,time,ip,user,req,status,method,size,uri,file,referer,ua,reqt,cache,vhost) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
table <table名>
flush_interval 5s
port 24230
</match>
Metabase
wget http://downloads.metabase.com/v0.27.2/metabase.jar
#デフォルトで3000番を使うが既に使ってたため変更
export MB_JETTY_PORT=4000
nohup java -jar /opt/metabase/metabase.jar &
- 日毎のアクセス数
VIEWをcount of raws
GROUPED BYをDate:dayで日毎に
VISUALIZATIONでLineへ
こんな感じで簡単にできました
ダッシュボードの作成
右上のSaveからグラフ名を入手し、表示したいダッシュボードへ追加する
ダッシュボード内で、マウスでグラフを移動・サイズの変更等を行う
- 1週間
- 上段に日毎のアクセス
- 中段にユーザエージェント・IPアドレス・ステータスコード
- 下段に生データ
超簡単にできましたv(´・ω・`)v