特定文字列でログを分割したい

特定文字列でログを分割することが可能か教えていただけますでしょうか。

例えば、

2019-12-10 10:00 AAAAA BBBBB CCCC DDDDCUTLINE2019-12-10 10:01 aaaaa bbbbb cccc ddddCUTLINE2019-12-10 10:02 FFFF GGGGG HHHH MMMM

というログがあり、2つのログが1行で出力されてしまっています。
このログ形式の変更は、システム側の制約によりできなく、上記ログを"CUTLINE"という文字列で3つのログに分割出来ないかと思っております。

filterセクションでの記述によって、上記は可能でしょうか。
"CUTLINE"が挿入される数は不規則です。

よろしくお願いいたします。

Logstashをお使いの場合は、splitフィルターでterminatorを指定することで実現ができるかと思います。

https://www.elastic.co/guide/en/logstash/current/plugins-filters-split.html#plugins-filters-split-terminator

設定例

対象文字列がmessageに入っているとします。

filter {
 split {
   field => "message"
   terminator => "CUTLINE"   # ←特定文字列で分割する指定
 }

  # これは改行コードを取るためだけ
  mutate {
    strip => ["message"]
  }
}

結果

ファイルから文字列を取り込んだときの例ですが、以下のようにCUTLINEで分割されて1行のログが、3件のログとなっています。

{
       "message" => "2019-12-10 10:00 AAAAA BBBBB CCCC DDDD",
          "host" => "AAA-BBB-12345",
    "@timestamp" => 2019-12-10T07:25:59.414Z,
      "@version" => "1",
          "path" => "/var/logs/1210.log"
}
{
       "message" => "2019-12-10 10:01 aaaaa bbbbb cccc dddd",
          "host" => "AAA-BBB-12345",
    "@timestamp" => 2019-12-10T07:25:59.414Z,
      "@version" => "1",
          "path" => "/var/logs/1210.log"
}
{
       "message" => "2019-12-10 10:02 FFFF GGGGG HHHH MMMM",
          "host" => "AAA-BBB-12345",
    "@timestamp" => 2019-12-10T07:25:59.414Z,
      "@version" => "1",
          "path" => "/var/logs/1210.log"
}

特定文字列(今回の場合はCUTLINE)がないとき、あるいは4つ5つとあったときでも、この方法であれば対応が可能かと思います。

ご参考になれば幸いです。

お礼が遅くなり申し訳ありません。
logstashを使っておりますので、教えていただいた方法で無事解決できました。ありがとうございました。

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.