2016-06-10 12 views
1

Ich habe eine Logstash Config-Datei, die ich in eine Vorlage von Chef erb konvertieren muss (vor allem die Filter-Sektion). Aufgrund des Formats der Grok Pattern laufe ich jedoch immer wieder auf Probleme ein. Unten ist ein Beispiel für das Grok-Muster.Chef ERB Vorlage mit Logstash Grok Muster Probleme

grok { 
    match => ["message", "<%{POSINT:seqnum1}>%{POSINT:seqnum2}: (\d*: |\.|\*)*%{SYSLOGTIMESTAMP:timestamp} %{WORD:tz}: \%%{WORD:facility_label}-(%{WORD:switch_id}-)*%{INT:severity}-%{WORD:program}: %{GREEDYDATA:message}"] 

Hier ist das Problem. Kurz danach muss ich eine Interpolation ausfüllen eine IP-Adresse usw. Aber es wird nicht, weil die <% startet eine eigene Interpolation.

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 %>" 
    } 
} 

So alle oben genannten Werte werden als Folge von <%= @sentry_... %> verarbeitet.

Gibt es eine Möglichkeit, dies zu umgehen? Ich habe die Escape-Methode von <%%{POSINT:seqnum1}>%{POSINT:seqnum2}:%> gesehen here versucht. Aber es setzt immer noch den schließenden %> in. Irgendwelche anderen Möglichkeiten, um Zeichen/Strings in ERB zu entkommen?

Danke! Josh

Antwort

0

Sie möchten die %> in Ihrem Text nicht setzen. <%% wird zu einem Literal <% und es benötigt kein Paired Ending-Tag.

EDIT Beispiel 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

Vielen Dank für so schnell auf das zu sein! Aber wenn ich das <%% interpoliere, interpoliert es nichts bis zum Abschluss/Ende "%>" NACH dem "@sentry_host [: ipaddress]" \t '" [@metadata] [sentry] [host] "=>" <% = @sentry_host [: ipaddress]%> " " [@metadata] [sentry] [pid] "=>" <% = @sentry_host [: ipadresse]%> "' endet als '\t" [@metadata] [ sentry] [host] "=>" <% = @sentry_host [: ipadresse]%> " \t" [@metadata] [sentry] [pid] "=>" 10.100.100.100 "' –

+0

Es ist ein bisschen schwer zu folgen dies in einem Kommentar, aber Sie können immer ein Schnipsel von Erb nach Erb-x pipen, um den generierten Ruby-Code zu sehen, der Ihnen eine Vorstellung von dem geben sollte, was vor sich geht :) – coderanger