MySQL
nginx
td-agent
可視化
Metabase

Metabase使って秒速でNginxのアクセスログを可視化してみる

Metabaseを使ってNginxのアクセスログ可視化する

TL;DR

  1. nginxのアクセスログをtd-agent使ってmysqlへ格納
  2. metabaseで可視化

環境

環境 バージョン
OS ubuntu 16.04
MySQL 5.7.20
td-agent 2.3.6-0
Metabase 0.27.2

導入

前提

一応のインストールの一例
- nginxのインストール
- Ubuntuに最新のnginxをインストールする
- mysql-serverのインストール
- Ubuntuに最新のMySQLをインストールする方法
- 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 &
  • Adminユーザ名の設定を行う
  • Admin -> databasesからデータベースの追加
  • Database type等を設定 キャプチャ.PNG
  • DataModelからDatabaseを選択

まずグルーピングせず1年分一覧表を出してみる
キャプチャ.PNG

  • 日毎のアクセス数

VIEWをcount of raws
GROUPED BYをDate:dayで日毎に
VISUALIZATIONでLineへ
image.png
こんな感じで簡単にできました

ダッシュボードの作成

右上のSaveからグラフ名を入手し、表示したいダッシュボードへ追加する
ダッシュボード内で、マウスでグラフを移動・サイズの変更等を行う

1キャプチャ.PNG

  • 1週間
  • 上段に日毎のアクセス
  • 中段にユーザエージェント・IPアドレス・ステータスコード
  • 下段に生データ

超簡単にできましたv(´・ω・`)v