Aggregateのtask_idを複数指定したい

お世話になっております。
LogstashのAggregate filterについて質問させて頂きます。

実現したいこと
複数の指定した項目のデータが一致している場合、ログをグループ化


条件:id,hostが両方同じ値であれば、nameをグループ化
下記の場合、idは同値だがhostが異なる値のため、nameはグループ化されないようにしたい

| id |host | name |
| 1 |0.0.0.0 |AAA |
| 1 |1.1.1.1 |BBB |

結果
| id |host | name |
| 1 |0.0.0.0 |AAA |
| 1 |1.1.1.1 |BBB |

質問
上記を実現したいのですが、「task_id」は1つしか設定できないようです。
Elasticドキュメント
aggregate句はどのように記載すれば良いのでしょうか。

調べてもなかなか分からないのでご質問させてください。
宜しくお願いします。

こんにちわ

idとhostでキーとしてグルーピングをしたい、ということでしたらばtask_idをidとhostを連結した文字列としてはどうでしょうか?

task_id => "%{id}-%{host}"

idとhostを”-"をつなげて連結した文字列で一意になるという前提です。

テストデータとして、以下のようなCSVデータを用意しました。

id host name
1 0.0.0.0 hoge
1 1.1.1.1 fuga
2 0.0.0.0 piyo
2 0.0.0.0 piyopiyo
3 0.0.0.0 bar
3 0.0.0.0 barbar
3 0.0.0.0 barbarbar

logstashのfilterは以下のようにしました。

filter {
    # import csv data
    csv {
        # set Column's names
        columns => ["id","host","name"]
        separator => ","
    }


    aggregate {
        task_id => "%{id}-%{host}"
        code => "
            map['id'] = event.get('id')
            map['host'] = event.get('host')
            map['name'] ||= []
            map['name'] << event.get('name')
            event.cancel()
        "
        push_previous_map_as_event => true
        timeout => 3
    }
}

結果をstdoutで確認してみますと、nameがidとhostごとに出力されています。

{
    "@timestamp" => 2019-08-06T13:19:30.249Z,
      "@version" => "1",
          "host" => "0.0.0.0",
          "name" => [
        [0] "hoge"
    ],
            "id" => "1"
}
{
    "@timestamp" => 2019-08-06T13:19:30.255Z,
      "@version" => "1",
          "host" => "1.1.1.1",
          "name" => [
        [0] "fuga"
    ],
            "id" => "1"
}
{
    "@timestamp" => 2019-08-06T13:19:30.257Z,
      "@version" => "1",
          "host" => "0.0.0.0",
          "name" => [
        [0] "piyo",
        [1] "piyopiyo"
    ],
            "id" => "2"
}
{
    "@timestamp" => 2019-08-06T13:19:38.093Z,
      "@version" => "1",
          "host" => "0.0.0.0",
          "name" => [
        [0] "bar",
        [1] "barbar",
        [2] "barbarbar"
    ],
            "id" => "3"
}

何か参考になれば幸いです。

回答頂きありがとうございます。

上記回答で解決しました!
大変助かりました。

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