Découvrez comment Alibaba Cloud a utilisé le tableau de bord Grafana pour afficher de manière dynamique des informations sur les épidémies de COVID-19.
Je souhaite personnaliser le tableau de bord qui affiche l'état de la tendance pour clarifier l'objectif. Étant donné que je suis actuellement à Shanghai, j'aimerais afficher le nombre de cas confirmés, de cas suspects, de guérisseurs et de décès dans tout le pays, et en même temps, afficher la courbe des cas pour observer la tendance de développement de l'épidémie, et chaque province et district de Shanghai. Je souhaite afficher l'état de.
Grafana n'est qu'un outil pour afficher des données, vous devez donc d'abord obtenir une source de données. Actuellement, les sources de données disponibles sur la peste ne peuvent pas être intégrées directement dans Grafana. Par conséquent, vous devez effectuer les opérations suivantes:
--Préparez le ** programme Grafana ** sur votre ordinateur portable ou votre cluster Kubernetes. Nous vous recommandons d'utiliser le conteneur Docker pour exécuter Grafana.
--Installez le ** plug-in SimpleJson ** qui peut convertir des données au format JSON en une source de données pour Grafana.
Ici, nous développons une source de données utilisant Python Bottle. Une autre option est Flask, qui a la même fonctionnalité. J'ai décidé d'utiliser Bottle parce que je l'ai utilisé pour développer ma précédente source de données Grafana. Non seulement les paramètres de débogage, mais aussi le Dockerfile
pour créer l'image Docker et le fichier deploy.yaml
pour le déploiement de Kubernetes sont préparés et prêts à être utilisés. Développer une source de données Grafana à l'aide de Python est très simple. Assurez-vous simplement que vos données répondent aux exigences de formatage de SimpleJson
. Blog de Oz Nahum Tiram sur l'utilisation de Python pour développer des sources de données pour Grafana Article "[Visualisez presque tout avec Grafana et Python](http://oz123.github.io/writings/2019-06-16-Visualize-almost-anything-with-Grafana-and-Python/index.html?spm=" Veuillez lire a2c65.11461447.0.0.2e7418faOcjQf4) ".
Il existe deux types de données disponibles pour personnaliser votre source de données:
série chronologique
Pour une vue en temps réel des tendances épidémiques en Chine, en particulier à Shanghai, vous pouvez afficher les cas confirmés, les cas suspects, les collectes, les décès et les modifications des données par rapport aux données précédentes. Vous pouvez également dessiner une courbe pour comparer les cas confirmés et suspects, ainsi que le nombre de collectes et de décès.
Pour les cas confirmés, renvoyez simplement les données en combinant le nombre de cas confirmés à l'échelle nationale «gntotal» avec l'horodatage actuel. D'autres métriques peuvent être traitées de la même manière.
@app.post('/query')
def query():
print(request.json)
body = []
all_data = getDataSync()
time_stamp = int(round(time.time() * 1000))
for target in request.json['targets']:
name = target['target']
if name == 'gntotal':
body.append({'target': 'gntotal', 'datapoints': [[all_data['gntotal'], time_stamp]]})
body = dumps(body)
return HTTPResponse(body=body, headers={'Content-Type': 'application/json'})
Table
Vous pouvez utiliser un tableau qui répertorie les cas confirmés, suspects, guéris et mortels dans chaque province de Chine, et un autre tableau qui présente les mêmes données pour chaque district de Shanghai.
Vous pouvez extraire les noms, les cas confirmés, les cas suspects, les récupérateurs et les morts des données et les ajouter à la ligne rows
.
@app.post('/query')
def query():
print(request.json)
body = []
all_data = getDataSync()
sh_data = getShDataSync()
if request.json['targets'][0]['type'] == 'table':
rows = []
for data in all_data['list']:
row = [data['name'], data['value'], data['susNum'], data['cureNum'], data['deathNum']]
rows.append(row)
sh_rows = []
for data in sh_data['city']:
row = [data['name'], data['conNum'], data['susNum'], data['cureNum'], data['deathNum']]
sh_rows.append(row)
bodies = {'all': [{
"columns": [
{"text": "Économie", "type": "name"},
{"text": "确 诊", " type": "conNum"},
{"text": "pseudo", " type": "susNum"},
{"text": "Guérir", "type": "cureNum"},
{"text": "mort", "type": "deathNum"}
],
"rows": rows,
"type": "table"
}],
'sh': [{
"columns": [
{"text": "Économie", "type": "name"},
{"text": "确 诊", " type": "value"},
{"text": "pseudo", " type": "susNum"},
{"text": "Guérir", "type": "cureNum"},
{"text": "mort", "type": "deathNum"}
],
"rows": sh_rows,
"type": "table"
}]}
series = request.json['targets'][0]['target']
body = dumps(bodies[series])
return HTTPResponse(body=body, headers={'Content-Type': 'application/json'})
Quatre panneaux sont généralement utilisés pour afficher les données.
Une seule statistique est utilisée pour afficher le numéro de cas.
Le graphique affiche une courbe de comparaison.
--Table est utilisé pour afficher le tableau.
--Le texte est utilisé pour le titre du texte.
Maintenant, configurons la source de données.
Puisqu'il n'y a qu'une seule valeur ici, sélectionnez Premier.
Ces graphiques comparent le nombre de cas confirmés et suspects, le nombre de collectes et le nombre de décès.
La finition générale est bonne et est utilisée comme tableau de bord tendance de l'entreprise. Ici, nous utilisons le téléviseur Xiaomi, qui a un écran relativement petit, nous avons donc élargi les polices et le panneau d'affichage pour améliorer la démo.
Après avoir empaqueté votre code dans une image Docker, vous pouvez exécuter votre code dans n'importe quel environnement ou dans un cluster Kubernetes. L'image a été téléchargée sur Docker Hub et peut être extraite de là pour une utilisation immédiate.
# Dockerfile
FROM python:3.7.3-alpine3.9
LABEL maintainer="[email protected]"
COPY . /app
RUN echo "https://mirrors.aliyun.com/alpine/v3.9/main/" > /etc/apk/repositories \
&& apk update \
&& apk add --no-cache gcc g++ python3-dev python-dev linux-headers libffi-dev openssl-dev make \
&& pip3 install -r /app/requestments.txt -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
WORKDIR /app
ENTRYPOINT ["uwsgi","--ini","uwsgi.ini"]
docker pull guoxudongdocker/feiyan-datasource
docker run -d --name datasource -p 8088:3000 guoxudongdocker/feiyan-datasource
Sélectionnez la source de données SimpleJson
, cliquez sur Ajouter et entrez l'adresse de la source de données.
** Tableau de bord d'importation **
Cliquez sur le fichier ʻUpload.json et sélectionnez
wuhan2020-grafana / dashboard.json`.
(Facultatif) Utilisez Kubernetes pour le déploiement.
kubectl apply -f deploy.yaml
À la mi-février, lorsque j'ai écrit ceci, le nombre de cas confirmés en Chine continue d'augmenter rapidement, mais heureusement, le taux de croissance des cas suspects commence à baisser. On peut constater que le taux d'augmentation du nombre de cas confirmés augmente régulièrement et que le nombre de collectes augmente également. Par rapport à d'autres régions, le nombre de cas à Shanghai n'a pas augmenté de manière significative, même si de nombreuses personnes ont repris le travail. Dans ce cadre, des mesures de répression strictes contre les zones résidentielles commencent à prendre effet. Actuellement, il n'y a qu'un seul décès à Shanghai, car il a enregistré la première reprise de la Chine. En général, tant que nous prêtons attention à la prévention et restons à la maison, il ne fait aucun doute que nous surmonterons l'épidémie et surmonterons cette période difficile.
Le fichier JSON
pour l'importation de tableaux de bord et le fichier YMAL
pour le déploiement de Kubernetes se trouvent sur GitHub. L'adresse du projet est ici. https://github.com/sunny0826/wuhan2020-grafana
Tout en continuant à lutter contre les coronavirus qui se produisent dans le monde, Alibaba Cloud veut faire sa part et faire tout ce qui est en son pouvoir pour aider les autres dans la lutte contre les coronavirus. Je suis. Pour plus d'informations sur la prise en charge de la continuité de vos activités, consultez https://www.alibabacloud.com/campaign/fight-coronavirus-covid-19 Veuillez vérifier avec -covid-19).
Recommended Posts