2016年10月26日 リリース

Logstash 5.0.0リリース

By Suyog Rao

Logstash 5.0.0がリリースされました。え、何?5.0.0 ですって? そうなんです。最新バージョンは5.0.0なんです。Elastic{ON} 2016での発表を聞き逃した方のために説明しますが、Elastic Stackのすべてのコンポーネントのバージョンを揃えることになりました。ですので、5つのAlpha版、1つのBeta版、そして1つのRCを経て、これまでで最大のメジャーリリースとなるLogstashの正式版を発表できることにワクワクしています。しかも、Logstashだけではなく、Elastic Stack全体が新規リリースというお祭り状態で、すべてElastic Cloudですぐに利用可能になります。

待ちきれない方は、すぐにダウンロードページにアクセスしてください。ただし、重要な変更点のリストを一読していただくことをお勧めします。これまでのリリースノートはすべてこちらで参照できます。

重要な変更点

旧バージョンからアップグレードする前に、この重要な情報 を一読されることをお勧めします。

プレリリース

5.0の各プレリリースに関するブログ記事はここで参照できます:

ハイライト

Logstashのこのリリースでの重要なテーマは、セルフサービストラブルシューティングを可能にすることでした。どのリリースでもパフォーマンスの向上を意識してきましたが、5.0.0では思い切った改善を全面的に行いました。本リリースの主な機能は以下のとおりです:

Logstashはもうブラックボックスではない

新しいモニタリング機能を使用すると、Logstash パイプラインとそのプラグインの実行時の状況を把握できます。このコンポーネントは、Logstashがデータを処理する間にさまざまな運用指標を収集しますが、これらの情報すべてをシンプルなAPIでクエリすることができます。ほとんどのAPIはElasticsearchに従ってモデル化されており、エンドポイントに関してはもちろん、JSONレスポンスに至るまで一貫性を持たせるように配慮しました。モニタリングAPIは大きく次のように分類されます:

  • Node Info API: Logstashインスタンスとその環境(JVM、OS-level情報など)に関する統計情報
  • Plugins Info API: 現在インストールされているすべてのLogstashプラグインについての情報を取得。
  • Node Stats API: ステージで処理されるイベント、CPU、システム統計など、さまざまなランタイム統計。
  • Hot Threads API: Logstashのどの処理がCPUを最も消費しているかを特定。

詳細は、参考ドキュメントを参照してください。

ロギングの改善

Logstashの内部的な動きについてさらに可視性を提供する、というテーマの延長線として、Logstashの内部ロギングフレームワークを強化しました。まず、人気の高いJavaロギングライブラリであるLog4j2に移行しました。ユーザーにとって、これは1つ下のプラグインレベルまでログを収集できることを意味します。詳細度とログレベルをさらに高めるなら、log4j2.propertiesファイルを変更してLogstashを再起動するのですが、この作業は面倒ですし、不要なダウンタイムが生じます。そこで、ロギングレベルを動的に更新できるように、APIを露出させることにしました。これらの設定はただちに有効になり、再起動も要りません。log4j2への移行によるもう1つのメリットは、propertiesファイルを使用して直接、ファイルローテーションポリシーを設定できるようになることです。

パフォーマンス: Javaイベント

このリリースでは、Logstashのパイプラインインフラの重要な部分をJavaで完全に書き直しています。Logstashのデータフローは、内部Eventオブジェクトを使用してカプセル化され、プラグインに渡されて、コンディショナルや、フォルダ参照ルックアップに使用されます。将来的には、ディスク上に存続します。これはユーザーにとって何を意味するでしょうか?パフォーマンステストでは、複数の設定に渡ってスループットが一貫して向上しました。Logstashを通じたイベント処理のスループットが75%も高くなったケースもあります。

プラグイン開発者、またはカスタムプラグインを使っているユーザーには、このセクションを読んで、新しいプラグインAPIにコードを適応させることをお勧めします。

使いやすさ

設定ファイル: Logstashのオプションは、コマンドライン引数ではなく、設定ファイルのlogstash.ymlで設定できるようになりました。たとえば、パイプライン設定、設定ファイルの場所、ロギングオプションなどをすべて1つのファイルで指定することができます。

リリースパッケージ:今回のリリースでは、Logstashリリースパッケージ(Debian、RPM)もオーバーホールされています。これまでLogstashでは、バイナリのインストールに/opt/logstashディレクトリが使用されていましたが、Elasticsearchでは/usr/shareと、/varが使用されていました。Elasticの全製品に渡って一貫したユーザー体験を提供するため(5.0.0の共通のテーマです)、Elasticsearch RPMとDEBのレイアウトを反映するようにLogstash を変更しました。 さらに、*nix プラットフォームでサービスとしてLogstashを実行できるように、systemd と upstart のサポートも追加しました。

統合の強化と新しいプラグイン

Elasticsearchアウトプット: このプラグインはそのままElasticsearch 5.0.0で使用できます。また、今回のパイプラインアーキテクチャの変更を利用できるように、スレッドセーフになっています。この他にも、Elasticsearchへの接続を効率的に再利用する新しい接続プールや、接続の再試行のエクスポネンシャルバックオフ、スニッフィング処理の強化などの機能強化が盛り込まれています。

注: Logstash 5.0 は Elasticsearch 5.x、2.x はもちろん 1.x でも動作します。

Kafka 0.10のサポート: は2か月ほど前に0.9と0.10という バージョンがリリースされ、新しいセキュリティ機能(SSL、クライアントベースの認証、アクセス管理)、コンシューマーAPIの強化などが提供されるようになりました。今回のLogstashリリースでは、そのままKafkaのSSL暗号化とクライアント認証機能を利用できます。

Dissectフィルタの導入: 非構造化データからのフィールド抽出はLogstashの人気の機能です。これまでは、フィールドを抽出する唯一の方法はGrokフィルタでした。Grokは内部的に正規表現を使用するため、ユーザーが式でつまづくことが多々ありました。言い換えれば、単純にフィールドを抽出するためにGrokを使用することは、胡桃を割るのに大ナタを使うようなものだったわけです。Dissectでは、フィールド抽出に区切り文字が使われるだけで、正規表現は使われません。つまり、Dissectは構造がよく分かっているログ行にしか使えないということです。Grokに代わるものではないにせよ、Dissectフィルタは有用なツールとして使えるのではないかと思います。

Google Protobuf コーデック: protobufメッセージを解析し、Logstashイベントに変換する新しいコーデックを Inga Feickが提供してくれました。

言語フィルタ: 特定のフィールドの言語を検出します。Elasticsearchで適切なアナライザを設定するのに使用できる可能性があります。Justin Boveeが提供してくれました。

フィードバック

Logstash 5.0.0は、ユーザーコミュニティの協力、フィードバック、コメント、機能強化リクエストがなければ決して実現できなかったと言っても過言ではない、一大プロジェクトでした。特に、5.0.0を形作るに当たってすばらしいプラグインをメンテナンスしてくれた皆様に感謝いたします。パイオニアプログラムにご参加いただいた方には、Elasticの開発者リレーションシップチームから間もなく連絡が行くと思います。Logstashチーム全員を代表しまして、Logstashに対するみなさまの貢献に深く御礼申し上げます。

ぴかぴかの5.0.0を箱から出して早速使ってみてください。そしてぜひご意見を聞かせてください。それでは新しいLogstashをお楽しみください!