【发布时间】:2016-10-11 22:25:30
【问题描述】:
我有一个 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}:%>的转义方法见here。但它仍然将结束 %> 放入。还有其他方法可以在 ERB 中转义字符/字符串吗?
谢谢! 乔什
【问题讨论】:
标签: chef-infra erb chef-recipe chef-template