logo
logo

使用 DeepFlow 开启 Ingress 可观测性

李倩 2022-10-14

K8s Ingress 的 Grafana Dashboard 已经有很多了,比如基于 Ingress 主动暴露可观测性数据构建的 Ingress-nginx Dashboard,基于 Access Log 构建的 Loki NGINX Dashboard。但是,这些 Dashboard 中第一类仅提供了 Ingress 自身的汇总统计数据,无法精细到域名、API Endpoint、后端服务粒度,排查应用性能不太够用;而第二类虽然提供了 API 粒度的数据但依赖于完整的 Access Log,存储资源消耗大,查询速度也比较慢。

意识到已有方案的这些缺陷以后,我们动手基于 DeepFlow 生成了一个高效的 K8s Ingress 可观测性 Dashboard,粒度精细到域名、API Endpoint、后端服务,指标量覆盖请求、时延、异常、吞吐,以便快速找到性能瓶颈和故障原因。得益于 DeepFlow 的 AutoTracing、AutoMetrics、AutoLogging、AutoTagging 核心机制,我们可以从应用角度分析 K8s Ingress 的调用拓扑、性能指标、访问日志、调用链追踪。部署 DeepFlow 以后,deepflow-agent 会自动采集所在节点上 Ingress-controller workload 的可观测性数据。由于 DeepFlow 使用 eBPF/cBPF 技术,无需进行任何插码、配置修改、进程重启。我们基于这些自动数据构建了一个 Dashboard,内容包括六个部分:

  • Overview
  • Request
  • Delay
  • Distributed Tracing
  • Error
  • Throughput

前往我们的在线 Demo 也可快速体验 Dashboard

0x0: Dashboard 介绍

进入 Dashboard 后,可切换 clusteringress_workload 两个变量,来查看特定 K8s Ingress 的 Dashboard。Ingress_workload 变量假定了 Ingress-controller 这个 workload 名字中一定包含 ingress 字符,使用者可根据自己环境的名称修改 like 后的字符串。

cluster 变量cluster 变量

ingress\_workload 变量ingress\_workload 变量

Overview:左边表达的是总的请求量、请求字节长度、响应字节长度、5xx/4xx异常比例及分别的异常总量;右边为 Ingress-controller workload 访问当前集群内的后端服务的拓扑图。通过 Overview 可快速知道目前 K8s Ingress 请求、异常和调用拓扑的整体情况。

OverviewOverview

Request:模块结合曲线图与饼图,反映 K8s Ingress 一段时间内的请求速率变化与请求总量 TOP 的 Domain、Path以及后端的 Server POD。

RequestRequest

Delay:模块第一个曲线图表达的为 Ingress-controller workload 的 P90/P95/P99 的时延变化;后续三个曲线图则将请求分别按 Domain、Path 及后端 Server POD 分组后,对应 P90 的时延变化;Slow Request Log 为响应时延大于等于 500ms 的调用日志,如需要自定义慢日志时延,可调整搜索条件即可。Request Log 的 tap_side 字段可用于判断问题产生的具体位置,包括:客户端进程 c-p、客户端网卡 c、客户端容器节点网卡 c-nd、服务端容器节点网卡 s-nd、服务端网卡 s、服务端进程 s-p。

DelayDelay

Distributed Tracing:模块可对响应时延大于等于 500ms 的请求发起追踪。

Distributed TracingDistributed Tracing

Error:模块关注的是服务端异常(5xx),通过曲线图表达异常的变化速率,结合饼图查看服务端异常 TOP 的 Domain、Path 以及后端的 Server POD,Server Error Log 为存在服务端异常的调用日志。

ErrorError

Throughput:模块读取 HTTP Header 的 Content-Length 的数据来表达请求长度和响应长度,通过曲线图和饼图表达长度速率及 TOP 的 Domain、Path 以及后端的 Server POD,调用日志为大于 500KB 的数据长度的日志,如需自定义也可调整搜索条件。

ThroughputThroughput

0x1: 后续规划

我们目前在制作一批 Dashboard,包括:Nginx、MySQL/PostgreSQL、HTTP、Dubbo/gRPC、Kafka/MQTT、TCP/UDP/IP、DNS 等,希望能带来社区高度自动化高精度的可观测性体验,期待有社区的小伙伴能加入一起。

0x2: 什么是 DeepFlow

DeepFlow 是云杉网络开发的一款可观测性产品,旨在为复杂的云基础设施及云原生应用提供深度可观测性。DeepFlow 基于 eBPF 实现了应用性能指标、分布式追踪、持续性能剖析等观测信号的零侵扰Zero Code)采集,并结合智能标签SmartEncoding)技术实现了所有观测信号的全栈Full Stack)关联和高效存取。使用 DeepFlow,可以让云原生应用自动具有深度可观测性,从而消除开发者不断插桩的沉重负担,并为 DevOps/SRE 团队提供从代码到基础设施的监控及诊断能力。

GitHub 地址:https://github.com/deepflowio/deepflow

访问 DeepFlow Demo,体验高度自动化的可观测性新时代。