2016-06-10 95 views
1

我有一個logstash配置文件,我需要轉換爲廚師erb模板(主要是過濾器部分)。不過,由於格羅克模式的格式,我仍然遇到問題。 下面是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。但它仍然把關閉%> in。任何其他方式來轉義ERB中的字符/字符串?

謝謝! Josh

回答

0

您不想將%>置於文字中。 <%%成爲一個文字<%,它不需要配對的結束標籤。的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]」之後關閉/結束「%>」「[@metadata] [sentry] [host]」=>「<% = @sentry_host [:ipaddress]%>「 」[@metadata] [sentry] [pid]「=>」<%= @sentry_host [:ipaddress]%>「'結束爲'\t」[@metadata] [哨兵] [主機]「=>」<%= @sentry_host [:ipaddress]%>「 \t」[@metadata] [sentry] [pid]「=>」10.100.100.100「' –

+0

這有點難這在一個評論中,但你總是可以將Erb的代碼片段傳遞給'erb -x'來查看生成的Ruby代碼,這應該讓你知道發生了什麼事情:) – coderanger