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

3 แอพในชีวิตจริงที่สร้างด้วยแหล่งข้อมูล Redis สำหรับ Grafana

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

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

  • ขอแนะนำปลั๊กอินแหล่งข้อมูล Redis สำหรับ Grafana
  • วิธีใช้แหล่งข้อมูล Redis ใหม่สำหรับปลั๊กอิน Grafana

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

  1. แดชบอร์ดสภาพอากาศ
  2. การแสดงภาพกรณี Coronavirus
  3. ตัวอย่างร้านค้าป๊อปอัป

1. แดชบอร์ดสภาพอากาศ

ฉันคิดว่าโลกต้องการแดชบอร์ดสภาพอากาศอีกหรือไม่ ใช่ฉันทำ!

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

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

3 แอพในชีวิตจริงที่สร้างด้วยแหล่งข้อมูล Redis สำหรับ Grafana

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

เมื่อคำนึงถึงสิ่งนี้ นี่คือวิธีที่ฉันสร้างแดชบอร์ดสภาพอากาศโดยใช้ Redis

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

ฉันเขียนสคริปต์ Python อย่างง่ายเพื่อดึงข้อมูลจาก API และใส่การคาดการณ์รายชั่วโมง/รายวันลงในฐานข้อมูล Redis โดยใช้โมดูล RedisTimeSeries และเงื่อนไขปัจจุบันลงในชุดอนุกรมเวลาอื่นสำหรับประวัติ

แดชบอร์ดสภาพอากาศของฉันเป็นไปตามกฎแดชบอร์ดบังคับสองข้อของฉัน: 

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

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

ส่วนด้านล่างจัดกลุ่มสถานที่ตามกิจกรรม ทำให้ง่ายต่อการเปรียบเทียบ ยิ่งวงกลมใหญ่ขึ้น ชั่วโมงก็ยิ่งดีสำหรับกิจกรรมบางอย่างในสถานที่หนึ่งๆ

3 แอพในชีวิตจริงที่สร้างด้วยแหล่งข้อมูล Redis สำหรับ Grafana

2. การแสดงภาพกรณี Coronavirus

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

นี่คือสิ่งที่แดชบอร์ด Coronavirus ของสหรัฐอเมริกา Grafana แสดงให้เห็น โดยอิงตามข้อมูล Coronavirus API ที่โหลดลงในโมดูล RedisTimeSeries

3 แอพในชีวิตจริงที่สร้างด้วยแหล่งข้อมูล Redis สำหรับ Grafana

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

ขั้นตอนที่ 1: ใช้การแปลง "ป้ายกำกับที่ช่อง" กับผลลัพธ์เอาต์พุตอนุกรมเวลา:

3 แอพในชีวิตจริงที่สร้างด้วยแหล่งข้อมูล Redis สำหรับ Grafana

ขั้นตอนที่ 2: เปลี่ยนพารามิเตอร์แผนที่ “ข้อมูลตำแหน่ง” เป็นโหมดตารางและจับคู่ฟิลด์ที่เกี่ยวข้อง:

3 แอพในชีวิตจริงที่สร้างด้วยแหล่งข้อมูล Redis สำหรับ Grafana

สองขั้นตอนนี้จะช่วยให้คุณติดค่าอนุกรมเวลากับจุดที่เกี่ยวข้องบนแผนที่ ซึ่งกำหนดโดยป้ายกำกับ “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

3 แอพในชีวิตจริงที่สร้างด้วยแหล่งข้อมูล Redis สำหรับ Grafana

เพื่อแสดงให้เห็นว่า Redis Streams, RedisTimeSeries, RedisGears และ Redis Data Source สามารถทำงานร่วมกันได้อย่างไร เราได้สร้างการสาธิตร้านค้าป๊อปอัปด้วยแดชบอร์ดแบบไดนามิก:

3 แอพในชีวิตจริงที่สร้างด้วยแหล่งข้อมูล Redis สำหรับ Grafana

แดชบอร์ด Grafana นี้แสดง:

  • สินค้าที่มีจำหน่าย: มูลค่าของรหัสผลิตภัณฑ์ซึ่งลดลงเมื่อคำสั่งซื้อเสร็จสมบูรณ์
  • การสั่งซื้อของลูกค้า การประมวลผลคำสั่งซื้อ และการสั่งซื้อที่เสร็จสมบูรณ์: ความยาวของคิว:ลูกค้า คิว:คำสั่งซื้อ และคิว:สตรีมที่สมบูรณ์
  • ลูกค้าล้น: ความแตกต่างระหว่างคำสั่งซื้อที่ลูกค้าส่งมาและคำสั่งซื้อที่เสร็จสมบูรณ์
  • การสั่งซื้อของลูกค้า: คำสั่งซื้อที่สร้างขึ้นใน 5 วินาที
  • การสั่งซื้อในคิว: คำสั่งซื้อที่รอดำเนินการ
  • ขั้นตอนที่เสร็จสมบูรณ์: คำสั่งซื้อเสร็จสมบูรณ์ใน 5 วินาที

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

บทสรุป

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

คุณจะเป็นเพื่อนที่ดี เนื่องจากปลั๊กอิน Redis Data Source ได้รับการเผยแพร่ในที่เก็บ Grafana จึงมีการดาวน์โหลดมากกว่า 10,000 ครั้ง ซึ่งรวมอยู่ในปลั๊กอินชุมชนยอดนิยมที่สามารถปรับปรุงแดชบอร์ด Grafana ของคุณได้ เพิ่มการรองรับคลัสเตอร์ Redis, Sentinel, Unix socket และ รายการควบคุมการเข้าถึง (ACL):

3 แอพในชีวิตจริงที่สร้างด้วยแหล่งข้อมูล Redis สำหรับ Grafana

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