เทมเพลต Chef ERB ที่มีปัญหาเกี่ยวกับรูปแบบ Logstash Grok

ฉันมีไฟล์กำหนดค่า logstash ที่ฉันต้องแปลงเป็นเทมเพลต Chef erb (ส่วนใหญ่เป็นส่วนตัวกรอง) อย่างไรก็ตาม ฉันยังคงประสบปัญหาเนื่องจากรูปแบบของรูปแบบ grok ด้านล่างนี้เป็นตัวอย่างของรูปแบบ 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_... %>

มีวิธีแก้ไขเรื่องนี้หรือไม่? ฉันได้ลองใช้วิธี Escape ของ <%%{POSINT:seqnum1}>%{POSINT:seqnum2}:%> แล้ว ดูที่นี่ แต่ยังคงใส่การปิด %> ไว้ มีวิธีอื่นในการหลีกเลี่ยงอักขระ/สตริงใน ERB หรือไม่

ขอบคุณ! จอช


person Joshua Zitting    schedule 10.06.2016    source แหล่งที่มา


คำตอบ (1)


คุณไม่ต้องการใส่ %> ในข้อความของคุณ <%% กลายเป็นตัวอักษร <% และไม่จำเป็นต้องมีแท็กปิดท้ายที่จับคู่กัน

แก้ไขตัวอย่างของ 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
ขอบคุณที่มาเรื่องนี้เร็วมาก! อย่างไรก็ตามหากฉันทำ ‹%% มันจะไม่สอดแทรกสิ่งใด ๆ จนกว่าจะปิด/สิ้นสุด %› หลังจาก @sentry_host[:ipaddress] "[@metadata][sentry][host]" => "<%= @sentry_host[:ipaddress] %>" "[@metadata][sentry][pid]" => "<%= @sentry_host[:ipaddress] %>" กลายเป็น ` [@metadata][sentry][host] =› ‹%= @sentry_host[ :ipaddress] %› [@metadata][ยาม][pid] =› 10.100.100.100` - person Joshua Zitting; 11.06.2016
comment
การติดตามความคิดเห็นนี้เป็นเรื่องยากเล็กน้อย แต่คุณสามารถไพพ์ตัวอย่าง Erb ไปที่ erb -x เพื่อดูโค้ด Ruby ที่สร้างขึ้นได้เสมอ ซึ่งจะทำให้คุณพอเดาได้ว่าเกิดอะไรขึ้น :) - person coderanger; 11.06.2016