Open6

Logstash関連メモ

necoskijanennecoskijanen

Logstashのconfigファイルの構文定義
https://github.com/elastic/logstash/blob/main/logstash-core/lib/logstash/config/grammar.treetop

  rule comment
    (whitespace? "#" [^\r\n]* newline_or_eoi)+ <LogStash::Config::AST::Comment>
  end

使ったことなかったけれど#でコメントを記述できそう(未確認) た(確認済み)

necoskijanennecoskijanen

conf編集にgrammar.treetopを利用した方が良いと思いrubyでの実装を考えたが、
全量パースせずinput, filter, outputセクション単位丸ごとの書き換えなら他言語で簡単なパーサがあれば良いのでは。

necoskijanennecoskijanen

Logstashのfile output codec rubydebugをtrueにして、
file input codec rubydebugをtrueにしたときの差分を後で確認する
https://www.elastic.co/guide/en/logstash/current/plugins-codecs-rubydebug.html

necoskijanennecoskijanen
  • rubydebugの{ metadata => true }で@metadataまで出力
    • デフォルトではコンソールで配色するためのエスケープ文字が混ざる
    • rubydebugは内部でamazingprintを使用している
      • 以下のようにAmazingPrint.defaultsへamazingprintのオプションを指定するコードをファイルに記述し、dockerの場合は/usr/share/logstash/.aprcに配置すると出力書式を変更可能
      require 'amazing_print'
      AmazingPrint.defaults[:indent] = 0
      AmazingPrint.defaults[:multiline] = false
      AmazingPrint.defaults[:plain] = true
      
    • outputのcodecを rubydebug とした場合、出力はkey => value形式
    • 保存したファイル読み込み時に支障あり
    • → カスタムcodecsを使用
      • event.to_hash_with_metadataで@metadataごと出力可能
  • ただし、file input pluginで読み込んだ場合eventにはinput側の@metadataが設定される
    • テスト時のstubとして@metadataまで再現が必要な場合、こちらもカスタムinputsの使用が必要?
necoskijanennecoskijanen

Logstash Filter Plugin設定のテストツール


https://github.com/agolo/logstash-test-runner

  • last commit: 6 years ago
  • テスト実行時にshellからdockerコンテナのlogstashを起動
    • インストールしている場合はスクリプトを修正
  • reloadでなく都度docker run
  • 入力はstdio、出力はfile
    • confにinputとfilterを記述し、outputはテスト用のが与えられる
  • 事前に用意したjsonlファイルと出力をjsのcliでdiff
    • 比較除外項目はglobalでbash内に記述
  • shell, js

https://github.com/epacke/logstash-pipeline-tester

  • last commit: 3 days ago
  • reloadあり?
  • ブラウザから操作
    • 自動テストしたいので調査保留

https://github.com/gaspaio/logstash-tester

  • last commit: 9 years ago
  • input dataとexpectedをjsonで記述
    • 比較除外項目はケースごと
  • テスト実行時にshellからdockerコンテナのlogstashを起動
  • confはfilterのみ記述
  • reloadではなく都度docker run
  • ruby, shell

https://github.com/magnusbaeck/logstash-filter-verifier

  • last commit: 8 months ago
  • standaloneモードでは都度起動、daemonモードでは裏でreload
  • input dataとexpectedをjson, yamlで記述
    • 比較除外項目はケースごと
  • go

https://github.com/noamraph/logstash-filter-test

  • last commit: 8 months ago
  • logstash-filter-verifierのよりシンプルな使い方を求めたツール
  • input dataとexpectedをjson, yamlで記述
    • 比較除外項目はケースごと
  • おそらくreloadなし
  • python