logstash - 如何在 Terraform 模板中转义 Logstash sprintf 表达式?

标签 logstash terraform terraform-template-file

我正在尝试使用 Terraform 模板文件来模板化使用 sprintf 表达式的 Logstash 配置。

示例:

filter {
  json { source => "message" }
  geoip {
    source => "[user][rparam][ip]"
  }
  useragent {
    source => "[user][rparam][ua]"
  }
  date {
    match => [ "[@metadata][kafka][timestamp]", "UNIX_MS" ]
  }
  mutate { add_field => { "[@metadata][id]" => "%{[id]}" } }
  mutate { add_field => { "[@metadata][eid]" => "%{[eid]}" } }
  mutate { remove_field => [ "message", "id", "eid", "@version", "tags" ] }
  if "[user]" {
    mutate { remove_field => [ "[user][rparam][ip]" ] }
  }
}

不幸的是,使用的百分比字符“%”也是 Terraform 模板语言的一部分,因此 Terraform 返回以下错误消息给我:

* data.template_file.logstash-output: data.template_file.logstash-output: failed to render : <template_file>:6,24-25: Invalid character; This character is not used within the language., and 1 other diagnostic(s)

如何正确转义这种情况? Terraform 文档没有留下任何线索,仅指定如何转义变量插值表达式 ($)

最佳答案

百分号字符可以用双%% 来扩展。上面的模板文件可以这样写,结果中会正确处理Logstash sprintf表达式:

filter {
  json { source => "message" }
  geoip {
    source => "[user][rparam][ip]"
  }
  useragent {
    source => "[user][rparam][ua]"
  }
  date {
    match => [ "[@metadata][kafka][timestamp]", "UNIX_MS" ]
  }
  mutate { add_field => { "[@metadata][id]" => "%%{[id]}" } }
  mutate { add_field => { "[@metadata][eid]" => "%%{[eid]}" } }
  mutate { remove_field => [ "message", "id", "eid", "@version", "tags" ] }
  if "[user]" {
    mutate { remove_field => [ "[user][rparam][ip]" ] }
  }
}

关于logstash - 如何在 Terraform 模板中转义 Logstash sprintf 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55230567/

相关文章:

logstash - 如何使用Logstash插件-logstash-input-http

elasticsearch - 在弹性索引名称中添加日期的原因和后果

for-loop - 在 terraform 中合并列表内的 map

terraform - 如何使用 Terraform 仅根据环境加载某些文件?

performance - 如何减少 Logstash 内存使用量

java - Logstash计划将重复记录插入elasticsearch

amazon-web-services - Terraform NAT 网关设置路由表

amazon-web-services - Terraform 设置 AWS Codepipeline 通知规则

kubernetes - terraform-kubernetes-provider 如何从文件创建 secret ?

Terraform:如何在 "for_each"中使用多个局部变量和变量