อัปเดตเมื่อ 3/29/21: https://coronavirusapi.com/ เพิ่งปิดการเข้าถึงข้อมูลโดยไม่เสียค่าใช้จ่าย ทำให้ใช้ได้เฉพาะกับผู้ตอบคนแรกที่ลงทะเบียนเท่านั้น แม้ว่านี่จะหมายความว่าการสาธิตโครงการแสดงภาพเคส coronavirus จะไม่ทำงานอีกต่อไป แต่คำแนะนำของเราจะยังคงมีประโยชน์สำหรับการใช้งานอื่นๆ อีกมากมายเมื่อคุณต้องการแสดงข้อมูล RedisTimeSeries บนแผง Grafana Worldmap
ในโพสต์ก่อนหน้านี้ เราได้แนะนำและแสดงวิธีใช้แหล่งข้อมูล Redis ใหม่สำหรับ Grafana:
- ขอแนะนำปลั๊กอินแหล่งข้อมูล Redis สำหรับ Grafana
- วิธีใช้แหล่งข้อมูล Redis ใหม่สำหรับปลั๊กอิน Grafana
ในโพสต์นี้ เราต้องการสำรวจตัวอย่างในชีวิตจริงที่ออกแบบมาเพื่อให้แนวคิดเกี่ยวกับชุดข้อมูลที่น่าสนใจมากมายที่คุณสามารถจัดเก็บใน Redis และแสดงเป็นภาพใน Grafana เราจะครอบคลุมสามแอปพลิเคชันที่แตกต่างกัน:
- แดชบอร์ดสภาพอากาศ
- การแสดงภาพกรณี Coronavirus
- ตัวอย่างร้านค้าป๊อปอัป
1. แดชบอร์ดสภาพอากาศ
ฉันคิดว่าโลกต้องการแดชบอร์ดสภาพอากาศอีกหรือไม่ ใช่ฉันทำ!
แน่นอนว่าส่วนใหญ่ฉันไม่ค่อยชอบอากาศมากนัก ฉันมักจะไม่ค่อยสนใจว่าอากาศเป็นอย่างไร และแม้ว่าฉันจะทำเช่นนั้น แดชบอร์ดสภาพอากาศที่ดีที่สุดมักจะเป็นเพียงหน้าต่างที่มองออกไปนอกบ้านของฉัน แต่บางครั้ง เมื่อฉันหาเวลาว่างออกไปถ่ายรูปหรือบินโดรน ผู้เชี่ยวชาญด้านสภาพอากาศภายในของฉันก็ตื่นขึ้น
แน่นอน คำถามใหญ่คือฉันควรไปที่ไหน? มีสถานที่ที่น่าสนใจมากมายภายในเวลาไม่กี่ชั่วโมงโดยรถยนต์จากบ้านของฉันในรัฐนิวเจอร์ซีย์ และสภาพอากาศอาจแตกต่างกันมาก สิ่งที่ฉันต้องการจริงๆ คือแดชบอร์ดที่แสดงสภาพอากาศในสถานที่ต่างๆ หลายสิบแห่งบนหน้าจอเดียว ดังนั้นฉันจึงสามารถเปรียบเทียบเงื่อนไขต่างๆ ได้อย่างรวดเร็ว ที่สำคัญ ฉันไม่เพียงแค่ต้องการเปรียบเทียบสถานที่ใกล้กันเท่านั้น
ที่สำคัญไม่แพ้กัน ฉันชอบทำงานกับตัวเลข ฉันรู้ว่าการถ่ายภาพทิวทัศน์จะได้ผลดีที่สุดเมื่อมีปริมาณเมฆปกคลุมอยู่ระหว่าง 20% – 50% สำหรับการบินโดรนของฉัน ความเร็วลมที่ต่ำกว่า 10 ไมล์ต่อชั่วโมงนั้นเหมาะสมที่สุด 10-20 ไมล์ต่อชั่วโมงนั้นยาก และสิ่งใดที่สูงกว่า 20 ไมล์ต่อชั่วโมงอาจเป็นอันตรายได้ ไอคอนสภาพอากาศน่ารักแบบนี้ไม่ได้ช่วยอะไรฉันสักหน่อย:
เมื่อคำนึงถึงสิ่งนี้ นี่คือวิธีที่ฉันสร้างแดชบอร์ดสภาพอากาศโดยใช้ Redis
โชคดีที่ข้อมูลสภาพอากาศดิบมีให้ใช้งานอย่างแพร่หลายผ่าน API สภาพอากาศที่มีให้เลือกมากมาย โดยส่วนมากจะใช้งานได้ฟรี (โดยมีข้อจำกัดบางประการ) ฉันเลือกใช้ OpenWeatherMap API เพราะแผนบริการฟรีให้ทุกสิ่งที่ฉันต้องการ:พยากรณ์รายชั่วโมง 48 ชั่วโมง พยากรณ์รายวัน 7 วัน และเงื่อนไขปัจจุบัน
ฉันเขียนสคริปต์ Python อย่างง่ายเพื่อดึงข้อมูลจาก API และใส่การคาดการณ์รายชั่วโมง/รายวันลงในฐานข้อมูล Redis โดยใช้โมดูล RedisTimeSeries และเงื่อนไขปัจจุบันลงในชุดอนุกรมเวลาอื่นสำหรับประวัติ
แดชบอร์ดสภาพอากาศของฉันเป็นไปตามกฎแดชบอร์ดบังคับสองข้อของฉัน:
- ข้อมูลทั้งหมดควรแสดงบนหน้าจอเดียว ไม่จำเป็นต้องเลื่อน
- บุคคลควรจะสามารถเข้าใจสถานการณ์ที่แสดงบนแดชบอร์ดได้โดยเร็วที่สุด
ส่วนบนของแดชบอร์ดแสดงเงื่อนไขปัจจุบันของสถานที่แห่งเดียว ซึ่งอาจเป็นสถานที่หลักหรือสถานที่โปรด หรือเพียงแค่เลือกจากรายการสถานที่ที่มีอยู่ (มีรายการการเลือกตัวแปรเทมเพลต Grafana ที่มุมบนซ้ายของแดชบอร์ด) นอกจากนี้ยังแสดงช่วงเวลาที่ดีสำหรับกิจกรรมเฉพาะที่สถานที่นั้น Grafana ช่วยให้ฉันสามารถเน้นบริเวณต่ำ/สูงสำหรับอุณหภูมิ โซนอันตรายสำหรับความเร็วลม แสดงระดับของเมฆมาก และทำเครื่องหมายช่วงเวลากลางวันและกลางคืน
ส่วนด้านล่างจัดกลุ่มสถานที่ตามกิจกรรม ทำให้ง่ายต่อการเปรียบเทียบ ยิ่งวงกลมใหญ่ขึ้น ชั่วโมงก็ยิ่งดีสำหรับกิจกรรมบางอย่างในสถานที่หนึ่งๆ
2. การแสดงภาพกรณี Coronavirus
ฉันรักการเดินทาง แต่ปี 2020 ทำให้ผู้คนหลายล้านต้องอยู่บ้านเป็นเวลาหลายเดือน (ฉันหวังว่าจะไม่ตลอดไป!) ขณะนี้ ในหลายรัฐเริ่มทยอยกลับมาเปิดอีกครั้ง การเดินทางอย่างชาญฉลาดและเข้าใจสถานการณ์ COVID-19 ทั้งในต้นทางและปลายทางจึงเป็นเรื่องสำคัญมาก นั่นหมายถึงการให้ความสนใจไม่เพียงแต่กับภาพปัจจุบันแต่ยังรวมถึงแนวโน้มในระยะยาวด้วย
นี่คือสิ่งที่แดชบอร์ด Coronavirus ของสหรัฐอเมริกา Grafana แสดงให้เห็น โดยอิงตามข้อมูล Coronavirus API ที่โหลดลงในโมดูล RedisTimeSeries
นอกจากการแสดงกราฟมาตรฐานแล้ว ข้อมูลยังถูกวาดลงบนแผนที่อีกด้วย ปลั๊กอิน Redis Data Source ไม่รองรับแผง Grafana Worldmap อย่างเป็นทางการ แต่คุณทำให้ใช้งานได้ใน 2 ขั้นตอนง่ายๆ ดังนี้
ขั้นตอนที่ 1: ใช้การแปลง "ป้ายกำกับที่ช่อง" กับผลลัพธ์เอาต์พุตอนุกรมเวลา:
ขั้นตอนที่ 2: เปลี่ยนพารามิเตอร์แผนที่ “ข้อมูลตำแหน่ง” เป็นโหมดตารางและจับคู่ฟิลด์ที่เกี่ยวข้อง:
สองขั้นตอนนี้จะช่วยให้คุณติดค่าอนุกรมเวลากับจุดที่เกี่ยวข้องบนแผนที่ ซึ่งกำหนดโดยป้ายกำกับ “geohash” ของ RedisTimeSeries ป้าย "สถานะ" ใช้เพื่อแสดงชื่อสถานที่บนแผนที่
3. ตัวอย่างร้านค้าป๊อปอัป
ฉันเป็นแฟนตัวยงของ Redis Streams ซึ่งเป็นประเภทข้อมูลใหม่ที่เปิดตัวใน Redis 5.0 และฉันกำลังมองหาโซลูชันที่รวดเร็วและง่ายดายในการตรวจสอบคิวสำหรับการประมวลผลข้อมูล ขณะทำงานกับแหล่งข้อมูล Redis ทีมงานของเราเริ่มสำรวจ RedisGears ซึ่งเป็นเฟรมเวิร์กแบบไดนามิกที่ช่วยให้นักพัฒนาสามารถเขียนและดำเนินการฟังก์ชันต่างๆ ที่นำโฟลว์ข้อมูลไปใช้ใน Redis ในขณะที่แยกการกระจายและการปรับใช้ข้อมูลออกไป สำหรับโปรเจ็กต์อื่น และเราตัดสินใจใช้ร่วมกัน สำหรับการสาธิตไปป์ไลน์ข้อมูลสำหรับป๊อปอัปสโตร์
RedisGears รองรับเครื่องอ่านหลายประเภทที่ทำงานบนข้อมูลอินพุตประเภทต่างๆ ในการดูข้อความสตรีม เราใช้ StreamReader ในโหมดเหตุการณ์ ในโหมดนี้ ผู้อ่านจะดำเนินการตามเหตุการณ์ที่สร้างโดยข้อความใหม่ที่เพิ่มไปยังสตรีม
# Add Time-Series def tsAdd(x): xlen = execute('XLEN', x['key']) execute('TS.ADD', 'ts:len:'+x['key'], '*', xlen) execute('TS.ADD', 'ts:enqueue:' + x['key'], '*', x['value']) # Stream Reader for any Queue gb = GearsBuilder('StreamReader') gb.countby(lambda x: x['key']).map(tsAdd) gb.register(prefix='queue:*', duration=5000, batch=10000, trimStream=False)
StreamReader ยอมรับหลายอาร์กิวเมนต์ที่ควบคุมวิธีการทริกเกอร์ ในกรณีของเรา เราต้องการให้ผู้อ่านทำงานทุกๆ 5 วินาทีหรือหลังจากได้รับ 10,000 ข้อความ ตัวเลือกสุดท้ายคือ trimStream ระบุว่าจะไม่ตัดแต่งสตรีมหลังจากดำเนินการ
เราใช้ RedisTimeSeries เพื่อเก็บจำนวนข้อความขาเข้าและตัวอย่างขนาดคิว ตามที่อธิบายไว้ในบล็อกโพสต์แนะนำบนปลั๊กอิน Redis Data Source Plug-in สำหรับ Grafana อนุกรมเวลาสามารถมองเห็นได้ง่ายใน Grafana
เพื่อแสดงให้เห็นว่า Redis Streams, RedisTimeSeries, RedisGears และ Redis Data Source สามารถทำงานร่วมกันได้อย่างไร เราได้สร้างการสาธิตร้านค้าป๊อปอัปด้วยแดชบอร์ดแบบไดนามิก:
แดชบอร์ด Grafana นี้แสดง:
- สินค้าที่มีจำหน่าย: มูลค่าของรหัสผลิตภัณฑ์ซึ่งลดลงเมื่อคำสั่งซื้อเสร็จสมบูรณ์
- การสั่งซื้อของลูกค้า การประมวลผลคำสั่งซื้อ และการสั่งซื้อที่เสร็จสมบูรณ์: ความยาวของคิว:ลูกค้า คิว:คำสั่งซื้อ และคิว:สตรีมที่สมบูรณ์
- ลูกค้าล้น: ความแตกต่างระหว่างคำสั่งซื้อที่ลูกค้าส่งมาและคำสั่งซื้อที่เสร็จสมบูรณ์
- การสั่งซื้อของลูกค้า: คำสั่งซื้อที่สร้างขึ้นใน 5 วินาที
- การสั่งซื้อในคิว: คำสั่งซื้อที่รอดำเนินการ
- ขั้นตอนที่เสร็จสมบูรณ์: คำสั่งซื้อเสร็จสมบูรณ์ใน 5 วินาที
โปรดดูที่ที่เก็บ GitHub สำหรับโปรเจ็กต์นี้เพื่อดูว่าเราสร้างโหลดอย่างไร สคริปต์ RedisGears ที่เราใช้ และวิธีกำหนดค่าแหล่งข้อมูล Redis เพื่อสืบค้นข้อมูล RedisTimeSeries โดยใช้คำสั่ง TS.RANGE
บทสรุป
สถานการณ์จริงทั้งสามนี้แสดงให้เห็นถึงวิธีการใช้แหล่งข้อมูล Redis สำหรับ Grafana กับโมดูล Redis ต่างๆ เราหวังว่าสิ่งเหล่านี้จะสร้างแรงบันดาลใจให้คุณใช้เทคโนโลยีนี้และสร้างแอปพลิเคชันของคุณเอง
คุณจะเป็นเพื่อนที่ดี เนื่องจากปลั๊กอิน Redis Data Source ได้รับการเผยแพร่ในที่เก็บ Grafana จึงมีการดาวน์โหลดมากกว่า 10,000 ครั้ง ซึ่งรวมอยู่ในปลั๊กอินชุมชนยอดนิยมที่สามารถปรับปรุงแดชบอร์ด Grafana ของคุณได้ เพิ่มการรองรับคลัสเตอร์ Redis, Sentinel, Unix socket และ รายการควบคุมการเข้าถึง (ACL):
แต่นั่นไม่ใช่ทั้งหมด คอยติดตามบล็อกของ Redis Tech เพื่อเรียนรู้เกี่ยวกับโปรเจ็กต์ที่น่าตื่นเต้นที่รวมความสามารถในการสตรีมของ Grafana เข้ากับการโต้ตอบ เพื่อให้ Grafana อยู่เหนือความสามารถในการสังเกตได้ด้วยแผง redis-cli