自作webサイトのアクセスログをRedashで可視化してみた

 はじめに

初心者ですので,色々なご意見お待ちしております!

とあるインターンに参加時にでデータの重要性を知り,そこではRedashを使っており,
丁度自作webサイトをvps上に立てていて,ある程度アクセスが来るようになっていたので,誰でも可視化できるようにしようと思いました.

使用したもの

  • Conoha VPS(CentOS)
  • nginx
  • mysql
  • Redash
  • fluentd
  • docker

 現状

nginxを使用して,/var/log/nginx/access.logにアクセスログが書き込まれていました.
これをshellコマンドでログ確認していたのですが,見にくいのが正直な感想です.

可視化してみた

ローカルのredashで可視化するために,
1. このアクセスログを同じサーバにあるmysqlに自動で書き込む
2.そのDBに外部からアクセスできるようにして,ローカルPCでredashを利用する

この状況だと見にくいのでltsv形式でltsv_request.logに保存します.

nginxの設定

この記事をかなり参考にさせていただきました

/etc/nginx/conf.d/default.conf
log_format ltsv 'time:$time_local\t'
                'server:$server_name\t'
                'time_local:$msec\t'
                'request_uri:$request_uri\t'
                'status:$status\t'
                'user_agent:$http_user_agent\t'  
                'host:$remote_addr\t'  
                'domain:$host\t'
                'http_referer:$http_referer\t';
access_log  /var/log/nginx/ltsv_request.log ltsv;

sudo nginx -s reloadを実行すると
/var/log/nginx/ltsv_request.log
にアクセスログが書き込まれていきます.

fluentd類

fluentd類をインストールします
この記事を参考にさせていただきました.

/etc/td-agent/td-agent.conf
<source>
  type tail
  format ltsv
  time_key time
  time_format %d/%b/%Y:%H:%M:%S %z
  tag  nginx.request
  path /var/log/nginx/ltsv_request.log
  pos_file /var/log/td-agent/request.pos
</source>

 Output descriptions:
<match nginx.request>
    type copy
    <store>
    type mysql
    host localhost
    database [mysqlのデータベース名]
    username ***
    password ***
    key_names server,time_local,request_uri,status,user_agent,host,domain,http_referer
    table customer_action_logs
    sql INSERT INTO request_log (server,time_local,request_uri,status,user_agent,host,domain,http_referer) VALUES (?,from_unixtime(?),?,?,?,?,?,?)
    flush_interval 10s
    </store>
    <store>
    type file
    path /var/log/td-agent/request.json
    </store>
</match>

コマンドを実行
/etc/init.d/td-agent restart
OKが出れば成功

mysqlの設定

ログインし,下記のsql文を実行

CREATE TABLE `request_log` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `server` varchar(128) DEFAULT NULL,
  `time_local` datetime DEFAULT '1000-01-01 01:01:01',
  `request_uri` varchar(500) DEFAULT NULL,
  `status` varchar(5) DEFAULT NULL,
  `user_agent` varchar(255) DEFAULT NULL,
  `host` varchar(128) DEFAULT NULL,
  `domain` varchar(128) DEFAULT NULL,
  `http_referer` varchar(128) DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `index_posts_on_updated_at` (`time_local`),
  KEY `request_uri` (`request_uri`)
) ENGINE=InnoDB AUTO_INCREMENT=51539 DEFAULT CHARSET=utf8;

ここまで設定できると,VPSサーバにあるmysqlに自動でアクセスログが入っているはずです.
このままだと外部からのアクセスは許可されていないため,mysqlの外部接続を許可してください
この記事おすすめです

docker and redash設定

git clone git@github.com:getredash/redash.git
をしdocker-compose.production.ymlを好みで設定します.
ここを参考にしました

これで完成です.

image.png

最後に

良いサイトがたくさんあったので,結構説明をはしょりました.
結構アクセスを数字で見れるのは面白いですね.
uri別にアクセスを分けると変なアクセスを検出し,結構怖くなりました.次はnginxで日本外アクセスを弾くようにしようかな...

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.