はじめに
Kibana環境の構築 → NGNIXのログを集計 → 可視化のところまでの覚書
* Ruby on Rails 4.2 ← こいつのアクセスログを可視化
* NGINX (Latest)
* Unicorn (Latest)
* Mysql (Latest)
手順
ログ送信側
- 1.NGINXのログ出力設定
- 2.アクセスログを拾って集計サーバーへ転送(今回はローカルに転送)
ログ集計側
- 1.転送されてきたログの受信
- 2.ログをパースしてelasticsearchへ転送
- 3.elasticsearchの設定
- 4.kiabanを使ってelasticsearchのログを可視化
ローカル
- 1.hostsに設定したserver nameを追記(ローカル)
ログ送信側の設定
1.NGINXのログ出力設定
- NGINXのログの出力形式をLTSVにする
$ sudo vim /etc/nginx/nginx.conf
# 下記の設定を追記
http {
~~~~~~~省略~~~~~~~~~~
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format ltsv 'host:$remote_addr\t'
'user:$remote_user\t'
'time:$time_iso8601\t'
'method:$request_method\t'
'uri:$request_uri\t'
'protocol:$server_protocol\t'
'status:$status\t'
'size:$body_bytes_sent\t'
'request_time:$request_time\t'
'upstream_response_time:$upstream_response_time\t'
'upstream_addr:$upstream_addr\t'
'referer:$http_referer\t'
'user_agent:$http_user_agent\t';
access_log /var/log/nginx/access.log ltsv;
~~~~~~~省略~~~~~~~~~~
2.アクセスログを拾って集計サーバーへ転送
- ログを転送するために
fluent-agent-lite
をインストール
# 依存モジュールのインストール
$ sudo yum -y install perl-ExtUtils-MakeMaker
$ sudo yum -y install perl
# agent-liteのインストール
$ git clone https://github.com/tagomoris/fluent-agent-lite
$ git sudo ./fluent-agent-lite/bin/install.sh
# サービスの自動起動設定
$ sudo chkconfig fluent-agent-lite on
$ sudo chkconfig --list fluent-agent-lite
fluent-agent-lite 0:off 1:off 2:on 3:on 4:on 5:on 6:off
$ sudo /etc/init.d/fluent-agent-lite start
- fluent-agent-liteの設定
$ sudo vim /etc/fluent-agent-lite.conf
# 設定ファイルの中身を編集
# fluentd tag prefix of all LOGS
TAG_PREFIX=""
# fluentd message log attribute name (default: message)
FIELD_NAME="message"
# LOGS: tag /path/to/log/file
# 可視化したログはここで拾い上げて転送してあげる
LOGS=$(cat <<"EOF"
nginx.access /var/log/nginx/access.log
EOF
)
# SERVERNAME[:PORTNUM]
# port number is optional (default: 24224)
PRIMARY_SERVER="127.0.0.1"
### or, PRIMARY SERVER LIST FILE of servers
# PRIMARY_SERVERS_LIST="/etc/fluent-agent.servers.primary"
# secondary server setting is optional...
# SECONDARY_SERVER="secondary.fluentd.local:24224"
# SECONDARY_SERVERS_LIST is available as like as PRIMARY_SERVERS_LIST
# max bytes to try read as one action from tail (default: 1MB)
# READ_BUFFER_SIZE=1048576
# PROCESS_NICE default: 0
- 設定後は再起動
$ sudo /etc/init.d/fluent-agent-lite restart
ログ集計側の設定
1.転送されてきたログの受信
- ログの受信やパースのために
td-agent
のインストール
# yumレポの追加
$ sudo vim /etc/yum.repos.d/td.repo
# 設定ファイル内
[treasuredata]
name=TreasureData
baseurl=http://packages.treasuredata.com/2/redhat/\$releasever/\$basearch
gpgcheck=1
gpgkey=http://packages.treasuredata.com/GPG-KEY-td-agent
# インストール & 起動設定
$ sudo yum -y install td-agent
$ sudo /etc/init.d/td-agent start
$ sudo chkconfig td-agent on
$ chkconfig --list td-agent
- fluent用ログの出力場所を作成
$ sudo mkdir -m 755 /var/log/aggregated && sudo chown td-agent:td-agent /var/log/aggregated
- 設定用の必要なプラグインのインストール
$ sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-parser fluent-plugin-elasticsearch fluent-plugin-typecast fluent-plugin-file-alternative
ログの受信設定
# 24224で転送されてきたログを受け付け
$ sudo vim /etc/td-agent/td-agent.conf
<source>
type forward
port 24224
</source>
<match **>
type file
path /var/log/aggregated/unmatched/unmatched
</match>
2.ログをパースしてelasticsearchへ転送
- elasticsearchへの転送設定
$ sudo vim /etc/td-agent/td-agent.conf
# 設定情報を追記
~~~~~~~~~~~~~~~~ 省略~~~~~~~~~~~~~~~~~~~~~~
# Elascticsearch用のパース
<match nginx.access.**>
type copy
<store>
type parser
format ltsv
add_prefix parsed
key_name message
</store>
<store>
type stdout
</store>
</match>
# パースしたデータのキャスト
<match parsed.nginx.access.**>
type typecast
item_types request_time:string, upstream_response_time:string
tag casted.nginx.access
</match>
# パースキャスト済みのデータをElascticsearchに転送
<match casted.nginx.access>
type_name nginx
type elasticsearch
include_tag_key true
tag_key @log_name
host localhost
port 9200
logstash_format true
flush_interval 10s
buffer_type file
buffer_path /var/log/td-agent/buffer/casted.nginx.access.buffer
</match>
~~~~~~~~~~~~~~~~ 省略~~~~~~~~~~~~~~~~~~~~~~
- 再起動
$ sudo /etc/init.d/td-agent restart
- elasticsearchのインストール
# 依存モジュールのインストール
$ sudo yum -y install java-1.7.0-openjdk
- yumレポの追加
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
3.elasticsearchの設定
$ sudo yum -y install elasticsearch
# 起動設定
$ sudo /etc/init.d/elasticsearch start
$ sudo chkconfig elasticsearch on
$ chkconfig --list elasticsearch
elasticsearch 0:off 1:off 2:on 3:on 4:on 5:on 6:off
$ sudo vim /etc/elasticsearch/elasticsearch.yml
# 設定ファイル内
http.cors.allow-origin: "/.*/"
http.cors.enabled: true
network.host: 0.0.0.0
# 設定後に再起動
$ sudo /etc/init.d/elasticsearch restart
4.kiabanを使ってelasticsearchのログを可視化
- 可視化のために
kibana
のインストール
# zipファイルの取得
$ wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz
# 解凍
$ tar xvfz kibana-4.3.1-linux-x64.tar.gz
$ mv -n kibana-4.3.1-linux-x64 kibana
- kibanaの起動スクリプト設置
$ sudo vim /etc/init.d/kibana
#!/bin/bash
# chkconfig: 2345 85 15
# description: ログ可視化サービス
export NAME=kibana
export LOG_DIR=/var/log/${NAME}
export PID=/var/run/${NAME}.pid
export LOG=${LOG_DIR}/${NAME}.log
test -d $LOG_DIR || mkdir $LOG_DIR
case $1 in
'start' )
$0 status >/dev/null 2>&1 && echo "${NAME} is already running." && exit 1
nohup /home/vagrant/${NAME}/bin/${NAME} 0<&- &> $LOG &
echo $! > $PID
;;
'stop' )
$0 status >/dev/null 2>&1 || echo "${NAME} is not running." || exit 1
test -f $PID && cat $PID | xargs kill -s SIGKILL && rm $PID
;;
'restart' )
$0 stop
sleep 1
$0 start
;;
'status' )
test -f $PID || echo "${NAME} not running." || exit 1
PID=`cat $PID`
kill -s 0 $PID >/dev/null 2>&1 && echo "${NAME} is running." && exit 0
echo "${NAME} not running."
exit 1
;;
*)
echo "Usage: $0 start|stop|restart|status"
;;
esac
# 設定の変更
$ sudo chmod 755 /etc/init.d/kibana & sudo chown root:root /etc/init.d/kibana
# 起動設定
$ sudo /etc/init.d/kibana start
$ sudo /etc/init.d/kibana status
kibana is running.
$ sudo chkconfig kibana on
$ chkconfig --list kibana
kibana 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# kibana用のルートをNginxに通す
$ sudo vim /etc/nginx/conf.d/kibana.conf
server {
listen 80;
root /home/vagrant/kibana/;
server_name kibana.local;
index index.html;
location / {
proxy_pass http://localhost:5601;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
# 再起動
$ sudo /etc/init.d/nginx restart
- kibanaの設定変更
$ vim kibana/config/kibana.yml
# 下記を追記
elasticsearch.url: "http://localhost:9200"
host: "localhost"
# kibanaを再起動
$ sudo /etc/init.d/kibana restart
ローカルの設定
1.hostsに設定したserver nameを追記(ローカル)
$ sudo vim /etc/hosts
# 仮想環境のipを指定
192.168.33.10 kibana.local
最後に
下記にアクセスすると見れている!
http://kibana.local