AWS ELBログをFluentd+Elasticsearch+Kibanaでグラフ化する

構成

ソフトウェア バージョン
OS CentOS 7.2
td-agent td-agent-2.3.2
Elasticsearch elastic-search-2.4.0-1
Kibana kibana-4.5.4-1

Elasticsearchインストール

こちらの公式ガイドに沿って行います。

www.elastic.co

前提のJavaだけ先にインストールしておきます。

yum install java-1.8.0-openjdk

Elasticsearchをインストールしていきます。

リポジトリの準備。

rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
cat <<EOF > /etc/yum.repos.d/elasticsearch-2.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOF

インストール実行

yum install elasticsearch

Elasticsearchに外部からアクセスできるように、 network.host の値を設定します。 とりあえず動作確認という段階なら0にするとどこからでもアクセス可能となります。

vi /etc/elasticsearch/elasticsearch.yml
network.host: 0

Elasticsearchの起動と有効化をしておきます。

systemctl start elasticsearch
systemctl enable elasticsearch

稼働確認

インストールが完了したら、サーバ上からElasticsearchの接続テストしてみます。

$ curl -s -XGET http://localhost:9200/_cluster/health?pretty
{
  "cluster_name": "elasticsearch",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 0,
  "active_shards": 0,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 0,
  "delayed_unassigned_shards": 0,
  "number_of_pending_tasks": 0,
  "number_of_in_flight_fetch": 0,
  "task_max_waiting_in_queue_millis": 0,
  "active_shards_percent_as_number": 100
}

クライアントPC側のBrowserからもテストしておきます。

http://IPアドレスorホスト名:9200/_cluster/health?pretty

f:id:yomon8:20160912132502p:plain

Fluentdインストール

公式ガイドに沿って作業します。

docs.fluentd.org

インストールはコマンド一本です。

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

Elasticsearchとの連携プラグイン

Elasticsearchとの連携のプラグインとして、こちらのPluginを利用させてもらいます。

github.com

/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elasticsearch

AWS ELBとの連携プラグイン

ELBのログ取得のプラグインとしてはこちらのPluginを利用させてもらいます。

github.com

/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-elb-log 

プラグイン設定

プラグインに合わせて設定を行います。

vi /etc/td-agent/td-agent.conf
<source>
  @type elb_log
  region ap-northeast-1
  s3_bucketname s3bucketname
  s3_prefix path/to/elblog 
  timestamp_file /var/tmp/fluentd-elb_last_at.dat
  buf_file /var/tmp/fluentd-elb_log.tmp
  refresh_interval 300
  tag elb_log.access
  access_key_id ACCESS_KEY
  secret_access_key SECRET_KEY
</source>
<match elb_log.**>
  type elasticsearch
  type_name access_log
  host localhost
  port 9200
  logstash_format true
  include_tag_key true
  tag_key @log_name
  buffer_type file
  buffer_path /var/tmp/fluentd-elsticsearch.buf
</match>

td-agentを起動と有効化しておきます。

systemctl start td-agent
systemctl enable td-agent

fluentd動作確認

fluentd起動後にログを確認します。

tail -f /var/log/td-agent/td-agent.log

うまくいっていると以下のようなログが出力されます。

2016-09-11 22:42:08 -0400 [info]: processing 2 object(s).
2016-09-11 22:42:09 -0400 [info]: Connection opened to Elasticsearch cluster => {:host=>"localhost", :port=>9200, :scheme=>"http"}

ログが確認できたら、データが登録されているか確認してみます。

まずはインデックスを確認します。

curl -XGET http://localhost:9200/_aliases?pretty
{
  "logstash-2016.09.12" : {
    "aliases" : { }
  }
}

上記のインデックスを元にして以下のようなクエリを投げると登録されているデータが表示されます。

curl -XGET http://localhost:9200/logstash-2016.09.12/_search -d '{"query":{ "match_all":{}}}' | jq .

Kibana導入

Elasticsearchにデータが登録されていること確認できたいので、可視化のためのKibanaをインストールします。     こちらも公式ガイドに沿ってインストールします。

www.elastic.co

yumレポジトリを準備します。

cat <<EOF > /etc/yum.repos.d/kibana.repo
[kibana-4.5]
name=Kibana repository for 4.5.x packages
baseurl=http://packages.elastic.co/kibana/4.5/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOF

インストールして起動・有効化していきます。

yum install kibana
systemctl start kibana
systemctl enable kibana

以下のURLでアクセスします。

http://IPアドレスorホスト名:5601/app/kibana

f:id:yomon8:20160912132517p:plain

参考URL

使用しているプラグインは異なりますが、全般に参考にさせていただきました。

ELBのアクセスログをfluentd(fluent-plugin-elb-access-log)+Elasticsearch+kibanaで可視化する - Qiita

Elasticsearch API 一覧

Elasticsearch API 一覧 – Hello! Elasticsearch. – Medium

利用したプラグイン

GitHub - shinsaka/fluent-plugin-elb-log: Amazon ELB log input plugin

GitHub - uken/fluent-plugin-elasticsearch