CentOS6.6でのFluentd, Elasticsearch, Kibana環境構築メモ。
複雑な設定とかはしないので, 初心者向けの話。
Elasticsearchのインストール
$ cat /etc/redhat-release
CentOS release 6.6 (Final)
Elasticsearch 1.4.3のインストール。
$ yum install wget java-1.8.0-openjdk-devel
$ rpm --import https://packages.elasticsearch.org/GPG-KEY-elasticsearch
$ sudo vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-1.4]
name=Elasticsearch repository for 1.4.x packages
baseurl=https://packages.elasticsearch.org/elasticsearch/1.4/centos
gpgcheck=1
gpgkey=https://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
$ yum install elasticsearch
動作確認だけのため, ES_HEAP_SIZEは絞っている。
$ vim /etc/init.d/elasticsearch
...
export ES_HEAP_SIZE=512M
chkconfig の登録と Elasticsearch の起動。
$ sudo chkconfig --add elasticsearch
$ chkconfig elasticsearch on
$ sudo service elasticsearch start
$ service elasticsearch status
elasticsearch (pid 972) is running...
curlで確認する。
$ curl 127.0.0.1:9200
{ "status" : 200, "name" : "Rahne Sinclair", "cluster_name" : "elasticsearch", "version" : { "number" : "1.4.3", "build_hash" : "36a29a7144cfde87a960ba039091d40856fcb9af", "build_timestamp" : "2015-02-11T14:23:15Z", "build_snapshot" : false, "lucene_version" : "4.10.3" }, "tagline" : "You Know, for Search" }
ログは以下。
$ tail /var/log/elasticsearch/elasticsearch.log
Kibana-3のインストール
Kibana-3をインストールします。
$ cd ~/tmp
$ curl -L -O https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.tar.gz
$ tar zxvf kibana-3.1.2.tar.gz
$ cp -r kibana-3.1.2/ /usr/share/nginx/html/kibana
Nginxの設定です。
$ nginx -V
nginx version: nginx/1.0.15
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
$ vim /etc/nginx/nginx.conf
...
server {
listen *:8000 ;
server_name your_server_name;
access_log /var/log/nginx/kibana.access.log;
location /kibana/ {
root /usr/share/nginx/html;
index index.html index.htm;
}
location / {
proxy_pass https://127.0.0.1:9200;
proxy_read_timeout 90;
}
}
$ service nginx restart
kibanaへのアクセス時に Connection Failed の場合は Elasticsearch への接続が確立できていません。
原因によりますが, 以下を追加して Elasticsearch を再起動してみます。
$ vim /etc/elasticsearch/elasticsearch.yml
..
bootstrap.mlockall: true
http.cors.allow-origin: "*"
http.cors.enabled: true
単純にElasticsearchが亡くなっている場合もあります。
Fluentd (td-agent) のインストール
td-agentのインストール。
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat.sh | sh
必要に応じて plugin をインストール。
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-elasticsearch
$ yum -y install curl-devel # 必要に応じて
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-forest
設定を変更しておきます。
$ vim /etc/td-agent/td-agent.conf
...
<source>
type tail
format apache
time_format %d/%b/%Y:%T %z
path /var/log/nginx/access.log
pos_file /var/log/td-agent/nginx.access.pos
tag nginx.access
</source>
<match nginx.access>
type rewrite_tag_filter
rewriterule1 path ^/(files|img|js|css)/ ${tag}.clear
rewriterule2 path ^/favicon\.ico/ ${tag}.clear
rewriterule3 path (.+) ${tag}.accept
</match>
<match nginx.access.**>
type forest
subtype copy
remove_prefix nginx.access
<template>
<store>
type elasticsearch
host 127.0.0.1
port 9200
type_name access_log
logstash_format true
logstash_prefix service_front_access
logstash_dateformat %Y%m
buffer_type memory
buffer_chunk_limit 10m
buffer_queue_limit 10
flush_interval 1s
retry_limit 16
retry_wait 1s
</store>
</template>
</match>
td-agent を起動する。
$ /etc/init.d/td-agent start
$ lsof -i:8888
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ruby 30455 td-agent 9u IPv4 3458593 0t0 TCP *:ddi-tcp-1 (LISTEN)
Nginxの設定
nginx.confのlog_formatで”$http_x_forwarded_for”‘ を外しておきます。
Fluentd連携のために/var/log/nginxの権限を変更しておきます。
[1] Fluentd+Elasticsearch+Kibanaによるサーバログの可視化
$ sudo chmod og+rx /var/log/nginx
td-agent のログは以下。
$ tail /var/log/td-agent/td-agent.log
Web ServerからLog Serverにforwardを使ってログ送信
おまけです。
Web Server(Ubuntu 14.04.1 LTS, trusty) から, 先ほど設定したLog Server(CentOS) にforwardを使ってログを送信してみます。
Web Server側でNginxのログを送信してみます。
$ nginx -V
nginx version: nginx/1.4.6 (Ubuntu)
td-agentをインストールします。
$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh | sh
$ sudo apt-get install libcurl3-dev
$ sudo /opt/td-agent/embedded/bin/gem install fluent-plugin-elasticsearch
Web Server側のmatchディレクティブでforwardにLog Sreverを指定して再起動します。
$ sudo vim /etc/td-agent/td-agent.conf
...
<source>
type tail
format apache
time_format %d/%b/%Y:%T %z
path /var/log/nginx/access.log
pos_file /var/log/td-agent/nginx.access.pos
tag nginx.access
</source>
<match nginx.access>
type rewrite_tag_filter
rewriterule1 path ^/(files|img|js|css)/ ${tag}.clear
rewriterule2 path ^/favicon\.ico/ ${tag}.clear
rewriterule3 path (.+) ${tag}.accept
</match>
<match **>
type forward
<server>
host your_server_name
port 24224
</server>
flush_interval 1s
</match>
$ sudo service td-agent start
nginx.confの log_format で “$http_x_forwarded_for”‘ を外して再起動します。
$ sudo service nginx restart
Log server側のtd-agent.confでsourceにforwardを追加して再起動します。
$ vim /etc/td-agent/td-agent.conf
...
## built-in TCP input
## @see https://docs.fluentd.org/articles/in_forward
<source>
type forward
port 24224
</source>
$ /etc/init.d/td-agent restart
Web Serverにアクセスして, Log ServerのKibanaで確認します。
[2] Forward時にSSL認証したいときはfluent-plugin-secure-forward