使用Telegraf和InfluxDB仪表板进行COVID-19追踪
作者:社区 / 产品,用例,开发者
2021年8月10日
导航到
本文由InfluxData 2021年夏季实习生Bar Weiner、Sara Ghodsi、Brandii Warden、Alex Krantz和Beth Legesse撰写。
今年年度实习生黑客松活动期间,我们决定模拟和监控全国范围内的实时COVID-19数据。随着新变种被发现并以惊人的速度在美国所有50个州传播,COVID-19仍然对公众构成重大风险,尤其是未接种疫苗的个人或计划在美国境内旅行的个人。
我们的项目描述
我们创建了一个平台,使得与COVID-19数据相关的关键信息更容易获取,包括特定位置的疫苗接种率和阳性病例数。
我们的最初想法是从零开始创建一个React应用程序,并使用Giraffe在我们的自定义应用程序中可视化数据。然而,经过半天的规划,列出所有我们想要的功能,制定计划,并从导师那里获取反馈后,我们决定使用InfluxDB Cloud免费服务查询和可视化我们的数据,同时测试新的UI产品更现实和直接。
为了开始我们的流程,我们找到了许多不同的公共COVID-19 API。由于每个API都有一个独特的数据点集,我们选择了符合我们目标的那几个。然后我们尝试从API端点下载我们需要的JSON或CSV文件,并将它们输入InfluxDB进行分析和可视化。在努力格式化文件以符合Influx规范后,我们意识到使用Telegraf系统性地、可重复地摄取数据将更加高效和有效。
以下是我们所使用的API端点列表
- https://disease.sh/v3/covid-19/jhucsse/counties
- https://disease.sh/v3/covid-19/nyt/states?lastdays=30
- https://disease.sh/v3/covid-19/states
- https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/vaccinations/us_state_vaccinations.csv
做得好的地方
我们为图表和地图创建了三个仪表板。其中一个仪表板包含了COVID-19病例和死亡统计数据,以及完全接种疫苗人数的百分比。我们还包含了过去30天内总病例数和疫苗接种率的两个图表。还有一个选项可以更改州,我们使用变量填充了这些数据。如果您从下拉菜单中选择另一个州,统计数据将更改以显示所选州的相关数据。
我们的第二个仪表板显示了美国每个县的死亡人数,并在地图上表示。我们还包括了每个县的确诊病例数。地图上的每个点都有一个阈值,用于检查死亡人数是高还是低,并据此将县的颜色设置为绿色、黄色或红色。这张地图对于识别美国疾病中心非常实用。颜色为红色的县报告的死亡人数超过2000人,这意味着该地区COVID-19的流行程度极高。
这张地图是我们编写的查询中最复杂的。为了让地图显示点,我们必须有每个县的纬度和经度,以及死亡人数和确诊病例数。我们必须使用连接函数将多个数据集连接起来,并使数据与相应的坐标对齐。
最后一个仪表板显示了每个州的疫苗接种率,并在另一张地图上显示。这张地图还设置了阈值,根据疫苗接种率给每个州分配不同的颜色。如果一个州的超过50%的人口完全接种疫苗,它将显示为绿色。如果疫苗接种率在40%到50%之间,州的颜色为黄色,如果少于40%,我们将其分配为红色。这个阈值在人们决定前往另一个州旅行时最有用:他们可以在地图上查找那个州,看看是否安全。
我们的疫苗接种地图查询与其他地图非常相似。不同的是我们查询中访问的数据。
为了将数据拉入我们的covid
存储桶,我们设置了四个不同的Telegraf配置。每个配置都服务于独特的目的,因为我们找到了返回我们想要摄取数据的类型的唯一API端点。每个仪表板都需要不同的配置和数据点,因此我们需要从各种API中获取丰富的数据,以进行我们想要的监控和分析。
例如,covid-historic
telegraf从一个返回过去30天COVID-19统计数据的API中提取数据。然后我们将数据存储在states-covid-historic
测量中,并用于查询COVID-19美国州仪表板上的第一个图表。
做得不好的地方
在我们的黑客马拉松冲刺期间,我们遇到了许多挑战,但我们所做的是相互沟通、意识到我们还不了解的事情,并有效地寻求帮助以完成我们的目标。
在自动化Telegraf时,我们面临了使用免费Cloud2账户拉取大量数据集(如美国每个县的COVID-19统计数据)时固有的基数和查询写入限制问题。在某个时候,我们必须研究如何降低我们的基数,甚至在整个过程中删除我们的存储桶:即使我们降低了基数使用,我们的存储桶也需要几小时才能重置,而我们紧张的开发过程中无法等待。
我们在数据展示上也遇到了一些困难,尤其是在地图格式上。为了解决这个问题,我们不得不退一步重新审视我们的数据,并决定在尝试编写查询和将其输入到可视化中之前重新构建它。在导师的帮助下,我们更接近了这个目标,并最终通过编写Flux脚本来配置我们的仪表板和整理我们的数据实现了它。对我们整个团队来说,编写Flux并在不同的产品中工作以获得对公司的更全面了解是一种非常酷的经历。
最后思考
未来,我们希望继续导入数据,以便在实习期间有一个可以分析的数据库。此外,一些改进可以使项目更加完整,例如通过阈值检查添加警报,并增加桶保留策略,以便我们可以查看30天前的历史数据。添加警报可能会非常有帮助,因为它将允许您获得关于您所在县或州的当前疫苗接种状况的通知。
如果我们再次进行这个项目,我们会在导入之前预处理我们的数据,使其更容易处理,通过删除无关数据并在每个县或州预先关联位置数据。在导入之前合并数据将防止我们在InfluxDB中处理无关数据,提高我们的查询时间,并多次达到基数限制。这也会极大地简化我们的Telegraf配置,因为我们不需要处理别人的数据结构。
模板链接
我们从我们的项目中创建了一个模板。您可以在社区模板存储库中查看它:[https://github.com/influxdata/community-templates/tree/master/covid19-usa-states](https://github.com/influxdata/community-templates/tree/master/covid19-usa-states)