Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

อัปเดต 29/3/21: https://coronavirusapi.com/ ปิดการเข้าถึงฟรีข้อมูลล่าสุด ทำให้มีให้เฉพาะ first-responders ที่ลงทะเบียน แม้จะน่าเสียดายที่โปรเจกต์สาธิตการแสดงผลกรณีโคโรนาจะไม่ทำงานแล้ว แต่คำแนะนำของเรายังคงมีประโยชน์สำหรับการนำไปปฏิบัติอื่นๆ เมื่อคุณต้องการแสดงข้อมูล RedisTimeSeries บน Grafana Worldmap panel

ในโพสต์ก่อนหน้า เราแนะนำและแสดงวิธีใช้ Redis Data Source ใหม่สำหรับ Grafana:

  • Introducing the Redis Data Source Plug-in for Grafana
  • How to Use the New Redis Data Source for Grafana Plug-in

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

  1. Weather dashboard
  2. Coronavirus cases visualization
  3. Pop-up store demo

1. Weather dashboard

ผมคิดจริงๆ ว่าลโลกต้องการ weather dashboard อีกตัวไหม? ใช่ ผมคิดว่าใช่!

แน่นอน 大部分ของเวลา ผมไม่ค่อยเป็น weather geek ผมมักไม่สนใจอากาศเป็นอย่างไร และแม้ตอนที่สนใจ dashboard อากาศที่ดีที่สุดมักเป็นแค่หน้าต่างที่มองออกไปจากบ้านของผม แต่บางครั้ง อาจจะตอนที่ผมมีเวลาว่างไปถ่ายรูปหรือบินโดรน ภายใน weather geek ของผมก็甦醒

คำถามใหญ่คือ ผมควรไปไหน? มีสถานที่น่าสนใจมากภายในขับรถ 2 ชั่วโมงจากบ้านผมใน New Jersey และอากาศอาจแตกต่างกันมากจากที่หนึ่งไปอีกที่หนึ่ง สิ่งที่ผมอยากได้จริงๆ คือ dashboard ที่แสดงอากาศใน 12 สถานที่บนหน้าจอเดียว เพื่อให้ผมเปรียบเทียบสภาพแวดล้อมได้ในทีเดียว สำคัญคือ ผมไม่ได้อยากแค่เปรียบเทียบสถานที่ที่อยู่ใกล้กัน

สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

สำคัญไม่แพ้กัน ผมชอบทำงานกับตัวเลข ผมรู้ว่าการถ่ายภาพภูมิทัศน์ทำงานได้ดีที่สุดเมื่อปริมาณเมฆคลุมอยู่ระหว่าง 20% – 50% สำหรับการบินโดรน ความเร็วลมต่ำกว่า 10 mph เป็นที่เหมาะสม 10 – 20 mph ยาก และอะไรเกิน 20 mph อันตราย ดังนั้นไอคอนอากาศน่ารักแบบนี้จึงไม่ช่วยผมได้มาก:

ด้วยความคิดนี้ นี่คือวิธีที่ผมสร้าง weather dashboard โดยใช้ Redis

โชคดีที่ข้อมูลอากาศดิบ (raw weather data) พร้อมใช้งานอย่างกว้างขวางผ่าน weather APIs หลากหลาย หลายตัวฟรี (มีข้อจำกัดบางอย่าง) ผมเลือกใช้ OpenWeatherMap API เพราะแผนฟรีให้ทุกอย่างที่ผมต้องการ: การพยากรณ์รายชั่วโมง 48 ชั่วโมง การพยากรณ์รายวัน 7 วัน และสภาพปัจจุบัน

ผมเขียน Python script เรียบง่ายเพื่อดึงข้อมูลจาก API และใส่ hourly/daily forecasts ลงในฐานข้อมูล Redis โดยใช้โมดูล RedisTimeSeries และสภาพปัจจุบันลงในชุด time series อื่นสำหรับประวัติ

Weather dashboard ของผมปฏิบัติตามกฎ dashboard บังคับ 2 ข้อของผม:

  1. ข้อมูลทั้งหมดควรแสดงบนหน้าจอเดียว ไม่ต้อง scroll
  2. บุคคลควรเข้าใจสถานการณ์ที่แสดงบน dashboard ได้เร็วที่สุด
สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

ส่วนบนของ dashboard แสดงสภาพปัจจุบันสำหรับสถานที่หนึ่ง ซึ่งอาจเป็น primary หรือ favorite หรือเพียงแค่เลือกจากรายการสถานที่ที่มี (มี Grafana template variable selection list ที่มุมซ้ายบนของ dashboard) มันยังแสดงช่วงเวลาที่ดีสำหรับกิจกรรมเฉพาะที่สถานที่นั้น Grafana อนุญาตให้ผม highlight โซนต่ำ/สูงสำหรับอุณหภูมิ โซนอันตรายสำหรับความเร็วลม แสดงระดับเมฆ และ mark ช่วงกลางวันและกลางคืน

ส่วนล่างจัดกลุ่มสถานที่ตามกิจกรรม ทำให้เปรียบเทียบได้ง่าย ยิ่งวงกลมใหญ่ ยิ่งชั่วโมงที่ดีสำหรับกิจกรรมเฉพาะในสถานที่เฉพาะมาก

สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

2. Coronavirus cases visualization

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

นี่คือสิ่งที่ Grafana U.S. States Coronavirus Dashboard ของผมแสดง มันพัฒนาจากข้อมูล Coronavirus API ที่โหลดเข้าโมดูล RedisTimeSeries

สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

นอกจากการแสดงผลแบบกราฟมาตรฐาน ข้อมูลยังถูกวาดบนแผนที่ Redis Data Source plug-in ไม่ได้รับการรองรับอย่างเป็นทางการโดย Grafana Worldmap panel แตคุณสามารถทำให้มันทำงานได้ใน 2 ขั้นตอนง่ายๆ:

ขั้นตอน 1: ใช้ transformation "Labels to fields" กับผลลัพธ์ time-series output:

สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

ขั้นตอน 2: เปลี่ยนพารามิเตอร์แผนที่ "Location Data" เป็น table mode และ map ฟิลด์ที่เกี่ยวข้อง:

สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

สองขั้นตอนนี้จะช่วยให้คุณติดค่า time-series ไปยังจุดที่เกี่ยวข้องบนแผนที่ ซึ่งตั้งค่าโดย label "geohash" ของ RedisTimeSeries Label "state" ใช้แสดงชื่อสถานที่บนแผนที่

3. Pop-up store demo

ผมแฟนใหญ่ของ Redis Streams ชนิดข้อมูลใหม่ที่นำมารับใน Redis 5.0 และผมกำลังมองหาโซลูชันที่รวดเร็วและเรียบง่ายสำหรับการ monitor queues สำหรับการประมวลผลข้อมูล ในขณะที่ทำงานบน Redis Data Source ทีมของเราเริ่มสำรวจ RedisGears—เฟรมเวิร์กไดนามิกที่ให้ผู้พัฒนาเขียนและรันฟังก์ชันที่นำไปสู่การไหลของข้อมูลใน Redis ในขณะที่กำจัดความซับซ้อนของการกระจายและการปรับใช้ข้อมูล—สำหรับโปรเจกต์อื่น และเราตัดสินใจใช้พวกเขาร่วมกันสำหรับ data-pipeline demo สำหรับ pop-up store

RedisGears รองรับหลายประเภทของ readers ที่ทำงานบนประเภทข้อมูล input ที่แตกต่างกัน เพื่อดู stream messages เราใช้ StreamReader ใน event mode ในโหมดนี้ reader ถูก execute ตอบสนองต่อ events ที่ถูกสร้างโดย messages ใหม่ที่เพิ่มเข้าไปใน stream

# 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 ยอมรับหลายอาร์กิวเมนต์ที่ควบคุมวิธีที่มันถูก trigger ในกรณีของเรา เราอยากให้ reader ถูก trigger ทุก 5 วินาที หรือหลังจากได้รับ 10,000 messages ตัวเลือกสุดท้าย trimStream ระบุว่าไม่ต้อง trim stream หลัง execution

เราใช้ RedisTimeSeries เพื่อจัดเก็บจำนวนข้อความที่เข้ามา และตัวอย่างขนาดคิว ตามที่อธิบายในบล็อกโพสต์แนะนำ Redis Data Source Plug-in for Grafana time series สามารถแสดงผลใน Grafana ได้ง่าย

สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

เพื่อสาธิตว่า Redis Streams, RedisTimeSeries, RedisGears และ Redis Data Source สามารถทำงานร่วมกันได้อย่างไร เราสร้าง Pop-up store demo พร้อม dynamic dashboard:

สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

Grafana dashboard นี้แสดง:

  • Product Available: ค่าของ product key ซึ่งลดลงเมื่อคำสั่งซื้อเสร็จสิ้น
  • Customers Ordering, Orders Processing, และ Orders Completed: ความยาวของ queue:customers, queue:orders, และ queue:complete streams
  • Customers Overflow: ความแตกต่างระหว่างคำสั่งซื้อที่ลูกค้าส่ง และคำสั่งซื้อที่เสร็จสิ้น
  • Customers Ordering: คำสั่งซื้อที่สร้างใน 5 วินาที
  • Orders In Queue: คำสั่งซื้อที่รอการประมวลผล
  • Completed Flow: คำสั่งซื้อที่เสร็จสิ้นใน 5 วินาที

โปรดดู GitHub repository สำหรับโปรเจกต์นี้ เพื่อดูว่าเราสร้าง load อย่างไร RedisGears scripts ที่เราใช้ และวิธีกำหนดค่า Redis Data Source เพื่อสอบถามข้อมูล RedisTimeSeries โดยใช้คำสั่ง TS.RANGE

สรุป

สถานการณ์จริง 3 อย่างนี้แสดงวิธีการใช้ Redis Data Source for Grafana กับโมดูล Redis ต่างๆ เราหวังว่าพวกเขาจะแรงบันดาลใจคุณให้ใช้เทคโนโลยีนี้และสร้างแอปพลิเคชันของคุณเอง

คุณจะอยู่ในกลุ่มที่ดี ตั้งแต่ Redis Data Source plug-in เผยแพร่ใน Grafana repository มันถูกดาวน์โหลดมากกว่า 10,000 ครั้ง รวมอยู่ใน community plug-ins ยอดนิยมที่สามารถปรับปรุง Grafana dashboard ของคุณได้ เพิ่มการรองรับ Redis cluster, Sentinel, Unix socket และ access control lists (ACLs):

สามแอป Grafana ที่พิสูจน์แล้ว ขับเคลื่อนด้วย Redis Data Source

แต่นั่นไม่ใช่ทั้งหมด อย่าลืมติดตาม Redis Tech blog เพื่อเรียนรู้เกี่ยวกับโปรเจกต์น่าตื่นเต้นที่รวมความสามารถ streaming ของ Grafana กับ interactivity เพื่อนำ Grafana ไปไกลกว่า observability ด้วย redis-cli panel