Computer >> 컴퓨터 >  >> 프로그램 작성 >> Redis

Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

업데이트 3/29/21: https://coronavirusapi.com/은 최근 데이터에 대한 무료 액세스를 종료하여 등록된 첫 번째 응답자만 사용할 수 있습니다. 이는 불행히도 코로나바이러스 사례 시각화 프로젝트 데모가 더 이상 작동하지 않는다는 것을 의미하지만 Grafana Worldmap 패널에 RedisTimeSeries 데이터를 표시해야 할 때 우리의 힌트는 다른 많은 구현에 여전히 유용할 것입니다.

이전 게시물에서 우리는 Grafana용 새로운 Redis 데이터 소스를 사용하는 방법을 소개하고 보여주었습니다.

  • Grafana용 Redis 데이터 소스 플러그인 소개
  • Grafana 플러그인용 새 Redis 데이터 소스 사용 방법

이 게시물에서는 Redis에 저장하고 Grafana에서 시각화할 수 있는 많은 흥미로운 데이터 세트에 대한 아이디어를 제공하기 위해 설계된 몇 가지 실제 사례를 살펴보고자 합니다. 다음과 같은 세 가지 응용 프로그램을 다룹니다.

  1. 날씨 대시보드
  2. 코로나바이러스 사례 시각화
  3. 팝업 스토어 데모

1. 날씨 대시보드

정말 세상에 또 다른 날씨 대시보드가 ​​필요하다고 생각합니까? 네 저도 그렇습니다!

물론, 대부분의 경우 나는 날씨 괴짜가 아닙니다. 나는 종종 날씨가 어떤지 별로 신경 쓰지 않는다. 그리고 내가 그렇게 할 때조차도 최고의 날씨 대시 보드는 일반적으로 집 밖을 내다보는 창입니다. 하지만 가끔은 밖에서 사진을 찍거나 드론을 날릴 여유가 생기면 내 내면의 기상캐스터가 깨어납니다.

물론 가장 큰 질문은 어디로 가야 합니까? 뉴저지에 있는 내 집에서 차로 몇 시간 이내에 흥미로운 장소가 많이 있으며 날씨는 서로 매우 다를 수 있습니다. 내가 정말 원하는 것은 한 화면에 수십 곳의 날씨를 보여주는 대시보드로, 한 눈에 조건을 비교할 수 있다는 것입니다. 비판적으로, 나는 단지 서로 가까운 위치를 비교하고 싶지 않습니다.

Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

중요한 만큼, 저는 숫자로 작업하는 것을 좋아합니다. 풍경 사진은 구름의 양이 20~50% 사이일 때 가장 잘 작동한다는 것을 알고 있습니다. 내 드론을 날기 위해서는 10mph 미만의 풍속이 이상적이며 10-20mph는 힘들고 20mph를 초과하는 것은 위험할 수 있습니다. 그래서 이렇게 귀여운 날씨 아이콘은 별로 도움이 되지 않습니다.

이를 염두에 두고 Redis를 사용하여 날씨 대시보드를 구축한 방법은 다음과 같습니다.

다행히도 원시 날씨 데이터는 이제 다양한 날씨 API를 통해 널리 사용할 수 있으며 대부분은 무료입니다(일부 제한 있음). OpenWeatherMap API를 사용하기로 결정한 이유는 OpenWeatherMap API의 무료 요금제가 48시간 시간 예보, 7일 일일 예보, 현재 상태 등 필요한 모든 것을 제공하기 때문입니다.

API에서 데이터를 가져오고 RedisTimeSeries 모듈과 현재 조건을 사용하여 Redis 데이터베이스에 시간별/일별 예측값을 기록을 위한 다른 시계열 세트에 넣는 간단한 Python 스크립트를 작성했습니다.

내 날씨 대시보드는 두 가지 필수 대시보드 규칙을 따릅니다. 

  1. 모든 데이터는 스크롤할 필요 없이 한 화면에 표시되어야 합니다.
  2. 대시보드에 표시되는 상황을 최대한 빨리 이해할 수 있어야 합니다.
Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

대시보드의 상단 섹션은 기본 또는 즐겨찾기가 될 수 있는 한 위치의 현재 조건을 보여주거나 사용 가능한 장소 목록에서 선택될 수 있습니다(대시보드의 왼쪽 상단 모서리에 Grafana 템플릿 변수 선택 목록이 있음). 또한 해당 위치에서 특정 활동에 적합한 기간을 표시합니다. Grafana를 사용하면 온도에 대한 저/고온 영역, 풍속에 대한 위험 영역을 강조 표시하고, 흐림 정도를 표시하고, 주간 및 야간 기간을 표시할 수 있습니다.

하단 섹션은 활동별로 위치를 그룹화하여 쉽게 비교할 수 있습니다. 원이 클수록 특정 위치에서 특정 활동에 더 많은 시간이 소요됩니다.

Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

2. 코로나바이러스 사례 시각화

저는 여행을 좋아하지만 2020년에는 수백만 명의 사람들이 몇 달 동안 집에 머물게 되었습니다(영원하지 않기를 바랍니다!). 이제 많은 주에서 점차 재개되기 시작하므로 현명하게 여행하고 출발지와 도착지 모두에서 COVID-19 상황을 이해하는 것이 매우 중요합니다. 이는 현재 상황뿐만 아니라 장기적인 추세에도 주의를 기울이는 것을 의미합니다.

이것이 내 Grafana 미국 코로나바이러스 대시보드에 표시되는 내용입니다. RedisTimeSeries 모듈에 로드된 코로나바이러스 API 데이터를 기반으로 합니다.

Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

표준 그래프 표현 외에 데이터도 지도에 그려집니다. Redis 데이터 소스 플러그인은 Grafana Worldmap 패널에서 공식적으로 지원되지 않지만 두 가지 간단한 단계로 작동하도록 할 수 있습니다. 

1단계: 시계열 출력 결과에 "레이블을 필드로" 변환을 적용합니다.

Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

2단계: 지도 매개변수 "위치 데이터"를 테이블 모드로 변경하고 관련 필드를 매핑합니다.

Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

이 두 단계를 통해 RedisTimeSeries의 "geohash" 레이블로 설정된 지도의 관련 지점에 시계열 값을 고정할 수 있습니다. "주"라는 레이블은 지도에 위치의 이름을 표시하는 데 사용됩니다.

3. 팝업 스토어 데모

저는 Redis 5.0에 도입된 새로운 데이터 유형인 Redis Streams의 열렬한 팬이며 데이터 처리를 위해 대기열을 모니터링하는 빠르고 간단한 솔루션을 찾고 있었습니다. Redis 데이터 소스에서 작업하는 동안 우리 팀은 다른 프로젝트를 위해 Redis에서 개발자가 데이터의 배포 및 배포를 추상화하면서 데이터 흐름을 구현하는 기능을 작성하고 실행할 수 있는 동적 프레임워크인 RedisGears를 탐색하기 시작했고 함께 사용하기로 결정했습니다. 팝업 스토어용 데이터 파이프라인 데모용

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를 사용하여 수신 메시지 수와 대기열 크기 샘플을 저장했습니다. Grafana용 Redis Data Source Plug-in에 대한 소개 블로그 게시물에서 설명한 것처럼 시계열은 Grafana에서 쉽게 시각화할 수 있습니다.

Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

Redis Streams, RedisTimeSeries, RedisGears 및 Redis 데이터 소스가 함께 작동하는 방법을 보여주기 위해 동적 대시보드가 ​​있는 팝업 스토어 데모를 만들었습니다.

Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

이 Grafana 대시보드에는 다음이 표시됩니다.

  • 사용 가능한 제품: 주문이 완료되면 감소하는 제품 키 값
  • 주문 고객, 주문 처리 및 완료된 주문: queue:customers, queue:orders 및 queue:complete 스트림의 길이
  • 고객 오버플로: 고객이 제출한 주문과 완료된 주문의 차이
  • 주문 고객: 5초 만에 생성된 주문
  • 대기 중인 주문: 처리 대기 중인 주문
  • 완료된 흐름: 주문 완료 5초

이 프로젝트의 GitHub 리포지토리에서 로드를 생성한 방법, 사용한 RedisGears 스크립트, TS.RANGE 명령을 사용하여 RedisTimeSeries 데이터를 쿼리하도록 Redis 데이터 소스를 구성하는 방법을 확인하세요.

결론

이 세 가지 실제 시나리오는 다양한 Redis 모듈과 함께 Grafana용 Redis 데이터 소스를 사용하는 방법을 보여줍니다. 그들이 이 기술을 사용하고 자신의 응용 프로그램을 구축하도록 영감을 주기를 바랍니다.

당신은 좋은 회사에있을 것입니다. Redis 데이터 소스 플러그인이 Grafana 리포지토리에 게시된 이후로 이미 10,000회 이상 다운로드되었으며 Grafana 대시보드를 개선하고 Redis 클러스터, Sentinel, Unix 소켓 및 액세스 제어 목록(ACL):

Grafana용 Redis 데이터 소스로 구축된 3가지 실제 앱

하지만 그게 다가 아닙니다. Redis Tech 블로그에서 Grafana 스트리밍 기능과 상호작용성을 결합하여 redis-cli 패널을 통해 Grafana를 관찰할 수 있는 수준 이상으로 끌어올리는 흥미로운 프로젝트에 대해 알아보세요.