"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ฉันขอแนะนำให้คุณอ่านสำเนารายงานของ Roman Khavronenko เรื่อง “ExtensedPromQL”

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

สั้น ๆ เกี่ยวกับฉัน. ฉันชื่อโรมัน ฉันทำงานที่ CloudFlare และอาศัยอยู่ในลอนดอน แต่ฉันก็เป็นผู้ดูแล VictoriaMetrics ด้วย
และฉันเป็นผู้เขียน ปลั๊กอิน ClickHouse สำหรับกราฟาน่าและ ClickHouse-proxy เป็นพร็อกซีขนาดเล็กสำหรับ ClickHouse

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

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

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

เริ่มจากจุดเริ่มต้นกันก่อน PromQL คืออะไร? PromQL คือภาษาคิวรีของ Prometheus นี่คือวิธีที่เราสร้างแบบสอบถามใน Prometheus เพื่อรับข้อมูลอนุกรมเวลา

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ข้อมูลอนุกรมเวลาคืออะไร? แท้จริงแล้วนี่คือพารามิเตอร์สามตัว

พวกเขาจะ:

  • เรากำลังดูอะไรอยู่?
  • เมื่อเรามองดูมัน
  • และมันแสดงค่าอะไร?

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

หากคุณดูแผนภูมินี้ (แผนภูมินี้มาจากโทรศัพท์ของฉันที่แสดงสถิติจำนวนก้าวของฉัน) ก็สามารถตอบคำถามเหล่านี้ได้อย่างรวดเร็ว

เราดูที่ขั้นตอน เราเห็นความหมายและเราเห็นเวลาที่เรามองมัน นั่นคือดูแผนภาพนี้ พูดง่ายๆ ว่าวันอาทิตย์ฉันเดินประมาณ 15 ก้าว นี่คือข้อมูลอนุกรมเวลา

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ตอนนี้เรามา "แยก" (แปลง) พวกมันเป็นรูปแบบข้อมูลอื่นในรูปแบบของตาราง ที่นี่เรามีสิ่งที่เรากำลังดูอยู่ด้วย ที่นี่ฉันได้เพิ่มข้อมูลเพิ่มเติมเล็กน้อยซึ่งเราจะเรียกว่า meta-data เช่น ไม่ใช่ฉันที่ผ่านเหตุการณ์นี้ แต่เป็นคนสองคนเช่น Jay และ Silent Bob นี่คือสิ่งที่เรากำลังดูอยู่ มันแสดงอะไรและมันแสดงค่านั้นเมื่อใด

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko
ตอนนี้เรามาลองเก็บข้อมูลทั้งหมดนี้ไว้ในฐานข้อมูล ตัวอย่างเช่น ฉันใช้ไวยากรณ์ ClickHouse และที่นี่เราสร้างตารางหนึ่งชื่อ "ขั้นตอน" นั่นคือ สิ่งที่เรากำลังดูอยู่ มีเวลาที่เราพิจารณามัน มันแสดงอะไรและข้อมูลเมตาบางส่วนที่เราจะจัดเก็บข้อมูลว่าเป็นใคร: Jay และ Silent Bob

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และเพื่อพยายามแสดงภาพทั้งหมดนี้ เราจะใช้ Grafana เพราะอย่างแรกเลย มันสวยงาม

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

เราจะใช้ปลั๊กอินนี้ด้วย มีสองเหตุผลสำหรับเรื่องนี้ ประการแรกเพราะฉันเขียนมัน และฉันรู้ว่ามันยากแค่ไหนในการดึงข้อมูลอนุกรมเวลาจาก ClickHouse มาแสดงใน Grafana

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

เราจะแสดงในแผงกราฟ นี่เป็นแผงที่ได้รับความนิยมมากที่สุดใน Grafana ซึ่งแสดงการขึ้นต่อกันของค่าตรงเวลา ดังนั้นเราจึงต้องการเพียงสองพารามิเตอร์เท่านั้น

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko
มาเขียนแบบสอบถามที่ง่ายที่สุด - วิธีแสดงสถิติขั้นตอนใน Grafana จัดเก็บข้อมูลนี้ใน ClickHouse ในตารางที่เราสร้างขึ้น และเราเขียนคำของ่ายๆ นี้ เราเลือกจากขั้นตอน เราเลือกค่าและเลือกเวลาของค่าเหล่านี้ เช่น พารามิเตอร์สามตัวเดียวกันกับที่เราพูดถึง

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

แล้วเราจะได้กราฟแบบนี้ ใครจะรู้ว่าทำไมเขาถึงแปลกมาก?

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ถูกต้องเราต้องเรียงลำดับตามเวลา

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และสุดท้ายแล้วเราจะมีตารางการแข่งขันที่ดีขึ้น แต่ก็ยังแปลกอยู่ ใครจะรู้ว่าทำไม? ใช่แล้ว มีผู้เข้าร่วมสองคน และที่ Grafana เราแจกอนุกรมเวลาสองชุด เพราะหากคุณดูแบบจำลองข้อมูลอีกครั้ง อนุกรมเวลาแต่ละชุดจะเป็นการผสมผสานชื่อและป้ายกำกับคีย์-ค่าทั้งหมดที่ไม่ซ้ำกัน

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ดังนั้นเราจึงต้องเลือกบุคคลที่เฉพาะเจาะจง เราเลือกเจย์

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และมาวาดอีกครั้ง ตอนนี้กราฟดูเหมือนความจริง ตอนนี้เป็นกำหนดการปกติและทุกอย่างทำงานได้ดี

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และคุณอาจรู้วิธีทำสิ่งเดียวกันโดยประมาณ แต่ใน Prometheus ผ่าน PromQL บางอย่างเช่นนี้ ง่ายกว่าเล็กน้อย และเรามาทำลายมันทั้งหมดลง เราทำตามขั้นตอน และกรองโดยเจย์ เราไม่ได้ระบุที่นี่ว่าเราต้องได้รับค่าและเราไม่ได้เลือกเวลา

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ทีนี้ลองคำนวณความเร็วในการเคลื่อนที่ของ Jay หรือ Silent Bob กัน ใน ClickHouse เราจะต้องทำการ runDifference เช่น คำนวณความแตกต่างระหว่างคู่ของคะแนนแล้วหารตามเวลาเพื่อให้ได้ความเร็วที่แน่นอน คำขอจะมีลักษณะเช่นนี้

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และจะแสดงค่าเหล่านี้โดยประมาณ เช่น Silent Bob หรือ Jay ใช้เวลาประมาณ 1,8 ก้าวต่อวินาที

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และใน Prometheus คุณก็รู้วิธีการทำเช่นนี้เช่นกัน ง่ายกว่าเมื่อก่อนมาก

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenkoและเพื่อให้ทำได้ง่ายใน Grafana ฉันจึงเพิ่ม wrapper นี้ ซึ่งดูคล้ายกับ PromQL มาก เรียกว่า Rate Macros หรืออะไรก็ได้ที่คุณต้องการเรียกมัน ใน Grafana คุณเพียงแค่เขียนว่า "rate" แต่ลึกลงไปแล้ว มันจะกลายเป็นคำขอที่ยิ่งใหญ่นี้ และคุณไม่จำเป็นต้องดูด้วยซ้ำ ว่ามันอยู่ที่นั่น แต่คุณประหยัดเวลาได้มาก เพราะการเขียนคำสั่ง SQL ขนาดใหญ่นั้นมีราคาแพงเสมอ คุณสามารถทำผิดพลาดได้ง่ายและไม่เข้าใจว่าเกิดอะไรขึ้นเป็นเวลานาน

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และนี่คือคำขอที่ไม่พอดีกับสไลด์เดียว และฉันต้องแยกออกเป็นสองคอลัมน์ด้วยซ้ำ นี่เป็นคำขอใน ClickHouse เช่นกัน ซึ่งสร้างอัตราเดียวกัน แต่สำหรับอนุกรมเวลาทั้งสอง: Silent Bob และ Jay เพื่อให้เรามีอนุกรมเวลาสองชุดบนแผงควบคุม และนี่เป็นเรื่องยากมากแล้วในความคิดของฉัน

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และตาม Prometheus จะเป็นผลรวม (อัตรา) สำหรับ ClickHouse ฉันได้สร้างมาโครแยกต่างหากชื่อ RateColumns ซึ่งดูเหมือนข้อความค้นหาใน Prometheus

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

เราลองดูแล้วและดูเหมือนว่า PromQL จะเจ๋งมาก แต่แน่นอนว่ามันมีข้อจำกัด

พวกเขาจะ:

  • เลือกอย่างจำกัด
  • เข้าร่วมเส้นขอบ
  • ไม่มีการสนับสนุน

และถ้าคุณทำงานกับมันมาเป็นเวลานาน คุณจะรู้ว่าบางครั้งการทำบางสิ่งใน PromQL นั้นยากมาก แต่ใน SQL คุณสามารถทำทุกอย่างได้เกือบทุกอย่าง เพราะตัวเลือกทั้งหมดที่เราเพิ่งพูดถึงสามารถทำได้ใน SQL . แต่จะสะดวกในการใช้งานหรือไม่? และนี่ทำให้ฉันคิดว่าภาษาที่ทรงพลังที่สุดอาจไม่ได้สะดวกที่สุดเสมอไป

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ดังนั้นบางครั้งคุณจำเป็นต้องเลือกภาษาสำหรับงาน มันเหมือนกับแบทแมนต่อสู้กับซูเปอร์แมน เห็นได้ชัดว่าซูเปอร์แมนแข็งแกร่งกว่า แต่แบทแมนสามารถเอาชนะเขาได้เพราะเขาใช้งานได้จริงมากกว่าและรู้แน่ชัดว่าเขากำลังทำอะไรอยู่

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และส่วนต่อไปคือการขยาย PromQL

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

อีกครั้งเกี่ยวกับ VictoriaMetrics VictoriaMetrics คืออะไร? นี่คือฐานข้อมูลอนุกรมเวลา ซึ่งอยู่ใน OpenSource เราเผยแพร่เวอร์ชันเดี่ยวและคลัสเตอร์ ตามเกณฑ์มาตรฐานของเรา มันเร็วกว่าสิ่งใดๆ ที่มีอยู่ในตลาดตอนนี้และการบีบอัดก็คล้ายกัน กล่าวคือ คนจริงรายงานการบีบอัดประมาณ 0,4 ไบต์ต่อจุด ในขณะที่ Prometheus อยู่ที่ 1,2-1,4

เราสนับสนุนมากกว่า Prometheus เรารองรับ InfluxDB, Graphite, OpenTSDB

คุณสามารถ "เขียน" ถึงเราได้นั่นคือคุณสามารถถ่ายโอนข้อมูลเก่าได้

และเรายังทำงานร่วมกับ Prometheus และ Grafana ได้อย่างสมบูรณ์แบบ กล่าวคือ เรารองรับกลไก PromQL และใน Grafana คุณสามารถเปลี่ยนตำแหน่งข้อมูล Prometheus เป็น VictoriaMetrics ได้อย่างง่ายดาย จากนั้นแดชบอร์ดทั้งหมดของคุณจะทำงานเหมือนเดิม

แต่คุณยังสามารถใช้คุณสมบัติเพิ่มเติมที่ VictoriaMetrics มอบให้ได้

เราจะพูดถึงฟีเจอร์ที่เราเพิ่มไว้อย่างรวดเร็ว

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ละเว้นพารามิเตอร์ช่วงเวลา - คุณสามารถละเว้นพารามิเตอร์ช่วงเวลาใน Grafana ได้ เมื่อไม่ต้องการให้กราฟแปลกๆ เมื่อซูมเข้า/ออก ในแผง แนะนำให้ใช้ตัวแปร $__interval. นี่คือการเปลี่ยนแปลง Grafana ภายในและเลือกช่วงข้อมูลเอง และ VictoriaMetrics เองก็สามารถเข้าใจได้ว่าช่วงนี้ควรเป็นอย่างไร และคุณไม่จำเป็นต้องอัปเดตคำขอทั้งหมดของคุณ มันจะง่ายกว่ามาก

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ฟังก์ชันที่สองคือการอ้างอิงช่วงเวลา คุณสามารถใช้ช่วงเวลานี้ในนิพจน์ของคุณได้ คุณสามารถคูณหารโอนอ้างอิงได้

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ถัดไปคือตระกูลฟังก์ชันโรลอัพ ฟังก์ชัน Rollup จะแปลงอนุกรมเวลาใดๆ ของคุณให้เป็นอนุกรมเวลาแยกกันสามอนุกรม เหล่านี้คือต่ำสุด สูงสุด และเฉลี่ย ฉันพบว่าสิ่งนี้สะดวกมากเพราะบางครั้งอาจแสดงค่าผิดปกติและความไม่ถูกต้องบางประการได้

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และถ้าคุณแค่แสดงอารมณ์โมโหหรือพูดจาหยาบคาย คุณก็อาจจะพลาดบางกรณีที่อนุกรมเวลาไม่เป็นไปตามที่คุณคาดหวัง ด้วยฟังก์ชันนี้ ทำให้มองเห็นได้ง่ายกว่ามาก สมมติว่าค่าสูงสุดมาจากค่าเฉลี่ยอย่างมาก

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ถัดไปคือตัวแปรเริ่มต้น ค่าเริ่มต้น - นี่หมายถึงค่าที่เราต้องวาดใน Grafana หากเราไม่มีอนุกรมเวลาในขณะนี้ มันจะเกิดขึ้นเมื่อไหร่? สมมติว่าคุณกำลังส่งออกการวัดข้อผิดพลาดบางอย่าง และคุณมีแอปพลิเคชันเจ๋งๆ ที่เมื่อคุณเริ่มใช้งาน คุณจะไม่มีข้อผิดพลาดหรือข้อผิดพลาดใดๆ เลยในสามชั่วโมงหรือหนึ่งวันข้างหน้านี้ด้วยซ้ำ และคุณมีแดชบอร์ดที่แสดงความสัมพันธ์จากความสำเร็จไปสู่ข้อผิดพลาด และจะไม่แสดงอะไรเลยเนื่องจากคุณไม่มีตัวชี้วัดข้อผิดพลาด และโดยค่าเริ่มต้น คุณสามารถระบุอะไรก็ได้

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

Keep_last_Value – บันทึกค่าสุดท้ายของหน่วยเมตริกหากหายไป หาก Prometheus ไม่พบมันภายใน 5 นาทีหลังจากการขูดครั้งถัดไป เราจะจดจำค่าสุดท้ายไว้ที่นี่ และกราฟของคุณจะไม่พังอีกครั้ง

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

Scrape_interval – แสดงให้เห็นว่า Prometheus รวบรวมข้อมูลเกี่ยวกับตัวชี้วัดของคุณบ่อยแค่ไหน และด้วยความถี่เท่าใด ที่นี่คุณสามารถดูบัตรผ่านได้

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko
การเปลี่ยนฉลากเป็นคุณสมบัติยอดนิยม แต่เราคิดว่ามันซับซ้อนนิดหน่อยเพราะต้องใช้ข้อโต้แย้งทั้งหมด และคุณไม่เพียงต้องจำข้อโต้แย้ง 5 ข้อเท่านั้น แต่ยังต้องจำลำดับข้อโต้แย้งด้วย
"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko
ดังนั้นทำไมไม่ทำให้มันง่ายขึ้นล่ะ? นั่นคือแบ่งมันเป็นฟังก์ชันเล็กๆ ด้วยไวยากรณ์ที่เข้าใจได้

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และตอนนี้ส่วนที่สนุก เหตุใดเราจึงคิดว่านี่คือการขยาย PromQL เพราะเรารองรับ Common Table Expressions สามารถติดตามคิวอาร์โค้ด (https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/ExtendedPromQL) ดูลิงก์พร้อมตัวอย่างจาก Playground ซึ่งคุณสามารถเรียกใช้การสืบค้นได้โดยตรงใน VictoriaMetrics โดยไม่ต้องติดตั้งในเบราว์เซอร์

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และมันคืออะไร? คำขอข้างต้นนี้เป็นคำขอที่ค่อนข้างได้รับความนิยม ฉันคิดว่าในแดชบอร์ดใดๆ ในหลายบริษัท คุณใช้ตัวกรองแบบเดียวกันสำหรับทุกสิ่ง มักจะเป็นเช่นนั้น แต่เมื่อคุณต้องการเพิ่มตัวกรองใหม่ คุณต้องอัปเดตแต่ละพาเนล หรือดาวน์โหลดแดชบอร์ด เปิดใน JSON ค้นหาการแทนที่ ซึ่งต้องใช้เวลาเช่นกัน ทำไมไม่เก็บค่านี้ไว้ในตัวแปรแล้วนำมาใช้ใหม่ล่ะ? ในความคิดของฉันสิ่งนี้ดูง่ายกว่าและชัดเจนกว่ามาก

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ตัวอย่างเช่น เมื่อฉันต้องการอัปเดตตัวกรองใน Grafana ในคำขอทั้งหมด และแดชบอร์ดอาจมีขนาดใหญ่หรืออาจมีหลายตัวกรองก็ได้ และฉันต้องการแก้ปัญหานี้ใน Grafana อย่างไร

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ฉันแก้ไขปัญหานี้ด้วยวิธีนี้: ฉันสร้าง commonFilter และกำหนดตัวกรองนี้ในนั้น จากนั้นจึงนำมาใช้ซ้ำในการสืบค้น แต่ถ้าคุณทำแบบเดียวกันตอนนี้ มันจะไม่ทำงานเพราะ Grafana ไม่อนุญาตให้คุณใช้ตัวแปรภายในตัวแปรแบบสอบถาม และมันแปลกนิดหน่อย

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ดังนั้นฉันจึงสร้างทางเลือกที่ให้คุณทำเช่นนี้ได้ และหากคุณสนใจหรือต้องการฟีเจอร์ดังกล่าว ก็สนับสนุนหรือไม่ชอบหากคุณไม่ชอบแนวคิดนี้ https://github.com/grafana/grafana/pull/16694

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

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

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

และนี่คือตัวอย่างของคำขอที่ยิ่งใหญ่และยิ่งใหญ่เช่นนี้ มันมาจากแดชบอร์ด NodeExporter อย่างเป็นทางการสำหรับ Grafana แต่ฉันแทบจะไม่เข้าใจสิ่งที่เกิดขึ้นที่นี่ แน่นอนว่าฉันเข้าใจถ้าคุณมองอย่างใกล้ชิด แต่จำนวนวงเล็บสามารถลดแรงจูงใจในการทำความเข้าใจสิ่งที่เกิดขึ้นที่นี่ได้ทันที แล้วทำไมไม่ทำให้มันง่ายและชัดเจนขึ้นล่ะ?

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

เช่น การแยกส่วนสำคัญหรือส่วนสำคัญออกเป็นตัวแปร จากนั้นทำคณิตศาสตร์พื้นฐานของคุณ นี่เป็นเหมือนการเขียนโปรแกรมมากกว่า นี่คือสิ่งที่ฉันอยากเห็นในอนาคตใน Grafana

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

นี่คือตัวอย่างที่สองของวิธีที่เราสามารถทำให้สิ่งนี้ง่ายยิ่งขึ้นหากเรามีฟังก์ชัน ru นี้อยู่แล้ว และมีอยู่แล้วใน VictoriaMetrics โดยตรง จากนั้นคุณก็แค่ส่งค่าแคชที่คุณประกาศไว้ใน CTE

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

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

สมมติว่าคุณไม่ได้มีแค่วิศวกรระบบ บางทีคุณอาจมีผู้เชี่ยวชาญ devop หรือ SRE ด้วยซ้ำ บางทีคุณอาจมีผู้เชี่ยวชาญที่รู้ว่าการติดตามคืออะไร ใครรู้ว่า Grafana คืออะไร พวกเขาทำงานกับมันมาหลายปีแล้ว และพวกเขาก็รู้ว่าต้องทำอย่างไรให้ถูกต้อง และพวกเขาเขียนเรื่องนี้ไปแล้ว 100 ครั้งและอธิบายให้ทุกคนฟัง แต่ด้วยเหตุผลบางอย่างไม่มีใครฟัง

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

สิ่งนี้ไม่มีอยู่จริง นี่คือสิ่งที่ฉันทำเอง นี่คือการสนับสนุนห้องสมุดใน Grafana สมมติว่าคนที่สร้าง NodeExporter ทำในสิ่งที่ฉันพูดถึง และพวกเขายังจัดเตรียมชุดฟังก์ชันไว้ด้วย

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

นั่นคือมันมีลักษณะเช่นนี้ คุณเชื่อมต่อไลบรารีนี้กับ Grafana คุณเข้าสู่การแก้ไขและเขียนอย่างง่าย ๆ ใน JSON วิธีทำงานกับตัวชี้วัดนี้ นั่นคือชุดฟังก์ชันบางชุด คำอธิบาย และสิ่งที่พวกเขาเปลี่ยนเป็น

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

ฉันคิดว่านี่อาจมีประโยชน์ เพราะใน Grafana คุณจะเขียนแบบนั้น และ Grafana “บอก” คุณว่ามีฟังก์ชันดังกล่าวจากไลบรารีดังกล่าว ลองใช้มันดูสิ ฉันคิดว่ามันคงจะเจ๋งมาก

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

เล็กน้อยเกี่ยวกับ VictoriaMetrics เราทำสิ่งที่น่าสนใจมากมาย อ่านบทความของเราเกี่ยวกับการบีบอัด เกี่ยวกับการแข่งขันกับแอปพลิเคชันข้อมูลอนุกรมเวลาอื่นๆ คำอธิบายของเราเกี่ยวกับวิธีการทำงานกับ PromQL เนื่องจากยังมีผู้เริ่มต้นจำนวนมากในเรื่องนี้ เช่นเดียวกับเกี่ยวกับความสามารถในการปรับขนาดในแนวตั้ง และการเผชิญหน้ากับธานอส

"ExtendedPromQL" - บันทึกรายงานของ Roman Khavronenko

คำถาม:

ฉันจะเริ่มคำถามด้วยเรื่องราวชีวิตที่เรียบง่าย เมื่อฉันเริ่มใช้ Grafana เป็นครั้งแรก ฉันเขียนแบบสอบถามที่น่าสนใจมากโดยมีความยาว 5 บรรทัด ผลลัพธ์ที่ได้คือกราฟที่น่าเชื่อมาก ตารางนี้เกือบจะเข้าสู่การผลิตแล้ว แต่เมื่อตรวจสอบอย่างใกล้ชิด ปรากฎว่ากราฟนี้แสดงถึงความไร้สาระโดยสิ้นเชิงซึ่งไม่เกี่ยวข้องกับความเป็นจริง แม้ว่าตัวเลขจะอยู่ในช่วงที่เราคาดว่าจะเห็นก็ตาม และคำถามของฉัน เรามีห้องสมุด เรามีฟังก์ชัน แต่เราจะเขียนการทดสอบสำหรับ Grafana ได้อย่างไร คุณได้เขียนคำขอที่ซับซ้อนซึ่งการตัดสินใจทางธุรกิจขึ้นอยู่กับ - เพื่อสั่งซื้อคอนเทนเนอร์เซิร์ฟเวอร์จริงหรือไม่สั่งซื้อ และอย่างที่เราทราบ ฟังก์ชันที่วาดกราฟนี้คล้ายกับความจริง ขอบคุณ

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

วิธีตรวจสอบ

วิธีการตรวจสอบ? อาจจะไม่.

เป็นการทดสอบใน Grafana

Grafana เกี่ยวอะไรกับมัน? Grafana แปลคำขอนี้ไปยังแหล่งข้อมูลโดยตรง

เพิ่มพารามิเตอร์เล็กน้อย

ไม่ ไม่มีอะไรถูกเพิ่มเข้าไปใน Grafana อาจมีพารามิเตอร์ GET เช่น ขั้นตอน ไม่ได้ระบุไว้อย่างชัดเจน แต่คุณสามารถแทนที่ได้ หรือคุณอาจไม่สามารถแทนที่ได้ แต่จะถูกเพิ่มโดยอัตโนมัติ คุณจะไม่เขียนแบบทดสอบที่นี่ ฉันไม่คิดว่าเราควรพึ่งพา Grafana เป็นแหล่งความจริงที่นี่

ขอบคุณสำหรับรายงาน! ขอบคุณสำหรับการบีบอัด! คุณพูดถึงการแมปตัวแปรในกราฟ ซึ่งใน Grafana คุณไม่สามารถใช้ตัวแปรภายในตัวแปรได้ คุณรู้ไหมว่าฉันหมายถึงอะไร?

ใช่

ในตอนแรกนี่เป็นเรื่องที่น่าปวดหัวเมื่อฉันต้องการสร้างการแจ้งเตือนใน Grafana และคุณจะต้องทำการแจ้งเตือนสำหรับแต่ละโฮสต์แยกกัน สิ่งที่คุณทำนี้ ใช้ได้กับการแจ้งเตือนใน Grafana หรือไม่

หาก Grafana ไม่เข้าถึงตัวแปรที่แตกต่างออกไป มันก็ใช้ได้ แต่คำแนะนำของฉันคืออย่าใช้การแจ้งเตือนใน Grafana เลย คุณควรใช้ alertmanager จะดีกว่า

ใช่ ฉันใช้มัน แต่ดูเหมือนว่าจะตั้งค่าใน Grafana ได้ง่ายกว่า แต่ขอบคุณสำหรับคำแนะนำ!

ที่มา: will.com

เพิ่มความคิดเห็น