Filebeat にモジュール機能が追加され、ログ可視化が簡単になりました #elastic #beats

2017.03.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、藤本です。

現地時間 3/28 に Elastic Stack 5.3.0 がリリースされました。

Elastic Stack 5.3.0 は先日の Elastic{ON}17 のロードマップでも発表があった新機能がいくつか含まれていて胸熱でした!新機能が多かったので気になった機能を何回かに分けて試してみます!

今回は Filebeat modules を試してみました。

Filebeat modules

Elasticsearch + Kibana によるログの可視化は登壇資料や、Qiita などでも多く登場しており、ログ可視化のデファクトスタンダードになりつつあります。例えば、アクセスログを可視化して、ユーザーの行動を解析したり、障害の予兆を得たり、パフォーマンス劣化を調査したりなどなど、システム運用に多くの気づきを与えてくれます。ただ可視化するためには Elasticsearch へ抜け漏れ、重複なくログデータを抽出・送信したり、Kibana で可視化するためにログデータを変換・加工したり、Kibana で要件にあった可視化を行うためのビューやダッシュボードを作成するなど、多くの考慮しなければいけない点もあります。

今までも Logstash や Fluentd、Filebeat + Ingest Node によりログの抽出・送信、データ変換を行うことができましたが、データ変換の設定をしたり、Kibana のダッシュボード作成はやはり自分で行う必要があり、Elasticsearch、Kibana の学習コストに加えて、ETL 処理の知識が必要でした。

それが新機能の Filebeat modules によりサポートされるログ形式の可視化が非常に簡単になりました。Filebeat modules は設定ファイルや起動オプションでモジュールを指定することで、Elasticsearch Ingest Node パイプライン、インデックステンプレート、Kibana ビジュアライゼーション、ダッシュボードを自動で作成します。しかも簡単な設定で。既に Elasticsearch + Kibana のログ可視化を試してみて心が折れた方も Filebeat modules を利用すればきっとログ可視化できる!はず!

対応モジュール

Filebeat 5.3.0 では下記のモジュールが用意されており、簡単にログ可視化を始めることができます。

検証しているバージョンが各ドキュメントページに記載されているのでご参照ください。

またモジュールは開発することもでき、他のログでも簡単に実装することができます。

試してみた

今回は Apache のアクセスログ、エラーログを可視化してみました。公式ドキュメントにチュートリアルがありますのでそちらを参考にしています。

環境

  • Elasticsearch サーバ
    • OS : CentOS 7
  • Web サーバ(Wordpress)
    • OS : CentOS 7
    • Apache : httpd-2.4.6-45

各プロダクトのインストール

Elastic Stack 5 から一つの Yum リポジトリで Elastic の各種プロダクトがパッケージでインストールできるようになりました。5.3.0 も同じです。今回は Elasticsearch、Kibana、Filebeat をインストールします。

まずはYumリポジトリ定義ファイルを作成します。

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

それぞれのサーバで必要なプロダクトをインストール、設定します。

Elasticsearch サーバ
# yum install -y elasticsearch kibana
# echo "network.host: 0.0.0.0" >> /etc/elasticsearch/elasticsearch.yml ### Allowed network access setting
# systemctl start elasticsearch
# systemctl start kibana
Web サーバ
# yum install -y filebeat

Ingest Node プラグインのインストール

前述した通り、Filebeat modules は Ingest Node パイプラインを自動で作成します。パイプラインには標準のプロセッサーだけではなく、プラグインのプロセッサーである UserAgent 解析、GeoIP 解析のプラグインを利用します。プラグインコマンドでインストールします。

# /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent
-> Downloading ingest-user-agent from elastic
[=================================================] 100%
-> Installed ingest-user-agent

# /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
-> Downloading ingest-geoip from elastic
[=================================================] 100%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@     WARNING: plugin requires additional permissions     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.lang.RuntimePermission accessDeclaredMembers
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.

Continue with installation? [y/N]y
-> Installed ingest-geoip

# systemctl restart elasticsearch

Elasticsearch を再起動し、インストールしたプラグインを読み込ませます。

Filebeat の設定

出力先 Elasticsearch の設定

デフォルトでは localhost の Elasticsearch にインデキシングしようとするので、対象に書き換えます。

# cp -a /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.origin
# cp -a /etc/filebeat/filebeat.full.yml /etc/filebeat/filebeat.yml
cp: overwrite ‘/etc/filebeat/filebeat.yml’? y
# sed -ie 's/localhost:9200/10.255.0.100:9200/g' /etc/filebeat/filebeat.yml

ダッシュボードの自動生成有効化

デフォルトでは Kibana のヴィジュアライゼーション、ダッシュボードの自動生成が無効化されていますので有効化します。

# sed -ie 's/#dashboards.enabled: false/dashboards.enabled: true/g' /etc/filebeat/filebeat.yml

モジュールの設定

Apache のモジュール設定を有効化します。

/etc/filebeat/filebeat.yml
- module: apache2
  # Access logs
  access:
    enabled: true

    # Ingest Node pipeline to use. Options are `with_plugins` (default)
    # and `no_plugins`. Use `no_plugins` if you don't have the geoip or
    # the user agent Node ingest plugins installed.
    #var.pipeline: with_plugins

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/var/log/httpd/access_log*"]

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

  # 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:  ["/var/log/httpd/error_log*"]

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

以上で設定は完了です。

動作確認

それでは実際にログを取り込み、ダッシューボードを見てみましょう。

filebeat の起動

Web サーバで Filebeat を起動します。

# systemctl start filebeat

起動時に Ingest Node パイプライン、インデックステンプレート、Kibana ヴィジュアライゼーション、ダッシュボードが生成されます。

ログ収集

ダッシュボードを確認するためにログデータを発生させます。Web サーバで適用にページを開きます。

Kibana のダッシュボード確認

Kibana へアクセスします。

まず Index 設定を行います。デフォルトでfilebeat-YYYY.MM.DDの形式でインデックスが作成されるので、filebeat-*で登録します。

Kibana

左のメニューからダッシュボードを選択します。

Kibana 2

各種モジュールのダッシュボードが用意されています。Apache2 を選択します。

Filebeat_Apache2_Dashboard_-_Kibana

時間毎のアクセス数、エラー数の集計、アクセス元端末の解析、エラーレスポンスコードが返っているページのURL、エラーメッセージなどプリセットとしては十分なヴィジュアライゼーションが並べられています。もちろんヴィジュアライゼーションにも保存されていますので、初めて Kibana を触る方にも、どういう設定をすれば、どういう可視化ができるのか分かるのは嬉しいところですね。本来は一番上にアクセス元を指し示したタイルマップが表示されるはずですが、ローカル環境で検証したのでタイルマップは出力されていません。。。

まとめ

いかがでしたでしょうか?
Filebeat modules により、ログの可視化が非常に簡単になりました。ログの可視化をやってみたいけど、初めて触る方や、Elasticsearch へのログ取り込みや、Kibana でのログ可視化で一度心が折れた方には、ログ可視化を体験いただくのに素晴らしい機能だと思います。