FerroStash
Rust製 Logstash互換ログパイプライン
Rust製の、Logstash互換のログ・イベントパイプライン。Logstashと同じ input → filter → output モデルでイベントを取り込み・変換・ルーティングし、Logstashの pipeline.conf DSL(および同等のYAML形式)をJVMなしでネイティブに解釈します。単一の静的バイナリ(約14MB)はミリ秒で起動し数十MBのRAMで動くため、ホストあたりのシッパー集約度を上げられます。
一般的なLogstashパイプラインは約1GBのJVMヒープを抱え起動に数十秒かかりますが、FerroStash は単一の静的バイナリとして動きます。v1.0系では、Logstash 9.x のバンドルプラグインの本番常用サブセット — 111個中98個(約88%)を、パースとフィルタリングのホットパスを重視して実装します。inputsは beats / file / tcp / udp / http / syslog / kafka / redis / s3 / sqs / jdbc / elasticsearch / cloudwatch ほか、filtersは grok / dissect / kv / json / mutate / date / geoip / dns / csv / xml / useragent / cidr / fingerprint / translate / aggregate / throttle にネイティブな Painless 風 script フィルタを加えたもの、outputsは elasticsearch / opensearch / kafka / s3 / http / tcp / udp / file / redis / sqs / sns / cloudwatch / email / datadog、codecsは json / json_lines / multiline / cef / netflow / avro / msgpack / protobuf。信頼性として、at-least-once配送とデッドレターキューを備えた任意のオンディスク永続キュー(電源断耐性のための fsync はオプトイン)と、ノード/パイプライン統計を出すモニタリングAPIを内蔵。正直なスコープ: Logstashの設定/パイプライン互換であって、バイト単位で100%同一のドロップインではありません。互換はプラグイン単位で、対応プラグインでもオプションの一部のみ実装する場合があり、未対応プラグインを使う設定はロード時に即座に失敗します。
課題
Logstash は柔軟なログ・イベントパイプラインですが、一般的な構成では約1GBのJVMヒープを抱え、起動に数十秒かかり、シッパーごとに別のJVMエージェントランタイムを動かします。ホストあたりに載せられるシッパー数が制約され、コンテナ環境では特にメモリと起動時間が重くのしかかります。既存の pipeline.conf とプラグイン資産はそのまま活かしつつ、JVMフットプリントを外して軽量に動かしたい、というのが課題です。
仕組み
- 1
input → filter → output をネイティブ実行
FerroStash は Logstash と同じ input → filter → output モデルでイベントを取り込み・変換・ルーティングします。Logstash の pipeline.conf DSL(および同等のYAML形式)をJVMや別エージェントランタイムなしでネイティブに解釈し、単一の静的バイナリとして動きます。
- 2
本番常用プラグインを実装
v1.0系は Logstash 9.x のバンドルプラグイン111個中98個(約88%)を、パースとフィルタリングのホットパスを重視して実装します。inputs / filters / outputs / codecs の主要プラグインをカバーし、native な Painless 風 script フィルタも備えます。未対応プラグインを使う設定はロード時に即座に失敗するため、サイレントな取りこぼしがありません。
- 3
信頼性とモニタリング
任意のオンディスク永続キューが at-least-once 配送(read/ack カーソル分離、output ack 後のチェックポイント)とデッドレターキューを提供し、電源断耐性のための fsync はオプトインです。ノードとパイプラインの統計を出す組み込みのモニタリングAPIも備えます。
特長
Logstash設定/パイプライン互換 — pipeline.conf DSL(+ YAML)をネイティブ解釈し、Logstash 9.x のバンドルプラグインの約88%(111個中98個)を実装。
単一の静的バイナリ(約14MB)・JVM不要。ミリ秒起動・数十MB RAMで、ホストあたりのシッパー集約度を高められる。
信頼性: at-least-once + DLQ付きのオンディスク永続キュー(fsyncはオプトイン)とモニタリングAPI内蔵。正直なスコープ — 設定互換でありバイト同一のドロップインではない。
含まれるもの
- ハードニング済みの Amazon Linux 2023 AMI(arm64 / Graviton、t4g / c7g / m7g / r7g 級で稼働)
- Logstash 互換のログ・イベントパイプラインを実装した単一の静的 Rust バイナリ(約14MB、JVM不要、ミリ秒起動)
- pipeline.conf DSL と同等のYAML形式のネイティブパーサ
- Logstash 9.x のバンドルプラグイン111個中98個(約88%): inputs(beats / file / tcp / udp / http / syslog / kafka / redis / s3 / sqs / jdbc / elasticsearch / cloudwatch ほか)、filters(grok / dissect / kv / json / mutate / date / geoip ほか + Painless 風 script)、outputs(elasticsearch / opensearch / kafka / s3 / http / file ほか)、codecs(json / json_lines / multiline / cef / netflow / avro / msgpack / protobuf)
- at-least-once 配送とデッドレターキューを備えた任意のオンディスク永続キュー(fsync はオプトイン)
- ノードとパイプラインの統計を出す組み込みのモニタリングAPI
- 別の制御プレーン・テレメトリ送信・ライセンスキー検証なしの構成(課金は AMI の時間課金、AWS の請求を通じて)
こんな用途に
既存の Logstash の pipeline.conf とプラグイン資産を活かしつつ、JVMフットプリントなしで軽量に動かしたいケース
ホストあたりのシッパー集約度を上げたい、メモリと起動時間が制約となるコンテナ/エッジ環境
grok / dissect / json などでログをパースし、Elasticsearch / OpenSearch / Kafka / S3 などへルーティングするパイプライン
別の制御プレーンやテレメトリ送信なしで、自社 VPC 内に閉じたログパイプラインを動かしたいケース
よくある質問
Logstash とどの程度互換性がありますか?
FerroStash は Logstash の設定/パイプライン互換であって、バイト単位で100%同一のドロップインではありません。pipeline.conf DSL をネイティブに解釈し、Logstash 9.x のバンドルプラグイン111個中98個(約88%)を実装します。互換はプラグイン単位で、対応プラグインでもオプションの一部のみを実装する場合があります。未対応プラグインを使う設定はロード時に即座に失敗します。
JVM は必要ですか?
いいえ。FerroStash は単一の静的 Rust バイナリ(約14MB)として動き、JVMも別エージェントランタイムも不要です。ミリ秒で起動し数十MBのRAMで動くため、ホストあたりのシッパー集約度を上げられます。
配送保証はありますか?
任意のオンディスク永続キューが at-least-once 配送(read/ack カーソル分離、output ack 後のチェックポイント)とデッドレターキューを提供します。電源断耐性のための fsync はオプトインで有効化できます。
これは AWS のサービスを置き換えるものですか?
Logstash は Elastic のオープンソースプロジェクトであり、AWS のサービスではありません。FerroStash はその Logstash 互換のログパイプラインを、お客様自身の Amazon EC2 上で動かす自己管理型の製品です。お客様の VPC 内で動作する通常の Amazon Linux 2023 AMI として提供されます。
どのように課金されますか?
AMI の時間課金のソフトウェア利用料に、お客様が選ぶ EC2(t4g / c7g / m7g / r7g 級、Arm)の料金が加わります。インスタンスタイプ別の従量課金で、別の制御プレーン・テレメトリ送信・ライセンスキー検証はありません。
料金モデル
時間課金のソフトウェア利用料 + EC2(t4g / c7g / m7g / r7g 級、Arm)。インスタンスタイプ別の従量課金。