พื้นที่เก็บข้อมูลนี้ได้รับการเก็บถาวรเพื่อรองรับปลั๊กอินในตัวที่มีอยู่ใน Grafana เวอร์ชัน 9+: สถานะ-ประวัติ และสถานะ-ไทม์ไลน์ ชุมชนใช้ปลั๊กอินเหล่านี้เพื่อทดแทนแผนผังสถานะแบบเรียบ ดูข้อมูลเพิ่มเติมที่ปัญหา #302 หากคุณคิดว่าปลั๊กอินนี้ตรงกับความต้องการของคุณและต้องการพัฒนาต่อไป อย่าลังเลที่จะสร้างทางแยก เราอยากเห็นคุณก้าวไปอีกขั้น!
แผงสำหรับแสดงสถานะแยกของเป้าหมายหลายรายการในช่วงเวลาหนึ่ง
เรียกใช้
docker compose up
และเปิด http://localhost:3000 ในเบราว์เซอร์เพื่อดูการสาธิตง่ายๆ
การจัดกลุ่มค่าเป็นแถวและที่เก็บข้อมูลโดยใช้คำอธิบายจากการสืบค้น
การทำแผนที่สีที่ผู้ใช้กำหนด
ค่าหลายค่าในที่เก็บข้อมูลจะแสดงผ่านคำแนะนำเครื่องมือ
รายการคำแนะนำเครื่องมือที่กำหนดค่าได้
การแบ่งหน้าสำหรับแถว
การเพิ่มช่วงเวลาของแถว/ที่เก็บข้อมูลเพื่อการแสดงภาพที่ดีขึ้น
การแสดงค่า Null เป็นถังว่างหรือค่าศูนย์
ทดสอบด้วย:
โพรมีธีอุส
InfluxDB
MySQL
กราฟาน่า 7.x, 8.x
รองรับ Grafana เวอร์ชันก่อนหน้า:
เวอร์ชัน 0.5.x ควรทำงานใน Grafana 6.5.x - 6.7.x พร้อมรูปแบบข้อมูลอนุกรมเวลา
(0.4.2)[https://github.com/flant/grafana-statusmap/releases/tag/v0.4.2] ควรทำงานใน Grafana 5.4.x - 6.4.x
เรามีความจำเป็นอย่างยิ่งที่จะต้องเห็นภาพชุดสถานะอนุกรมเวลาในช่วงเวลาหนึ่ง ดังนั้นเราจึงสามารถดูประวัติการเปลี่ยนแปลงสถานะของออบเจ็กต์ได้ เนื่องจากเราดูแลรักษาคลัสเตอร์ Kubernetes จำนวนมาก (และโครงสร้างพื้นฐานที่เกี่ยวข้อง) กรณีหลักของเราคือการแสดงภาพสถานะความสมบูรณ์ของเซิร์ฟเวอร์และพ็อด Kubernetes รวมถึงการตรวจสอบความสมบูรณ์ของบริการ HTTP เราได้ลองใช้ปลั๊กอิน Grafana ที่มีอยู่มากมาย (แสดงอยู่ใน การรับทราบ ด้านล่าง) แต่ไม่มีปลั๊กอินใดที่สามารถให้คุณสมบัติและการแสดงภาพได้ใกล้เคียงกับสิ่งที่เรากำลังมองหา
หมายเหตุ: คุณสามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับการเดินทางของเราในการสร้างปลั๊กอินได้ในโพสต์นี้
ออบเจ็กต์ ที่มองเห็นด้วยปลั๊กอินนี้อาจแตกต่างกัน: ไม่เพียงแต่ส่วนประกอบด้านไอที (เช่น โฮสต์เซิร์ฟเวอร์และพ็อด Kubernetes) แต่ยังรวมถึงทุกสิ่งที่คุณสามารถจินตนาการได้ เช่น เครื่องชงกาแฟในภาพด้านบน ออบเจ็กต์เหล่านี้ควรมี สถานะแยกกัน ซึ่งเป็นชุดของค่าที่กำหนดไว้ล่วงหน้า เช่น ok
= 0, off
= 1, fail
= 2 เป็นต้น
หากต้องการสร้างกราฟที่เรียบร้อยแหล่งข้อมูลของคุณควรส่งคืนข้อมูลที่ดี ปลั๊กอินปรับตัวแปร $__interval
ขึ้นอยู่กับความกว้างของบัคเก็ตในตัวเลือกพาเนล ข้อความค้นหาของคุณควรรวมสถานะไว้ในช่วง $__interval
หากต้องการให้โหมดหลายค่าทำงานตามที่คาดไว้ คุณควรกำหนดการสืบค้นหลายรายการ: แบบสอบถามเดียวสำหรับแต่ละสถานะที่เป็นไปได้
ปลั๊กอินไม่ได้รวบรวมข้อมูลทันเวลาในขณะนี้ แต่จะแสดงผลข้อมูลอินพุตเป็นบัคเก็ตเท่านั้น เนื่องจากข้อมูลนี้ควรมีจุดสำหรับการประทับเวลาแต่ละรายการในช่วงเวลาและการประทับเวลาเท่ากันสำหรับทุกเป้าหมายที่เป็นไปได้ (ป้ายกำกับแกน y) ข้อจำกัดนี้แก้ไขได้ในฉบับที่ #53
หากต้องการทำงานกับข้อมูลจาก Prometheus คุณจะต้องตั้งค่าสถานะแยกสำหรับออบเจ็กต์ของคุณ ข้อกำหนดในการจัดเก็บสถานะเหล่านี้ในหน่วยวัดมีดังนี้:
หน่วยเมตริกควรมีสองค่า: 0
และ 1
;
ควรมีป้ายกำกับที่มีค่าสถานะ
เมื่อเสร็จแล้ว คุณสามารถรวบรวมข้อมูลทั้งหมดผ่านการสืบค้น เช่น:
(max_over_time(coffee_maker_status{status="<STATUS_VALUE>"}[$__interval]) == 1) * <STATUS_VALUE>
หากไม่มีสถานะดังกล่าว ( <STATUS_VALUE>
) ในระหว่างช่วงเวลาของการสืบค้น Prometheus จะไม่ส่งคืนสิ่งใดเลย มิฉะนั้น ค่าสถานะจะถูกส่งกลับ
ตัวอย่างเช่น หากคุณมีสถานะ 5 ประเภทและเมตริก ( coffee_maker_status
) ที่มีค่าที่อนุญาต 5 ค่า ( 0
, 1
, 2
, 3
, 4
) คุณควรแปลงเมตริกนี้โดยใช้กฎต่อไปนี้:
- record: coffee_maker_status:discrete expr: | count_values("status", coffee_maker_status)
นั่นคือวิธีที่หน่วยวัด coffee_maker_status
ที่มีค่า 3
จะถูกแปลงเป็นหน่วยวัดใหม่:
coffee_maker_status:discrete{status="3"} 1
ตอนนี้ เมื่อ Prometheus มีค่า 0
และ 1
สำหรับแต่ละสถานะ คุณสามารถรวมตัววัดเหล่านี้ทั้งหมดได้ ดังนั้นคุณจะได้รับสถานะที่พร้อมใช้งานทั้งหมดของออบเจ็กต์ของคุณเมื่อเวลาผ่านไป
เลือก 'อนุกรมเวลา' สำหรับ 'จัดรูปแบบเป็น' และใช้ GROUP BY ($__interval)
ในการค้นหา $tag_<tag name>
สามารถใช้ใน 'Alias by' เพื่อกำหนดป้ายกำกับแกน y
ตัวอย่างแบบสอบถามที่มีการรวมมากกว่า $__interval
เป็นเช่นนี้ (คุณต้องมีหนึ่งแบบสอบถามสำหรับแต่ละค่าสถานะที่เป็นไปได้):
SELECT $__timeGroupAlias(date_insert,$__interval), name AS metric, min(statusi) AS "statusi" FROM coffee_makers WHERE $__timeFilter(date_insert) AND statusi=1 GROUP BY 1,2 ORDER BY $__timeGroup(date_insert,$__interval)
คอลัมน์ metric
ใช้เป็นป้ายกำกับแกน y
ก่อนอื่น ควรสร้างแบบสอบถามแต่ละรายการสำหรับค่าสถานะที่เป็นไปได้แต่ละรายการ แต่ละแบบสอบถามควรมีคำอธิบายที่คล้ายกันสำหรับการจัดกลุ่ม:
จากนั้น ควรกำหนดการจับคู่สีสำหรับค่าสถานะในโหมดสี แยก :
ใช้สามารถใช้การตั้งค่าล่วงหน้าเพื่อกำหนดสีไฟจราจรหรือ 8 สีจากจานสีโซลาร์ไลซ์:
หมายเหตุ: โหมดสี สเปกตรัม และ ความทึบ ทำงานในลักษณะเดียวกับที่ทำในปลั๊กอิน Heatmap
ช่องทำ เครื่องหมายหลายค่า ระบุว่าควรแสดงอย่างไร:
หากปิดอยู่ ค่าหลายค่าสำหรับที่เก็บข้อมูลเดียวจะถือเป็นข้อผิดพลาด
หากเปิดอยู่ สีของที่เก็บข้อมูลดังกล่าวจะถูกกำหนดโดยค่าที่มีดัชนีน้อยที่สุดในการแมปสี
ค่าว่างในการแสดงผล สามารถถือเป็นที่เก็บข้อมูลว่างหรือแสดงด้วยค่าสี 0
ความกว้าง และ ระยะห่าง ขั้นต่ำใช้เพื่อระบุความกว้างและระยะห่างขั้นต่ำของบัคเก็ตและระยะห่างระหว่างบัคเก็ต การปัดเศษ อาจใช้เพื่อทำให้ขอบมน
ดัชนีค่า ที่ตั้งค่าเป็นจำนวนบวกเพื่อแสดงเฉพาะค่าจากอนุกรมเวลาที่ระบุ
ช่องทำ เครื่องหมายแสดง คำอธิบายสลับคำอธิบายที่ด้านล่างของแผง
การเรียงลำดับแถว สามารถใช้เพื่อเรียงลำดับป้ายกำกับบนแกน Y เมตริก — จัดเรียงป้ายกำกับตามที่กำหนดไว้ในแท็บเมตริก a → z และ z → ป้ายกำกับการเรียงลำดับจากมากไปน้อยหรือจากน้อยไปมากตามลำดับธรรมชาติ
เปิดใช้งานการแบ่งหน้า สลับการควบคุมการแบ่งหน้าบนกราฟ
แถวต่อหน้า จำนวนแถวที่จะแสดงบนกราฟ
แสดงคำแนะนำเครื่องมือ สลับการแสดงคำแนะนำเครื่องมือบนที่เก็บข้อมูล
ตรึงเมื่อคลิก สลับคำแนะนำเครื่องมือ "แช่แข็ง" เมื่อคลิก คำแนะนำเครื่องมือ Frozen สามารถใช้เพื่อเปรียบเทียบข้อมูลกับคำแนะนำเครื่องมือแบบลอยหรือติดตาม URL
แสดงรายการ สลับแสดงรายการเพิ่มเติมในคำแนะนำเครื่องมือ
รายการ คือรายการคำจำกัดความที่จะแสดง URL ในคำแนะนำเครื่องมือ
แต่ละ URL มีเทมเพลต ไอคอน ป้ายกำกับ และตัวเลือกการจัดรูปแบบ ได้แก่ รูปแบบตัวพิมพ์เล็กและวันที่สำหรับตัวแปร
ในบางกรณี สถานการณ์ แผงสถานะจะใช้เพื่อเปลี่ยนจากแดชบอร์ดหนึ่งไปยังแดชบอร์ดที่เฉพาะเจาะจงมากขึ้น เช่น เมื่อดำเนินการวิเคราะห์ต้นตอ/สาเหตุ ในกรณีเช่นนี้ ผู้ใช้อาจต้องการลดขอบเขตของช่วงเวลาโดยให้เหตุการณ์ที่ต้องการอยู่ตรงกลาง (เพื่อให้สามารถวิเคราะห์ช่วงเวลาก่อนหน้า/หลังได้) ค่าเหล่านั้นถูกนำมาใช้ผ่าน __bucket_from
และ __bucket_to
__bucket_from
: คือค่าของ bucket.from
ลบด้วยเปอร์เซ็นต์ที่เก็บข้อมูล __bucket_to
: คือค่าของ bucket.to
บวกกับที่เก็บข้อมูลเปอร์เซ็นต์
บันทึกการเปลี่ยนแปลง
ใช้การสนทนา GitHub เพื่อขอความช่วยเหลือ
การติดตั้ง
ตั้งค่าสภาพแวดล้อมการพัฒนาเพื่อช่วยเราปรับปรุงปลั๊กอิน
ปลั๊กอินนี้เผยแพร่สู่สาธารณะครั้งแรกโดยวิศวกรของ Flant แนวคิดทั้งหมดมาจาก Dmitry Stolyarov (@distol) เวอร์ชันเริ่มต้นเขียนโดย Sergey Gnuskov (@gsmetal) และการเปลี่ยนแปลงขั้นสุดท้ายจัดทำโดย Ivan Mikheykin (@diafour)
ปลั๊กอินนี้อิงตามแผง "Heatmap" โดย Grafana และได้รับแรงบันดาลใจบางส่วนจากแนวคิดจาก Carpet plot, Discrete panel, Status Panel, Status Dot, Status By Group