2016-06-10 3 views
1

У меня есть файл конфигурации 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

ответ

0

Вы не хотите помещать %> в свой текст. <%% становится литералом <%, и ему не нужен парный конечный тег.

EDIT пример 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__) 
+0

Спасибо за то, что на это так быстро! Однако, если я делаю <%%, он не будет интерполировать что-либо до закрытия/окончания «%>» ПОСЛЕ «@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 "' –

+0

Немного сложно следовать это в комментарии, но вы всегда можете передать фрагмент Erb в 'erb -x', чтобы увидеть сгенерированный код Ruby, который должен дать вам представление о том, что происходит :) – coderanger

Смежные вопросы