我使用 watch 机制来监控另一个集群中的资源,例如特定命名空间下的 Pod。我想及时检测 watch 连接的健康状态,包括连接延迟以及连接是否断开。我注意到在断开连接后 30 秒内会生成错误日志,但我没有找到可以收集的相关指标。
我想公开有关监视操作延迟的指标。阅读客户端 go 和组件库源代码后,我仍然不知道该怎么做(使用其他预打包库的解决方案对我来说也很好)。或者有没有办法让我直接监视到目标集群的延迟?
我第一次尝试在这里添加观察。
informer.Informer().AddEventHandler(cache.FilteringResourceEventHandler{
FilterFunc: func(obj interface{}) bool {
// Update last synced time.
UpdateLastSyncedTime()
return true
},
}
但经过讨论,我发现这可能不是一个好方法。原因是,更新功能是由通知器事件触发的,这些事件源于集群中项目的更改或定期重新同步。要使前面提到的方法发挥作用,需要减少重新同步间隔,这可能会导致效率低下。
在程序的顶层,当您调用 时
kubernetes.NewForConfig()
,它会将*rest.Config
作为一个参数。典型的客户端程序只是从读取 kubeconfig 文件的工厂函数传递配置,但您可以修改它。特别是,(*rest.Config).Wrap()
允许您注入在 HTTP 层运行的自己的包装器对象。例如,如果你想对 HTTP 调用进行计时,那么你可以这样写
由于它与 HTTP 层紧密相关,因此可能没有您要查找的特定内容。informer 接口可能使用 Kubernetes watch API。它有一个长时间运行的连接,可返回一连串响应。这意味着您可能会看到一个持续几分钟的 HTTP 连接,实际上会返回数十个响应。这也意味着“延迟”本身并不是一个有意义的概念。不过,这仍然可以用于测量单个
.Get()
和操作的往返时间。.Update()