Score:0

Nginx คำนวณตัวแปรบันทึกโดยใช้ lua

ธง ng

ฉันกำลังพยายามให้ Nginx (ทำงานเป็น Kubernetes ingress controller) เพื่อเข้าสู่ระบบเป็นมิลลิวินาทีแทนที่จะเป็นวินาที (นี่คือเพื่อให้เราสามารถนำเข้าบันทึกในระบบ Elasticsearch ที่มีอยู่ของเรา ซึ่งมีระบบอื่นที่เข้าสู่ระบบใน ms อยู่แล้ว)

ขึ้นอยู่กับสิ่งนี้ โพสต์บล็อก ฉันได้ลองสิ่งต่อไปนี้ในบริบท 'http':

  แผนที่ $host $request_time_ms {
    เริ่มต้น 'ทดสอบ';
  }
  log_by_lua_block { 
    ngx.var.request_time_ms = 'ฟู'
  }

จากนั้นในสตริงบันทึกของฉัน:

 '{...."duration_ms":"$request_time_ms",....}'

แต่ค่าที่บันทึกจะเป็นค่าเริ่มต้นเสมอ ทดสอบ มากกว่าที่คาดไว้ของ ฟู.

ในที่สุดมันควรจะจบลงดังนี้:

ngx.var.request_time_ms = math.floor(tonumber(ngx.var.request_time) * 1,000)

แต่ฉันแค่พยายามทำให้สถานการณ์พื้นฐานทำงานก่อน

มีความคิดว่าเหตุใดจึงไม่ทำงาน มันเหมือนกับว่า log_by_lua_block แค่ไม่ทำงาน

Score:0
ธง gr

ฉันไม่สามารถจำลองสถานการณ์ของคุณบนเซิร์ฟเวอร์ของฉันเอง (ต้องบอกว่าฉันไม่ได้ใช้ kubernetes หรือ docker สำหรับการทดสอบ) สำหรับฉันการกำหนดค่านี้ใช้งานได้ตามที่คาดไว้ มันดูเหมือนจริงๆ log_by_lua_block ไม่ทำงานเลยบนตัวควบคุมขาเข้าของคุณ แต่คุณสามารถใช้วิธีแก้ปัญหาต่อไปนี้เพื่อรับเวลาคำขอเป็นมิลลิวินาทีแทนที่จะเป็นวินาที:

แผนที่ $request_time $request_time_ms {
    ~^0\.0*(\d+?)$ $1;
    ~(\d+)\.(\d+) $1$2;
}
ng flag
ดูเหมือนว่าจะใช้งานได้ แต่ฉันก็มีค่าบางอย่างเช่นกัน: ` "duration":0.112, "duration_ms":"8"` ซึ่งแปลกมาก....
Ivan Shatsky avatar
gr flag
มันดูแปลกจริงๆ แต่ฉันไม่มีคำตอบว่าทำไมมันถึงเกิดขึ้น ...

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา