なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

Filebeatを使ってみる - Kibanaを立ててみた

Filebeatとは

beatをインストールしたマシン上のファイルを監視し、その内容を収集するbeatです。


いわゆる一般的なログファイル監視・収集ツールという位置付けですが、syslog、Apache2、nginx、mysqlについてはelasticsearchのインデックス生成テンプレート、および、kibanaダッシュボード生成のスクリプトが用意されている分、立ち上げがラク、といったところでしょうか。



FileBeatのセットアップ

ダウンロードとインストール

https://www.elastic.co/guide/en/beats/filebeat/5.5/filebeat-installation.html#rpm-repo
に行くと、「yum使えるなら最新版がもっと簡単に使えるぜ(キリッ」って誘導されるので、そっちのURL参照で。
https://www.elastic.co/guide/en/beats/filebeat/5.5/setup-repositories.html#_yum


内容を見ると、Elasticsearch本体と同じリポジトリのようなので、今回はElasticsearchとBeatsが同じ場所にある構成のときには特にすることはなく、いきなりyumでインストールできます。実運用の場合には、当然離れたところにbeatsをインストールすることになるかと思いますので、その際にリポジトリを登録することにしましょう。

sudo yum -y install filebeat
設定ファイル

https://www.elastic.co/guide/en/beats/filebeat/5.5/filebeat-configuration.html

Dockerじゃないので、こちら。

/etc/filebeat/filebeat.yml

収集対象については、デフォルトで/var/log/配下の「*.log」を監視するようになっています。

filebeat.prospectors:
- input_type: log
  paths:
    - /var/log/*.log
    #- c:\programdata\elasticsearch\logs\*


取り急ぎ動かす上では出力先を指定することくらい。

今回はLogstashで加工することもなく、Elasticsearchに直接送り込みます。また、BeatsのインストールマシンとElasticsearchのインストールマシンも同じです。


リモートのElasticsearchに送り込むときは、

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["localhost:9200"]

の部分を該当サーバーに向けてあげるだけですね。


これはAWS Elasticsearch Serviceに送り込む時もEndpointを

 hosts: ["https://XXXXXXXXXX.ap-northeast-1.es.amazonaws.com:443"]

のように指定してあげれば良いようです。

テンプレート

https://www.elastic.co/guide/en/beats/filebeat/5.5/filebeat-template.html

に書いてあるとおりなんですけど、どうやら、デフォルトでテンプレート「filebeat.template.json」をロードしてくれる模様。

もちろんカスタム可能ですが、一旦、ここには手をつけずに、ロードしてみます。

curl -H 'Content-Type: application/json' -XPUT 'http://localhost:9200/_template/filebeat' -d@/etc/filebeat/filebeat.template.json

このURLで、「/etc/filebeat/filebeat.template.json」の内容に基づくテンプレート「packetbeat」を登録する、という意味になるようですね。
消すときは

curl -XDELETE 'http://localhost:9200/filebeat-*'

で削除できます。

beatsの起動、テスト

https://www.elastic.co/guide/en/beats/filebeat/5.5/filebeat-starting.html

sudo /etc/init.d/filebeat start
curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

このコマンドで、登録がうまく言っているかが分かります。

Kibanaダッシュボード設定

あらかじめ、Kibanaのダッシュボードテンプレートも用意されているので、それを適用してみます。
https://www.elastic.co/guide/en/beats/filebeat/5.5/filebeat-index-pattern.html


yum/rpmインストールの場合のインストール先へ移動しつつ、インポートスクリプトを実行します。

cd /usr/share/filebeat/
./scripts/import_dashboards (-only-inde はいらない模様)

その後、/etc/filebeat/filebeat.ymlを編集して、使いたいmoduleに関する設定を追加する。
その際、同じ/etc/filebeat/にある「filebeat.full.yml」を参考(というかコピペして必要箇所を編集)にします。というか、filebeat.full.ymlに差し替えて必要箇所のみ有効化するのがよいでしょう。

Kibanaで確認

ブラウザで

http://localhost:5601

にアクセスすると、DiscoverにMetricbeatで収集した情報にもとづくグラフが表示されます。

MySQLの情報を取得する

ここでは、「-module:mysql」のブロックを有効にしてみます。

- module: mysql
  # Error logs
  error:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: [エラーログのファイル出力先]

    # Prospector configuration (advanced). Any prospector configuration option
    # can be added under this section.
    #prospector:

  # Slow logs
  slowlog:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: [スロークエリログのファイル出力先]

    # Prospector configuration (advanced). Any prospector configuration option
    # can be added under this section.
    #prospector:

MySQLのエラーログ、スロークエリログに対応しているのですが、両ログファイルのファイルパスを指定するようになっています。よってRDSに対してはこのままでは使えません。上記はオンプレにyumMySQLをインストールした場合のデフォルトパスを記載しています。


設定を入れたら、metricbeatを再起動させます。

sudo /etc/init.d/metricbeat start

これで、欲しかった情報がDashboardの 「Metricbeat MySQL」に表示されるようになります。

MySQL以外のmoduleについても、
https://www.elastic.co/guide/en/beats/filebeat/5.5/filebeat-modules.html
に、使用方法が解説されています。

雑感

登録されてるテンプレート以外の任意のファイルを監視させるのに使えるのか使えないのか、正直良くわかりませんでした。
それなら「Logstash使え」で終了なのかもしれません。


登録されているテンプレに対応したログファイルの取込をやりたいなら、あっというまにセットアップが終わるので、かなりお手軽ですね。