无法参数化输出LogStash索引-AWS S3输入

发布于 2025-02-02 16:22:10 字数 1419 浏览 3 评论 0原文

早上好,

我们正在尝试使用Logstash从AWS S3收集日志。 这是logstash.conf文件:

input {

  tcp {
    port => 5000
    codec => json
  }

  s3 {
    # Keys for user in prod env
    id => "prod" 
    access_key_id => "key1" 
    secret_access_key => "secretkey1"
    region => "eu-central-1"
    bucket => "buket1"
    prefix => "prefix1/"
    include_object_properties => true
  }

  s3 {
    # Keys for user in preprod env
    id => "preprod"
    access_key_id => "key2" 
    secret_access_key => "secretkey2"
    region => "eu-central-1"
    bucket => "bucket2"
    prefix => "prefix2/"
    include_object_properties => true
  }
  
}

filter {

  # Matching prod logs
  if [id] == "prod" {
    mutate {
      add_field => { "env" => "prod" }
    }
  }
  else if [id] == "preprod" {
    mutate {
      add_field => { "env" => "preprod" }
    }
  }

}

output {
  opensearch {
    hosts       => "https://osb-platform"
      user => "username"
      password => "password"
    index       => "4s-%{[env]}-logs-%{+YYYY.MM.dd}"
    ecs_compatibility => disabled
    ssl_certificate_verification => false
  }
}

如您所见,我有两个来自两个不同环境的输入,我想在不同索引上放置来自不同环境的日志。这是通过在ID OD上进行过滤输入来完成的,它可以根据ENV添加一个新字段。

记录已正确收集,但没有区分索引:从OpenSearch中,我可以看到一个名为4S-%{[ENG]} -Logs-2022.05.30的单个索引,就像它无法解析Env Varible一样。

你能帮我吗?

谢谢,

卢卡

Good morning,

We are trying to collect logs from AWS s3 using Logstash.
Here's the Logstash.conf file:

input {

  tcp {
    port => 5000
    codec => json
  }

  s3 {
    # Keys for user in prod env
    id => "prod" 
    access_key_id => "key1" 
    secret_access_key => "secretkey1"
    region => "eu-central-1"
    bucket => "buket1"
    prefix => "prefix1/"
    include_object_properties => true
  }

  s3 {
    # Keys for user in preprod env
    id => "preprod"
    access_key_id => "key2" 
    secret_access_key => "secretkey2"
    region => "eu-central-1"
    bucket => "bucket2"
    prefix => "prefix2/"
    include_object_properties => true
  }
  
}

filter {

  # Matching prod logs
  if [id] == "prod" {
    mutate {
      add_field => { "env" => "prod" }
    }
  }
  else if [id] == "preprod" {
    mutate {
      add_field => { "env" => "preprod" }
    }
  }

}

output {
  opensearch {
    hosts       => "https://osb-platform"
      user => "username"
      password => "password"
    index       => "4s-%{[env]}-logs-%{+YYYY.MM.dd}"
    ecs_compatibility => disabled
    ssl_certificate_verification => false
  }
}

As you can see, I have two inputs from two different environments, and I want to put logs from different environments on different indexes. This is done through filtering on the id od the input, by adding a new field depending on the env.

Logs are correctly collected, but indexes are not distinguished: from OpenSearch I can see a single index called exactly 4s-%{[env]}-logs-2022.05.30, it's like it cannot resolve the env variable.

Can you please help me?

Thanks,

Luca

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海蓝天 2025-02-09 16:22:10

任何输入中的id选项用于帮助识别输入时,在监视LogStash时,它不用于过滤,因为文档中不存在。

您需要使用标签 type 可以做到这一点的选项。

例如,使用type

  s3 {
    # Keys for user in prod env
    type => "prod" 
    access_key_id => "key1" 
    secret_access_key => "secretkey1"
    region => "eu-central-1"
    bucket => "buket1"
    prefix => "prefix1/"
    include_object_properties => true
  }

然后您的过滤器是:

filter {
  if [type] == "prod" {
    mutate {
      add_field => { "env" => "prod" }
    }
  } else if [type] == "preprod" {
    mutate {
      add_field => { "env" => "preprod" }
    }
  }
}

如果要使用标签,则需要这样的东西:

  s3 {
    # Keys for user in prod env
    tags => ["prod"] 
    access_key_id => "key1" 
    secret_access_key => "secretkey1"
    region => "eu-central-1"
    bucket => "buket1"
    prefix => "prefix1/"
    include_object_properties => true
  }
filter {
  if "prod" in [tags] {
    mutate {
      add_field => { "env" => "prod" }
    }
  } else if "preprod" in [tags] {
    mutate {
      add_field => { "env" => "preprod" }
    }
  }
}

The id option in any input is used to help identify the input while monitoring logstash, it is not used for filtering as it is not present in the document.

You need to use the tags or type options to do that.

For example, using type:

  s3 {
    # Keys for user in prod env
    type => "prod" 
    access_key_id => "key1" 
    secret_access_key => "secretkey1"
    region => "eu-central-1"
    bucket => "buket1"
    prefix => "prefix1/"
    include_object_properties => true
  }

Then your filter would be:

filter {
  if [type] == "prod" {
    mutate {
      add_field => { "env" => "prod" }
    }
  } else if [type] == "preprod" {
    mutate {
      add_field => { "env" => "preprod" }
    }
  }
}

And if you want to use tags, you would need something like this:

  s3 {
    # Keys for user in prod env
    tags => ["prod"] 
    access_key_id => "key1" 
    secret_access_key => "secretkey1"
    region => "eu-central-1"
    bucket => "buket1"
    prefix => "prefix1/"
    include_object_properties => true
  }
filter {
  if "prod" in [tags] {
    mutate {
      add_field => { "env" => "prod" }
    }
  } else if "preprod" in [tags] {
    mutate {
      add_field => { "env" => "preprod" }
    }
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文