监控#
简介#
监控是所有软件组件的所在地,这些组件用于监控、持久化和可视化边缘设备状态,例如 CPU 和 RAM 使用率、流 fps 等。我们利用开源监控技术和定制监控逻辑,专门为 Jetson 设备及其用例量身定制。监控堆栈由以下 5 个组件组成
导出器:轻量级 HTTP 服务器,用于公开有关应用程序状态的指标。端点将由 Prometheus 服务器抓取。导出器包括但不限于:系统监视器、自定义导出器等。自定义导出器导出摄像头状态、流 fps 等。感兴趣的各方可以将导出器集成到他们自己的应用程序中。
Web 服务器:监控有一个 Web 服务器,主要服务于警报的 CRUD 操作。它为三种类型的客户端提供服务:Grafana 服务器、Alertmanager 回调和移动用户。Grafana 服务器有一个自定义数据源,可以从 HTTP 端点检索数据,并具有作为 Web 服务器一部分托管的过滤功能。Alertmanager 需要为所有生成的警报注册接收器。接收器需要具有自定义逻辑,以持久化数据并转发到消息代理(例如 Slack)。我们将此类逻辑作为 Web 服务器的一部分托管。除了上述两种用例外,大多数警报的 CRUD 操作也作为 HTTP 端点公开,供所有其他客户端使用。此流程主要为移动用户或任何希望与监控集成的其他感兴趣的各方构建。
指标和警报:我们使用 Prometheus 和 Alertmanager 来处理和路由指标和警报。Prometheus 负责抓取目标的指标并定期评估警报规则。当触发警报规则时,会生成异步警报,发送到 Alertmanager,并转发到下游回调。它也充当 Grafana 的数据源之一。监控还具有一些自定义逻辑,用于评估 Prometheus 设置之外的某些警报标准,并订阅消息代理(例如 Redis),以处理来自另一个微服务的同步警报。当警报标准无法根据 Prometheus 指标(例如摄像头状态)确定时,将使用此工作流程。
可视化:Grafana 是我们所有可视化需求的选择。Grafana 消耗三个数据源:Web 服务器、Prometheus。Web 服务器和 Prometheus 的数据流已在前几节中进行了解释。
指标网关和监控守护程序:在极少数情况下(权限/安全约束),导出器容器无法检索有关主机系统的某些信息。我们通过 Linux 系统上的系统命令实用程序注册一个守护程序服务,该服务在启动时启动,定期检索指标并将其馈送到指标网关容器。指标网关容器随后将被 Prometheus 服务器抓取。当主机上的 /sys 目录对导出器容器不可用时,此模式将应用于 GPU 监视器。
架构#

仪表板#
仪表板可以通过 <HOST_ADDR>:3000
访问。默认凭据:<admin, admin> 在未被覆盖的情况下使用。
Tegrastats#
GPU 统计信息#
GPU 利用率百分比、时钟频率(GHz)和温度(摄氏度)。

CPU 统计信息#
CPU 核心使用率百分比

EMC 和 ENC/DEC#
EMC 带宽利用率百分比和频率(GHz),以及解码器/编码器频率(GHz)

摄像头状态#
包含摄像头 ID、摄像头名称、当前状态和累积故障计数的表格,以及按流名称标记的 fps 图表。

系统指标#
表格显示默认系统仪表板,其中包含节点导出器导出的所有指标,包括 RAM、CPU、网络、文件系统等。

OSS#
Prometheus#
Prometheus 是中央处理单元,也是从所有软件组件导出的时间序列数据的数据持久化解决方案。默认过期时间设置为 14 天,之后数据将从文件系统中清除。如果需要更长的过期时间,则可以配置该设置,但代价是 RAM 使用量增加,因为旧的时间序列数据仍需要在内存中建立索引。可以配置基本设置和警报规则。有关详细信息,请参阅配置部分。值得指出的是,抓取的频率和数量与 CPU 和 RAM 使用率之间的权衡。换句话说,如果您需要更多指标,并且对数据的临时性有严格的要求,则会消耗更多 RAM 和 CPU。您可以通过 <HOST_ADDR>:9090 访问 Prometheus 服务器。
Alertmanager#
Alertmanager 处理 Prometheus 服务器发送的警报。它负责对警报进行重复数据删除、分组和路由到正确的接收器。它还负责警报的静默和抑制。目前,监控 Web 服务器是 Alertmanager 的唯一接收器。根据警报类型及其关联的标签,可以将 Alertmanager 配置为具有不同的处理机制。有关更多详细信息,请参阅配置部分。当警报被解决(意味着警报规则不再处于活动状态)时,Alertmanager 还会将确认信息发送回 Web 服务器,以便其处理并相应地更新记录。您可以通过 <HOST_ADDR>:9093 访问 Alertmanager 服务器。
Node Exporter#
Node Exporter 公开了各种硬件和内核相关的指标。它对于监控系统级指标(例如 RAM 和 CPU 使用率)至关重要。您可以通过 <HOST_ADDR>:9100/metrics 访问 Node Exporter。
GPU Exporter#
tegrastats 实用程序报告基于 NVIDIA® Jetson™ 的设备的内存使用率和处理器使用率。
Grafana#
Grafana 有两个数据源:Prometheus 和 SimpleJson。Prometheus 服务器通过抓取目标来提供所有时间序列数据,而 SimpleJson 插件使 Grafana 可以调用 Web 服务器托管的 API 端点来获取其数据。如前一节所述,此数据流有助于填充具有过滤功能的警报仪表板。最重要的是,摄像头状态仪表板还使用此数据流从 Web 服务器查询摄像头状态,Web 服务器将请求委托给 VST 端点。您可以通过 <HOST_ADDR>:30080/grafana 访问 Grafana。
JPS-Metrics-Exporter#
jps-metrics-exporter 处理 DeepStream 日志并提取作为 Prometheus 指标公开的信息。此当前版本的指标导出器提取 DeepStream FPS 值和流添加/删除事件,然后将其作为 Prometheus 指标公开。Grafana 将拉取这些指标并在仪表板中公开它们。根据需要,Prometheus 将聚合这些指标以创建警报,这些警报将被推送到任何接收器,例如 Slack 或 SDR。

启动和停止服务#
启动监控服务
sudo systemctl start jetson-monitoring
sudo systemctl start jetson-sys-monitoring
sudo systemctl start jetson-gpu-monitoring
验证平台 Ingress 配置文件中所有行(对于监控服务)是否已取消注释,如果未取消注释,则取消注释
/opt/nvidia/jetson/services/ingress/config/platform-nginx.conf
在所有监控服务启动后,(重新)启动 Ingress 服务
sudo systemctl start jetson-ingress
要停止监控服务,请按相反顺序执行
sudo systemctl stop jetson-ingress
(如果其他服务不需要)sudo systemctl stop jetson-gpu-monitoring
sudo systemctl stop jetson-sys-monitoring
sudo systemctl stop jetson-monitoring