Шаблон Chef ERB с проблемами шаблона Logstash Grok
У меня есть файл конфигурации logstash, который мне нужно преобразовать в шаблон chef erb (в основном это раздел фильтров). Тем не менее, я продолжаю сталкиваться с проблемами из-за формата шаблонов Грока. Ниже приведен пример рисунка Грока.
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?
Спасибо! мистифицировать
1 ответ
Вы не хотите ставить %>
в вашем тексте. <%%
становится буквальным <%
и ему не нужен парный конечный тег.
РЕДАКТИРОВАТЬ пример 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__)