标签: #OpenTelemetry
用亲手运行、亲手测量的数据来写 Kubernetes、DevOps 与 MLOps · 3 篇
gRPC 调试与可观测性:grpcurl、反射、channelz 以及指标陷阱
gRPC 是基于二进制的,因此无法用 curl 直接查看。取而代之的是,服务器自身告知其架构的反射(grpcurl 使用此功能)、标准健康检查服务、统计通道、子通道及套接字的 channelz,以及作为窗口的指标。我们在小型集群的指标中发现了两个陷阱:kube-apiserver 1.34 的 etcd 客户端指标 grpcclientmsgreceivedtotal 在一元调用中统计的不是成功而是失败(Range 132 次 = Ra
2026-10-16 · 18 分钟阅读 #gRPC#grpcurl#서버 리플렉션#channelz#Prometheus小型集群中实际运行的 gRPC:etcd、CRI、Hubble、OTLP
我们在一个只有 8 个节点的微型集群中,仅通过读取 gRPC 会话对进行了测量。kube-apiserver 与同一节点上的 etcd 建立了多达 247 个 TCP 连接,这是因为 Kubernetes 会为每个资源(包括 CRD)单独创建 etcd 客户端,源码注释中也将此记为一个已知问题。kubelet 在 containerd 上打开了运行时和镜像两个通道,8 个节点合计每小时调用约 11 万次 CRI,其中一半以上是 1 秒周
2026-10-16 · 19 分钟阅读 #gRPC#etcd#CRI#containerd#Hubble流式传输、deadline、重试、keepalive:当调用变长或失败时
gRPC 方法根据请求和响应是单个还是流,分为四种。流由 HTTP/2 流量控制窗口进行拦截,时间限制作为剩余的 deadline 传递给下一个服务器,取消操作通过 RSTSTREAM 传播。库重试仅在服务器发送响应头之前(Trailers-Only)进行,最多 5 次,带有 0.8 到 1.2 倍的抖动。grpc-go 1.83 尚未实现 hedging。在一个小集群中,单个 apiserver 在 etcd 上大约打开了 240 个
2026-10-16 · 20 分钟阅读 #gRPC#스트리밍#deadline#재시도#keepalive