re:dash!!!
ダッシュボードの生成元となるデータソース、
MySQLやTreasureData、BigQueryなどのデータベースはもちろん
Google Spreadsheetsからもデータを取得できたり、
Pythonのコードを直接実行することも可能でなんと無料!
ログ可視化に最適なダッシュボードツールですが、自分も検証がてらデビューしてみました。
■今回やりたいこと
・redashサーバをEC2で構築
・redashサーバのnginxアクセスログをS3とRedshiftに格納(fluentdで)
・redashサーバでRedshiftのDBやらを参照できること
BigQueryで実現しようと思いましたが、みんなやってるのでw
結局ログフォーマットを色々いじる上で、
どのサービスを使っても同じなのであえてRedshiftにしてみました。
■re:dashサーバの構築
https://github.com/getredash/redash/releases
・redashインストール
1 2 3 4 5 |
# wget https://github.com/getredash/redash/archive/v2.0.0.zip # unzip v2.0.0.zip # cd redash-2.0.0/ # cd setup/amazon_linux/ # ./bootstrap.sh |
・80番重複エラー修正
redashはnginxで動いているので、
以下のようにデフォルトのポートを変更する必要があります。(80→8081)
1 2 3 4 5 |
# vim /etc/nginx/nginx.conf 40 server { 41 listen 8081 default_server; 42 listen [::]:8081 default_server; 43 server_name localhost; |
・「TemplateNotFound: login.html」の対応
上記の設定をしてnginx再起動すると今度はアクセスができなくなります(私用なのかw)
なので.envにassetのpath指定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# vim /opt/redash/.env export REDASH_LOG_LEVEL="INFO" export REDASH_REDIS_URL=redis://localhost:6379/1 export REDASH_DATABASE_URL="postgresql://redash" export REDASH_COOKIE_SECRET=veryverysecret export REDASH_STATIC_ASSETS_PATH="../rd_ui/dist/" export REDASH_MAIL_SERVER="localhost" export REDASH_MAIL_PORT="25" export REDASH_MAIL_USE_TLS="false" export REDASH_MAIL_USE_SSL="false" export REDASH_MAIL_USERNAME="None" export REDASH_MAIL_PASSWORD="None" export REDASH_MAIL_DEFAULT_SENDER="redash@adachin-gmail.com" export REDASH_HOST="https://redash.adachin.com" |
・もう一度./bootstrap.sh
redashのプロセスを一旦killして./bootstrap.shを叩きます。
1 |
# /etc/init.d/redash_supervisord restart |
・セキュリティーグループはredshiftのport 5439を付与
・ダッシュボードのログイン
■S3の作成
「Tokyo」リージョンにバケットを作成
バケットの中に「logs」フォルダを作成
■IAMの設定
redashユーザを作成
Attach Policyで「AmazonS3FullAccess」を追加してクレデンシャルをメモ
■Redshiftにクラスターの起動
・適当なテーブルを作る
1 2 |
# yum install postgresql # psql -U root -W -h redash.xxxxxxxxxxxxxxxxxx.amazonaws.com -d redash -p 5439 |
下記のSQLを作成する
1 2 3 4 5 6 7 8 9 10 |
redash=# CREATE TABLE access_log ( redash(# time varchar(255), redash(# host varchar(255), redash(# req varchar(255), redash(# status integer, redash(# size integer, redash(# referer varchar(255), redash(# ua varchar(255) redash(# ); CREATE TABLE |
1 2 3 4 5 6 7 8 9 10 11 |
redash=# \d access_log Table "public.access_log" Column | Type | Modifiers ---------+------------------------+----------- time | character varying(255) | host | character varying(255) | req | character varying(255) | status | integer | size | integer | referer | character varying(255) | ua | character varying(255) | |
■fluentd(ラッパー)のインストールと設定(td-agent)
※yumでtd-agentをインストールする場合
1 2 3 4 5 6 |
# yum groupinstall -y "Development Tools" # vi /etc/yum.repos.d/td.repo [treasuredata] name=TreasureData baseurl=http://packages.treasure-data.com/redhat/$basearch gpgcheck=0 |
・Redshitと連携するためにプラグインのインストール
※curlでtd-agentをインストールする場合
1 2 3 4 |
# yum groupinstall -y "Development Tools" # curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sudo sh # /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-redshift # /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-jsonbucket |
・td-agentにaccess_logの読み込み権限を付与
1 |
# chgrp td-agent /var/log/nginx |
・nginx log formatをltdvに変更する
ログフォーマットはデフォルトだと自分でフォーマットを書く必要があるので(正規表現ツラたん)
ltsvにすれば超楽になります。
1 2 3 4 5 6 7 8 |
# vim /etc/nginx.conf log_format ltsv 'time:$time_local\t' 'host:$remote_addr\t' 'req:$request\t' 'status:$status\t' 'size:$body_bytes_sent\t' 'referer:$http_referer\t' 'ua:$http_user_agent\t'; |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# vim /etc/nginx/conf.d/redash.conf upstream rd_servers { server 127.0.0.1:5000; } server { server_tokens off; listen 80 default; access_log /var/log/nginx/rd.access.log ltsv; ~省略~ |
・nginxのログ確認
上記の設定をしたことでフォーマットがltsv用に変わりました。
1 2 |
# tail -f /var/log/nginx/rd.access.log time:23/Jun/2017:05:46:50 +0000 host:xxx.xxxx.xxxx.xxxx req:GET /images/favicon-32x32.png HTTP/1.1 status:200 size:1171 referer:http://xx.xxx.xxx.xxxx./ ua:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36 |
・td-agent.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<source> type tail path /var/log/nginx/rd.access.log pos_file /tmp/access.log.pos tag nginx.access format ltsv time_format %d/%b/%Y:%H:%M:%S %z </source> <match nginx.access> type jsonbucket output_tag redshift.nginx.access json_key log </match> <match redshift.nginx.access> type redshift # s3 aws_key_id xxxxxxxxxxxxxxxx aws_sec_key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx s3_bucket redash-log s3_endpoint s3-ap-northeast-1.amazonaws.com path logs/ timestamp_key_format %Y%m%d/%Y%m%d-%H%M # redshift redshift_host redash.xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.amazonaws.com redshift_port 5439 redshift_dbname redash redshift_user root redshift_password xxxxxxxxxxxxxxxx redshift_schemaname public redshift_tablename access_log redshift_copy_base_options TIMEFORMAT 'auto' TRUNCATECOLUMNS COMPUPDATE ON file_type json # buffer buffer_type file buffer_path /var/log/td-agent/buffer flush_interval 1m buffer_chunk_limit 1g </match> |
・td-agent起動
の前に!そのまま起動するとエラー出るので起動スクリプトを変更します。(権限の問題)
1 2 3 4 5 |
# vim /etc/init.d/td-agent USER=root # Running user #td-agentユーザからrootに # /etc/init.d/td-agent start # chkconfig td-agent on |
・td-agentログ確認
実際にredashに何回かアクセスすると
ログにs3とRedshiftにcopyされました〜と出るはずです。
■S3にちゃんとlogが溜まっているか確認
■Redshiftのクエリが溜まっているか確認
■redashのダッシュボードからRedshiftのDBにアクセスできるか確認
Queries > New Queryからredash DBを選択し、適当にSQL書く。
よし!できた!あとはVisualization Editorでグラフ化するだけ!
■まとめ
少しハマったのはテーブル内のカラムが違ったくらいでしたね。
次回はグラフ化 how to ブログします。
というか個人でredashサーバ作ってこのブログのsshアタックとか
可視化してみよう。(GIPで犯人特定的なw)
おもしろいし簡単!
0件のコメント