Шаблон 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__)
Другие вопросы по тегам