У меня есть файл конфигурации logstash, который мне нужно преобразовать в шаблон шеф-повара (главным образом раздел фильтров). Тем не менее, я постоянно сталкиваюсь с проблемами из-за формата шаблонов grok. Ниже приведен пример шаблона grok.Шеф-повар ERB-шаблон с проблемами с шаблоном Logstash 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?
Спасибо! Josh
Спасибо за то, что на это так быстро! Однако, если я делаю <%%, он не будет интерполировать что-либо до закрытия/окончания «%>» ПОСЛЕ «@sentry_host [: ipaddress]» \t '' [@metadata] [часовой] [host] "=>" <% = @sentry_host [: ipaddress]%> " " [@metadata] [sentry] [pid] "=>" <% = @sentry_host [: ipaddress]%> "' заканчивается как '\t" [@metadata] [ [host] "=>" <% = @sentry_host [: ipaddress]%> " \t" [@metadata] [sentry] [pid] "=>" 10.100.100.100 "' –
Немного сложно следовать это в комментарии, но вы всегда можете передать фрагмент Erb в 'erb -x', чтобы увидеть сгенерированный код Ruby, который должен дать вам представление о том, что происходит :) – coderanger