【CentOS / Nginx】Fluentd + Elasticsearch + Kibana 環境構築

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