博客/社区

通过Grafana和其他云本地解决方案实时监控机器人bob彩票中奖计划

2022年7月6日7分钟

Edgardo Peregrino是一名自由软件开发人员、作家、制作者和IT技术员。

六年来,我一直是一个充满激情的制造者,专注于机器人技术。最近,我进入了云原生计算的世界,这使我能够将maker项目与诸如Grafana普罗米修斯和积家。

自从2016年我买了第一台树莓派3,第一次学会了如何闪烁LED,我就开始拥抱开源了。从那以后,我学会了如何使用键盘、安卓手机和用于物体检测的英特尔神经计算杆2等物品来控制机器人。我决定在Grafana中添加实时监控,以确保我的机器人在任何时候都在运行,并且请求之间的延迟非常小。在这方面还没有任何尝试,所以我觉得应该由我来直面挑战。

尽管我这样做只是作为一种爱好,但对于那些在装配工厂中使用工业机器人的人来说,监控尤其重要,因为他们的目标是100%的正常运行时间和最小的请求之间的延迟。当你在处理非常精确的动作时,这也是关键,必须避免任何错误。

我一直在做的项目涉及我的两个机器人:莱纳斯(左下)和托瓦尔兹(右下)。是的,我以Linux创始人的名字命名它们,因为他激励我进入开源领域。

机器人莱纳斯和托瓦兹

让我向您介绍我设置监视的经验以及在此过程中我学到的东西。

开始

我的旅程始于去年,当时我成功地创建了一个图形用户界面(GUI)来控制机器人。当时,我正在寻找控制它们的新方法——最初,我用蓝牙键盘和安卓智能手机作为机器人控制器进行键盘控制。我遇到了一个文章它展示了如何使用Flask Python库创建web应用程序,所以我尝试了教程,它让我继续学习。

我搞了一些示例应用程序,然后决定将web开发与控制led、伺服器和马达集成在一起。成功之后,我转向了机器人。我发现的教程(如这一个使用led和按钮创建web服务器)非常古老,使用RPi。而不是更新的GPIO Zero库。由于没有帮助,我决定自己解决问题。通过使用GPIO Zero而不是旧的RPi进行试验,我能够成功地控制GPIO引脚。GPIO图书馆。

jQuery对我控制机器人有很大帮助,因为它允许我只在按住鼠标左键时移动机器人。这是我需要创建一个功能机器人控制器所缺少的部分。

在此之前,我一直在使用一个机器人,所以我决定将项目扩展到两个机器人。为什么?因为控制一个机器人已经做过很多次了,而能够控制两个或两个以上的机器人更有帮助。

去年6月,当我被Udacity设立的SUSE奖学金项目录取时,情况开始好转。该项目主要关注Docker、Kubernetes和ArgoCD等云原生工具,当我学会如何使用这些工具部署Flask应用程序时,我感到非常兴奋。我决定使用我现有的示例应用程序,并尝试使用这些额外的工具将我现有的应用程序部署到云中。

这GitHub回购展示我的工作和这个演示视频展示我的机器人的动作。

让它更上一层楼

尽管一切都很成功,但仍然缺少一些东西。我心想,我怎么才能走得更远呢?

这个答案在去年8月的另一个机会中得到了答案,当时我被云原生应用程序体系结构纳米学位计划录取了。在三个月的时间里,我学习了消息传递和监视服务,以及保护服务。也是在那时,我学会了如何使用Grafana、Prometheus和Jaeger等服务。

完成课程后,我创建了一个小型测试应用程序。我的目标是首先监视一个小应用程序,然后构建监视系统。我的意图是将Grafana、Prometheus和Jaeger应用到我的应用程序中,并学习这些云原生工具是如何工作的。为了做到这一点,我必须使用普罗米修斯烧瓶出口商图书馆以便让Prometheus使用这些指标,然后在Grafana中以图表的形式呈现。我还决定为这个测试应用程序集成Jaeger。

为了安装Jaeger, Prometheus和Grafana,我依赖于Helm的图表,然后确保服务运行。为了将Jaeger与Grafana集成,我需要正确的查询代理。这需要在Linux上编写一些好的shell脚本。(顺便说一下,我所有的实验都是在我的Ubuntu 20.04电脑上进行的,因为需要安装Docker。)我最初使用Kind进行测试,但对于最终产品,我使用k3s。

我从监视一个闪烁LED的基本Flask应用程序开始。在那之后,我转向控制两个伺服电机,然后控制一个直流电机与速度控制。最后,是时候测试我的机器人托瓦兹了。当我知道一切都运行良好后,我决定使用我的双机器人应用程序,并对基本代码进行一些必要的更改。

运行这个应用程序需要几个步骤,所以我将介绍每个层,以解释它是如何工作的。

基本应用程序

这是运行我的机器人的应用程序。下图显示了该应用程序的截图。

基本应用程序截图

Docker层

这是应用程序打包的地方,可以作为容器运行。这是必要的,因为在下一步中,将使用Kubernetes部署Docker映像。

下面的示意图显示了积家、普罗米修斯和格拉夫娜是如何部署的。Jaeger和Prometheus从应用程序中收集数据,然后将其显示为人类可读的图表。

积家,普罗米修斯和格拉夫娜的部署示意图

在积家时,只要莱纳斯或托瓦尔兹的一只眼睛被眨一下,就会触发一个跨度,然后送到格拉夫纳去消耗。我还可以在莱纳斯的手臂移动时使用积家触发一个跨度。这对于调试任何问题和确保机器人启动并运行都很有用。

在这里,你可以看到一个被检测到的样本span:

检测到的样本跨度

正如我前面提到的,Prometheus Flask Exporter是必需的,这样Prometheus才能使用应用程序生成的数据,并在Grafana中以图表的形式显示它。为了让Prometheus使用应用程序中的度量,我必须确保所有服务都在运行,并且运行使用Kubernetes集群部署的应用程序。

有了集群后,我将浏览器指向localhost和端口5000,然后移动机器人。这就产生了普罗米修斯和积家可以使用并发送给格拉夫纳的数据。

仪表板

当我确定我有足够的样本数据时,我创建了我的Grafana指示板(如下),看到数据显示为不同的图表。

Grafana仪表板上的机器人数据

在这个仪表板中,我正在可视化:

  • Jaeger跨越
  • 每秒总请求数
  • 平均响应时间
  • 内存使用情况
  • 处理器利用率
  • 每秒请求数
  • Kubernetes pod正常运行时间

设置好后,我再次移动我的机器人,以确保图表正常工作,我可以看到实时的数据更新。我知道我有了一个赢家。

机器人和云原生计算

使用Grafana实时监控应用程序,并将其应用于制造商项目,如机器人,是一个很好的经验和旅程,了解Prometheus, Grafana和Jaeger是如何工作的。它还帮助我了解了更多关于云原生计算的知识。

Grafana是一个为应用程序创建仪表板的好工具,可以用来监视应用程序的任何问题。在maker项目中使用Grafana仪表板可以向用户展示如何诊断错误、停机和连接问题等问题。未来我想做的一件事是使用运行k3s的树莓派集群运行这个应用程序。

我希望了解我的项目能激励您自己进行实验,并接受之前没有人尝试过的新挑战。如果你想了解更多关于我的双机器人监控,请查看GitHub回购演示视频,展示了最终产品的运行情况。