ラック
Home > ブログ > 記事 > 2016年12月 > ELKスタックインストールのテスト2

ELKスタックインストールのテスト2

カテゴリ: Linux, サーバ

前回、Elasticsearch、Logstash、KibanaのインストールとKibanaの表示まではなんとかこぎつけました。今回はBeats(Filebeat)のインストールと設定をします。

ドキュメント

基本はこのドキュメントの通りに。今回はテキストファイルのログを投げたいのでFilebeatを使う方針(前回の通り)。

Beats

前回Elasticsearch、Logstash、Kibanaをインストールしたサーバではなく、別のサーバからログを投げたいのでそちらで作業。


# curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.0.2-x86_64.rpm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 8447k  100 8447k    0     0  1712k      0  0:00:04  0:00:04 --:--:-- 2234k

# sudo rpm -vi filebeat-5.0.2-x86_64.rpm
警告: filebeat-5.0.2-x86_64.rpm: ヘッダ V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
パッケージインストールの準備中...
filebeat-5.0.2-1

# whereis filebeat
filebeat: /usr/bin/filebeat.sh /etc/filebeat /usr/share/filebeat

入りました。


# vi /etc/filebeat/filebeat.yml

- input_type: log

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    #- /var/log/*.log #コメント
    - /var/log/httpd/*_log #この辺りを見たい
  document_type: apache
- input_type: log
  paths:
    - /MY/APP/log/*.log #この辺りを見たい

#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch: #コメントアウト
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"] #コメントアウト

#----------------------------- Logstash output --------------------------------
output.logstash: #コメント外す
  # The Logstash hosts
  #hosts: ["localhost:5044"]
  hosts: ["XXX.XXX.XXX.XXX:5044"] #サーバを指定

続いてfilebeatの設定。今回はWebサーバと自分のアプリのログが見たかったのでそれをinputに指定。logstash経由で投げるのでElasticsearchの設定はコメントアウトして、逆にLogstashの設定のコメントを外します(サーバのIPを指定)。


# cd /usr/share/filebeat/bin/

# ./filebeat -configtest -e -path.config /etc/filebeat/
beat.go:264: INFO Home path: [/usr/share/filebeat/bin] Config path: [/etc/filebeat/] Data path: [/usr/share/filebeat/bin/data] Logs path: [/usr/share/filebeat/bin/logs]
beat.go:174: INFO Setup Beat: filebeat; Version: 5.0.2
logp.go:219: INFO Metrics logging every 30s
logstash.go:90: INFO Max Retries set to: 3
outputs.go:106: INFO Activated logstash as output plugin.
publish.go:291: INFO Publisher name: bbs.acs-net.co.jp
async.go:63: INFO Flush Interval set to: 1s
async.go:64: INFO Max Bulk Size set to: 2048
Config OK

設定テスト。OKのようです。

Loading the Template Manually – required for Logstash output

Step 4: Loading the Index Template in Elasticsearch | Filebeat Reference [master] | Elastic

とのことで、Logstashを使う場合は手動でFilebeatのテンプレートを読み込ませないといけないので、その設定を。


# curl -XPUT 'http://XXX.XXX.XXX.XXX:9200/_template/filebeat' -d@/etc/filebeat/filebeat.template.json
curl: (7) couldn't connect to host

ですよね。Elasticsearchを外部からアクセスできるようにしないといけないですよね…。ということで、Elasticsearch、Logstash、Kibanaをインストールしたサーバにログインして、ElasticsearchとKibanaを一度シャットダウンしてnetwork.hostの設定を追加します。


# vi /etc/elasticsearch/elasticsearch.yml
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1
network.host: 0.0.0.0 #追加

ついでにkuromojiも入れましょう。


# /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
-> Downloading analysis-kuromoji from elastic
[=================================================] 100%??
-> Installed analysis-kuromoji

OKです。

ここで再び沼へ…

さて、ここでElasticsearchを起動しようとしたのですが、何度やっても設定を見直してもダメで完全に嵌まりました。


[ERROR][o.e.b.Bootstrap          ] [541jXlG] node validation exception
bootstrap checks failed
max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]
[INFO ][o.e.n.Node               ] [541jXlG] stopping ...
[INFO ][o.e.n.Node               ] [541jXlG] stopped
[INFO ][o.e.n.Node               ] [541jXlG] closing ...
[INFO ][o.e.n.Node               ] [541jXlG] closed

どうも一度起動するのですが、すぐ落ちてしまう感じ。エラー文で検索すると、以下のサイトが引っかかりました。

「/etc/security/limits.conf」…?

Java系だとファイルディスクリプタの上限に達してアプリが落ちることがままある模様。とりあえず動かすことを最優先で、手軽な方法を取る(再起動しても上限が戻らないような設定はしない)ことに。


# vi /etc/security/limits.conf

elasticsearch    soft    nproc           2048
elasticsearch    hard    nproc           2048

しかしここで、自分の場合


sudo service elasticsearch start

しているので、むしろrootに必要なのでは?という結論に。そこでElasticのドキュメントに書いてある

This can be done by setting ulimit -u 2048 as root before starting Elasticsearch, or by setting nproc to 2048 in /etc/security/limits.conf.

Number of threads | Elasticsearch Reference [master] | Elastic

上記のコマンドを実施。


# ulimit -u 2048
# ulimit -n
1024

ん???

何故上限が上がらない…。とここでまた沼に嵌まりました。

結果的にはオプションを-uではなく-nにすることで解決しました。


# ulimit -n 2048
# ulimit -n
2048

…これ絶対罠だ…。

マメ


max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]

のエラーが出たら、


# vi /etc/elasticsearch/elasticsearch.yml

network.host: 0.0.0.0

network.hostの追加と、


# ulimit -u 2048

上限数を変更。

ここまでやってようやくFilebeatをインストールしたサーバにログインして


# curl -XPUT 'http://XXX.XXX.XXX.XXX:9200/_template/filebeat' -d@/etc/filebeat/filebeat.template.json

テンプレートのインポートができました。


# sudo /etc/init.d/filebeat start
Starting filebeat:
beat.go:264: INFO Home path: [/usr/share/filebeat] Config path: [/etc/filebeat] Data path: [/var/lib/filebeat] Logs path: [/var/log/filebeat]
beat.go:174: INFO Setup Beat: filebeat; Version: 5.0.2
logp.go:219: INFO Metrics logging every 30s
logstash.go:90: INFO Max Retries set to: 3
outputs.go:106: INFO Activated logstash as output plugin.
publish.go:291: INFO Publisher name: bbs.acs-net.co.jp
async.go:63: INFO Flush Interval set to: 1s
async.go:64: INFO Max Bulk Size set to: 2048
Config OK
                                                           [  OK  ]

ようやく、Filebeatが起動できました…。

Kibanaから動作確認

Filebeatを起動したサーバ上のWebサイトにアクセスして、その中のgifファイルがどのくらい読み込まれたかを棒グラフにした、という簡単な抽出ですが、とりあえずApacheのログが投げられてきて、それを保存できていることは分かりました。

あとはFilebeatの設定を変えたり、Kibanaの抽出条件を弄ったりしてみましょう。

…ようやく、ここまで来た…長かった…。

参考

Logstashの設定の参考

タグ: データベース, サーバ環境・構築

 



関連する記事一覧