【问题标题】:How to escape a Logstash sprintf expression in a Terraform template?如何在 Terraform 模板中转义 Logstash sprintf 表达式?
【发布时间】:2019-08-09 08:45:00
【问题描述】:

我正在尝试使用 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 terraform terraform-template-file


    【解决方案1】:

    百分比字符可以用双 %% 来表示。上面的模板文件可以这样写,结果中会正确处理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]" ] }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 2019-09-30
      • 2021-02-23
      • 2021-07-03
      • 2012-07-03
      • 1970-01-01
      相关资源
      最近更新 更多