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に対してはこのままでは使えません。上記はオンプレにyumでMySQLをインストールした場合のデフォルトパスを記載しています。
設定を入れたら、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使え」で終了なのかもしれません。
登録されているテンプレに対応したログファイルの取込をやりたいなら、あっというまにセットアップが終わるので、かなりお手軽ですね。
サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/14
- メディア: Kindle版
- この商品を含むブログを見る