1

我有一个logstash 配置文件,我需要将其转换为chef erb 模板(主要是过滤器部分)。但是,由于 grok 模式的格式,我一直遇到问题。下面是 grok 模式的示例。

  grok {
    match => ["message", "<%{POSINT:seqnum1}>%{POSINT:seqnum2}: (\d*: |\.|\*)*%{SYSLOGTIMESTAMP:timestamp} %{WORD:tz}: \%%{WORD:facility_label}-(%{WORD:switch_id}-)*%{INT:severity}-%{WORD:program}: %{GREEDYDATA:message}"]

这是问题所在。此后不久,我需要在 IP 地址等中进行一些插值填充。但它不会,因为它会<%启动它自己的插值。

mutate {
  add_field => {"[@metadata][sentry][msg]" => "%{host}"
    "[@metadata][sentry][severity]" => "%{severity}"
    "[@metadata][sentry][host]" => "<%= @sentry_host[:ipaddress] %>"
    "[@metadata][sentry][pid]" => "<%= @sentry_pid %>"
    "[@metadata][sentry][key]" => "<%= @sentry_key %>"
    "[@metadata][sentry][secret]" => "<%= @sentry_secret %>"
  }
}

所以上面所有的值都被处理为<%= @sentry_... %>.

有没有办法解决这个问题?我已经尝试过在这里<%%{POSINT:seqnum1}>%{POSINT:seqnum2}:%>看到的逃生方法。但它仍然会关闭。还有其他方法可以在 ERB 中转义字符/字符串吗?%>

谢谢!乔什

4

1 回答 1

0

你不想把%>你的文字。<%%变成文字<%,不需要成对的结束标签。

编辑示例erb -x

$ echo '<%% foo <%= asdf %> bar <%= baz %>' | erb -x
#coding:ASCII-8BIT
_erbout = ''; _erbout.concat "<% foo "; _erbout.concat(( asdf ).to_s); _erbout.concat " bar "; _erbout.concat(( baz ).to_s); _erbout.concat "\n"
; _erbout.force_encoding(__ENCODING__)
于 2016-06-10T21:13:13.540 回答