使用OpenTelemetry远程监控

目标

使用OpenTelemetry实现远程监控的目标

项目目标:

  • 使用OpenTelemetry收集远程模块的遥测数据(指标、轨迹、日志)。

  • 将遥测数据发送到OpenTelemetry协议端点

使用哪个OpenTelemetry端点以及如何可视化数据由用户决定。

OpenTelemetry

OpenTelemetry标志

云本地软件的可观察框架

OpenTelemetry是一个工具、api和sdk的集合。您可以使用它来测量、生成、收集和导出遥测数据(指标、日志和跟踪)以进行分析,以了解软件的性能和行为。

第一阶段总结

用户调查

我们的团队进行了一项用户调查,以了解关于Jenkins远程控制的痛点。必威国际有限公司

图1所示。您使用什么代理类型/插件?

最终用户调查结果

图1显示了agent用户使用的类型,28个唯一的应答者中有17个使用docker for agent。因此,我计划发布一个docker映像来演示如何使用监控特性构建docker映像。

这次对过去两年JIRA机票的调查和调查也告诉了我五个常见的代理不可用的原因。

  • 配置错误

    • 必威国际有限公司Jenkins代理设置,例如误用“隧道连接通过”选项。

    • 平台设置,例如Kubernetes的helm模板端口设置无效。

    • 网络设置,例如负载均衡器配置错误。

  • 节点无控制停机缩小规模。

  • 超时期间供应一个新节点。

  • 防火墙、杀毒软件或其他网络组件会切断连接

  • 缺乏硬件资源,例如内存、临时空间等。

我们也在调查中听到了有价值的用户声音。

你希望詹金斯监控的哪些方面做得更好?必威国际有限公司

我创建了一些临时的监视任务,以检查代理的运行状况并发送电子邮件。如果能巩固一下就好了。

拥有节点的存档以及对其日志/事件的访问将是很好的。

我希望通过OpenTelemetry实现这些特性,它有望成为可观察性的行业标准,将为Jenkins社区带来很棒的监控体验。必威国际有限公司

概念验证

如何将监控程序传递给代理商

1.通过远程向代理发送监控程序

通过远程发送监控程序

在我的第一个实现中,我准备了一个Jenkins插件,并从Jenkins控制器发送监必威国际有限公司视程序。然而,这种方法有以下缺点。

  1. 在初始连接之前,我们无法收集遥测数据。在配置新节点时,我们可能会遇到问题,因此从一开始就观察代理的遥测数据很重要。

  2. 一些代理商重新启动(例如。UnixSlaveRestarter)重新连接时完全重新启动代理。这意味着每次连接关闭时,代理就会丢失监控程序,在连接丢失后,还没有建立新的连接,就无法收集遥测数据。

所以我们决定采用下一种方法。

2.在发放新代理时安装监控引擎

发放时安装监控引擎

在这种方法中,用户将下载名为monitoring engine的监控程序(这是一个JAR文件),并在供应时将其放在代理节点中。

仪器远程如何产生远程跟踪

将仪器扩展点添加到远程

这种方法使代理启动命令更加复杂,我们必须克服这个问题。

当前状态

指标

我们目前支持以下指标,并计划支持更多。

指标

单位

标签

关键

描述

system.cpu.load

1

系统CPU负载。看到com.sun.management.OperatingSystemMXBean.getSystemCpuLoad

system.cpu.load.average.1m

系统CPU负载平均1分钟参见java.lang.management.OperatingSystemMXBean.getSystemLoadAverage

system.memory.usage

字节

状态

使用免费的

看到com.sun.management.OperatingSystemMXBean.getTotalPhysicalMemorySizecom.sun.management.OperatingSystemMXBean.getFreePhysicalMemorySize

system.memory.utilization

1

系统内存利用率请参见com.sun.management.OperatingSystemMXBean.getTotalPhysicalMemorySizecom.sun.management.OperatingSystemMXBean.getFreePhysicalMemorySize.如果JVM没有发现物理内存,则报告0%。

system.paging.usage

字节

状态

使用免费的

看到com.sun.management.OperatingSystemMXBean.getFreeSwapSpaceSizecom.sun.management.OperatingSystemMXBean.getTotalSwapSpaceSize

system.paging.utilization

1

看到com.sun.management.OperatingSystemMXBean.getFreeSwapSpaceSizecom.sun.management.OperatingSystemMXBean.getTotalSwapSpaceSize.如果JVM没有发现交换内存,则报告0%。

process.cpu.load

进程CPU负载。看到com.sun.management.OperatingSystemMXBean.getProcessCpuLoad

process.cpu.time

ns

进程的CPU时间。看到com.sun.management.OperatingSystemMXBean.getProcessCpuTime

runtime.jvm.memory.area

字节

类型

使用承诺马克斯

看到MemoryUsage

区域

non_heap

runtime.jvm.memory.pool

字节

类型

使用承诺马克斯

看到MemoryUsage

PS伊甸园空间G1旧创...

runtime.jvm.gc.time

女士

gc

G1年轻一代G1老的代, ...

看到GarbageCollectorMXBean

runtime.jvm.gc.count

1

gc

G1年轻一代G1老的代, ...

看到GarbageCollectorMXBean

痕迹

我们尝试了几种方法来实现仪器遥控模块,但目前还没有确定好的方法。

下面是要收集的跨度的文档草稿。谷歌文档

日志

快到了!

度量和跨度演示可视化

我们的团队用Docker创建了一个演示示例,并将度量和跨度可视化。

点击打开新标签

普罗米修斯指标可视化jaeger跨度可视化

谷歌代码夏季期中考演示

我们的项目演示从8:20开始

下一个步骤

  • 日志支持

  • Alpha版本!

关于作者
Akihiro登

GSoC 2021学生(Jenkins必威国际有限公司远程监控)。Akihiro是东京大学信息与通信工程系的学生。