Templat Chef ERB dengan masalah pola Logstash Grok

Saya memiliki file konfigurasi logstash yang perlu saya konversi ke template chef erb (terutama bagian filter). Namun, saya terus mengalami masalah karena format pola grok. Dibawah ini adalah contoh pola 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}"]

Inilah masalahnya. Tak lama setelah ini saya perlu melakukan interpolasi, mengisi alamat IP, dll. Tapi itu tidak akan terjadi karena <% memulai interpolasinya sendiri.

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

Jadi semua nilai di atas diproses sebagai string <%= @sentry_... %>.

Apakah ada cara untuk menyiasatinya? Saya telah mencoba metode escape <%%{POSINT:seqnum1}>%{POSINT:seqnum2}:%> yang terlihat di sini. Tapi itu masih memasukkan %> penutup. Adakah cara lain untuk keluar dari karakter/string di ERB?

Terima kasih! Josh


person Joshua Zitting    schedule 10.06.2016    source sumber


Jawaban (1)


Anda tidak ingin memasukkan %> ke dalam teks Anda. <%% menjadi <% literal dan tidak memerlukan tag akhir berpasangan.

EDIT contoh 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__)
person coderanger    schedule 10.06.2016
comment
Terima kasih sudah melakukan ini begitu cepat! Namun jika saya melakukan ‹%% itu tidak akan menginterpolasi apa pun sampai penutupan/akhir %› SETELAH @sentry_host[:ipaddress] "[@metadata][sentry][host]" => "<%= @sentry_host[:ipaddress] %>" "[@metadata][sentry][pid]" => "<%= @sentry_host[:ipaddress] %>" berakhir menjadi ` [@metadata][sentry][host] =› ‹%= @sentry_host[ :ipaddress] %› [@metadata][penjaga][pid] =› 10.100.100.100` - person Joshua Zitting; 11.06.2016
comment
Agak sulit untuk mengikuti ini dalam komentar, tetapi Anda selalu dapat menyalurkan cuplikan Erb ke erb -x untuk melihat kode Ruby yang dihasilkan, yang akan memberi Anda gambaran tentang apa yang terjadi :) - person coderanger; 11.06.2016