2016年6月21日火曜日

[elk] elasticsearch 5.0 + kibana + beats(filebeat) で、「ログ外だし環境」を構築 elkv5


ずーっと記事にしたかった、elasticsearch関連。
まだ、Alpha版のelasticsearch ver.5 を使って環境を構築したのでメモです!



もくじ



構築環境

OSAmazon Linux
agentfilebeat 1.2.3
backendelasticsearch 5.0.0-aplha3
visualizationkibana 5.0.0-aplha3

今回は、agent(1台)、elasticsearch + kinbana 同居(1台)の2台で構成します。
クラスタは今回は使いません!(あとでハマるので1台構成は注意)

Logstashは今回使わなかったのですが。
訳があったので、記しておきます。
  • ログが存在するサーバーにJava8(JRE)を入れる必要があった
    (入れたくなかった、環境をできるだけいじりたくなかった)
    • beatsがなかなか軽量で、Javaも必要無く要件を満たした。
  • 検証サーバーのインスタンスサイズ「t2.micro」だとlogstash入れて動かしたら、ハングアップした・・・。
  • 収集先でfilter要素で logstash 使えそうだったが、今回はそこまでの要件がなかった。
  • 同様にfilter要件で、 td-agent も入れてみたがうまくelasticsearch5.0にデータが入れられなかった。

注意点

  • kibana 5.0を使うにはelasticsearchも 5.0が必要
    • elasticsearch 5.0はkibana 4.5からも使えます。
  • elasticsearchの待ち受けインターフェイスを変更します。
    (新規インストールだと「localhost」からのみ受け付け)
  • Swapファイルを作るか、最低でも4GBのメモリが必要でした。
    (kibanaが気が付いたら落ちているとかあって。)

EC2立ち上げるのは割愛


要らないですよねw

elasticsearch 5.0

全て、yumでインストールできるようにします。
  • Java8のインストール(OpenJDK)
  • Java7削除 or alternativesでコマンドの既定変更など
  • elasticsearchのrepo設定
  • elasticsearchインストール
って、流れですね~

Java8のインストール(OpenJDK)

sudo yum install java-1.8.0-openjdk

Java7削除 or alternativesでコマンドの既定変更など

今回はelasticsearch専用機なので、alternativesコマンドで設定変更
sudo alternatives --set java /usr/lib/jvm/jre-1.8.0-openjdk.x86_64/bin/java

他にも「/etc/sysconfig/elasticsearch」で、変更する方法もあります!

elasticsearchのrepo設定

本家のdocより


Install Elasticsearch with RPM | Elasticsearch Reference [master] | Elastic

elasticsearch.repo in the /etc/yum.repos.d/
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://packages.elastic.co/elasticsearch/5.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md


elasticsearchインストール

sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
sudo yum install elasticsearch

設定

通信を待ち受ける設定をします。
デフォルトでelasticsearchは「localhost」からしか通信を受け付けないようになっています。

また、これに伴ってクラスタの設定も必要になります。
--- /etc/elasticsearch/elasticsearch.yml.dist   2016-06-20 18:27:40.561676161 +0900
+++ /etc/elasticsearch/elasticsearch.yml        2016-06-14 12:07:55.209848692 +0900
@@ -53,6 +53,7 @@
 # Set the bind address to a specific IP (IPv4 or IPv6):
 #
 # network.host: 192.168.0.1
+network.host: ["_site_", "_local_"]
 #
 # Set a custom port for HTTP:
 #
@@ -71,6 +72,7 @@
 # Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
 #
 # discovery.zen.minimum_master_nodes: 3
+discovery.zen.minimum_master_nodes: 1
 #
 # For more information, see the documentation at:
 # 

elasticsearch 起動・自動起動

sudo service elasticsearch start
sudo chkconfig --add elasticsearch

kibana のインストール

kibanaも入れておいちゃいます!

同じく。全て、yumでインストールできるようにします。
  • kibanaのrepo設定
  • kibanaインストール
って、流れですね~

kibanaのrepo設定

本家のdocより


Getting Kibana Up and Running | Kibana User Guide [5.0] | Elastic
kibana.repo in the /etc/yum.repos.d/
[kibana-5.0.0-alpha]
name=Kibana repository for 5.0.0-alpha.x packages
baseurl=https://packages.elastic.co/kibana/5.0.0-alpha/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

kibanaインストール

sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch # (elasticsearchのインストールで一度やっているので割愛可能)
sudo yum install kibana

kibana 起動・自動起動

sudo service kibana start
sudo chkconfig --add kibana

ログを送る方 filebeat のインストール・設定

今回は安定板で!
本家のdocより


Repositories for APT and YUM | Beats Platform Reference [1.2] | Elastic

全て、yumでインストールできるようにします。
  • beatsのrepo設定
  • filebeatインストール
って、流れですね~

beatsのrepo設定

beats.repo in your /etc/yum.repos.d/
[beats]
name=Elastic Beats Repository
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

filebeatインストール

sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch # (elasticsearchのインストールで一度やっているので割愛可能)
sudo yum install filebeat

filebeatでApacheのログを転送する設定

filebeatはroot権限で動いてしまうので、 logディレクトリ(/var/log/httpd)の権限設定はいりません。

「/etc/filebeat/filebeat.yml」 の編集

--- /etc/filebeat/filebeat.yml.dist     2016-06-20 18:48:02.717938545 +0900
+++ /etc/filebeat/filebeat.yml  2016-06-20 18:47:40.209652293 +0900
@@ -12,6 +12,7 @@
       # For each file found under this path, a harvester is started.
       # Make sure not file is defined twice as this can lead to unexpected behaviour.
       paths:
+        - /var/log/httpd/*_log
         #- /var/log/*.log
         #- c:\programdata\elasticsearch\logs\*

@@ -185,6 +186,7 @@
     # Scheme and port can be left out and will be set to the default (http and 9200)
     # In case you specify and additional path, the scheme is required: http://localhost:9200/path
     # IPv6 addresses should always be defined as: https://[2001:db8::1]:9200
+    hosts: ["elasticsearch:9200"]
     #hosts: ["localhost:9200"]

     # Optional protocol and basic auth credentials.
と、
  • 取得するファイルパス(ワイルドカード指定可能)
  • 送り先のサーバー指定
をするだけで、使えました!
indexやmapの設定が必要な方は、設定も可能みたいでした~

filebeat 起動・自動起動

sudo service filebeat start
sudo chkconfig --add filebeat

elasticsearch側で、データ受付の確認

curlコマンドを使って、indexが作成されたか?で、確認しました。
 # curl 'localhost:9200/_cat/indices?v'
health status index               pri rep docs.count docs.deleted store.size pri.store.size
yellow open   .kibana               1   1          5            0     19.2kb         19.2kb
yellow open   filebeat-2016.06.13   5   1      27311            0        4mb            4mb

念のため、elasticsearchが稼働しているか確認する方法です。
 # curl 'localhost:9200'
{
  "name" : "Golden Archer",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "5.0.0-alpha3",
    "build_hash" : "cad959b",
    "build_date" : "2016-05-26T08:25:57.564Z",
    "build_snapshot" : false,
    "lucene_version" : "6.0.0"
  },
  "tagline" : "You Know, for Search"
}

kibanaでデータ表示

ブラウザで、http://インストールしたサーバー:5601/にアクセス

filebeat-*」 という indexにアクセスするための設定が必要です!
無かったら、作ってくださーい!

左上の「Discover」から、データの検索・表示ができるようになりました!
よかった!(^o^)

まとめ・感想

ここまで、意外にサラッと出来たかのように書いていますが。
ちょこちょこ、ハマりポイントに引っかかっては対応していました。
勉強になりました!w (上部で書いている「注意点」大事)

これで、思った通りの「ログ外出し」ができたわけですが。
Apache httpd だったら、こういう要素分けしてほしいな~(ClientIPやUser-Agentなど)と
いうのには、現時点での設定では対応できていません。。。

これから、調整が必要ですね。

課題

  • AnsibleのPlaybook作る
  • httpd用のmappingを調整する
は、やりたいなーって思っています!

参考

Introducing 5.0: Elastic Stack, X-Pack & Elastic Cloud | Elastic

共有