logo
logo

DeepFlow 最佳实践 —— Blackbox 拨测能力集成及统一观测

李飞 2024-08-08

DeepFlow 可观测性平台以 eBPF 技术实现的零侵扰(Zero Code)分布式追踪为核心,不仅实现了面向应用的全栈(Full Stack)观测能力,同时通过开放的数据集成接口和智能标签(SmartEncoding)技术支持汇聚外部的 Metrics、Tracing、Logging、Profiling 等各类的海量观测数据,消除运维数据孤岛,为 IT 系统的运行维护、安全监测、运营分析提供统一的可观测性数据综合解决方案。

在本篇实践案例中,将向您介绍如何在 DeepFlow 可观测性平台快速集成 Prometheus Blackbox 拨测能力,补充、丰富可观测性数据湖的信号种类,一方面通过 HTTP/HTTPS/TCP/ICMP 等协议拨测快速发现业务异常,另一方面在业务异常的诊断过程中,对平台侧应用指标分析的同时,快速调阅拨测的指标数据,增强 IT 系统监控、诊断的全面性和工作效率。

0x0: DeepFlow 拨测能力集成方案

整体架构

本次实践对云端的某个业务服务平台进行持续拨测,云端业务采用微服务架构,部署在 K8s 集群中,外部访问的 URL 为 http://example.test.com

我们使用 DeepFlow Agent + Grafana Alloy 来实现 Prometheus Blackbox 向云端服务的拨测和指标数据集成,要点包括:

  • 在拨测端主机(Host/VM/BM)部署 Alloy 和 DeepFlow Agent:
    • Alloy 的 Blackbox 模块执行周期性拨测动作,探测云上业务服务平台(Service Platform)的可达性和服务响应状态,拨测协议选用 HTTP、TCP、ICMP,分别探测网络可达性、TCP 连接状态、HTTP 服务状态;
    • Alloy 通过 Prometheus Remote Write 接口将 Blackbox 拨测指标数据发送到主机内部署的 DeepFlow Agent;
    • 拨测端主机部署的 DeepFlow Agent 接收到 Blackbox 指标数据后,与各类观测数据统一回送到 DeepFlow Server;
  • 在云端的业务服务平台(Service Platform)部署 DeepFlow Agent 采集平台侧的应用调用数据,并回送到 DeepFlow Server;
  • DeepFlow Server 汇聚 Blackbox 拨测指标数据和云端的应用调用数据,构建统一的数据观测能力。

Blackbox 拨测能力集成部署架构Blackbox 拨测能力集成部署架构

部署 DeepFlow Agent

拨测端主机 DeepFlow Agent 部署

主机环境 DeepFlow Agent 安装指导链接

部署并运行后,DeepFlow Agent 默认开启数据集成接口(默认端口号为 38086)用于其他 Metrics、Tracing、Logging、Profiling 等数据的接收,其中用于 Prometheus 指标数据 Remote Write 的接口 API 为:/api/v1/prometheus

云端业务服务平台 DeepFlow Agent 部署

K8s 环境 DeepFlow Agent 安装指导链接

部署并运行后,DeepFlow Agent 开始对云端 K8s 集群中的应用服务进行零侵扰的 eBPF 数据采集,支持获取的数据主要包括:

  • 应用调用的 RED 指标(支持的应用协议详见链接
  • 分布式调用链追踪数据
  • 应用实例 CPU、Memory Profiling 数据
  • 慢文件读写事件
  • 网络流量的 L3 吞吐、L4 吞吐、TCP 性能、TCP 异常、TCP 时延等指标

部署 Grafana Alloy

第 1 步:安装 Grafana Alloy

安装指导链接

第 2 步:修改运行配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
cat << EOF > /etc/alloy/config.alloy
logging {
level = "warn"
}

prometheus.exporter.blackbox "my_task" {
config_file = "/etc/alloy/blackbox.yml"
target {
name = "icmp_probe_1"
address = "example.test.com"
module = "icmp_test"
labels = {
"target" = "icmp_example.test.com",
}
}
target {
name = "tcp_probe_1"
address = "example.test.com:80"
module = "tcp_connect"
labels = {
"target" = "tcp_example.test.com",
}
}
target {
name = "http_probe_1"
address = "http://example.test.com"
module = "http_2xx"
labels = {
"target" = "http_example.test.com",
}
}
}

prometheus.scrape "scrape_my_task" {
targets = prometheus.exporter.blackbox.my_task.targets
forward_to = [prometheus.relabel.filter_metrics.receiver]
scrape_interval = "10s"
}

prometheus.relabel "filter_metrics" {
rule {
action = "replace"
replacement = "IP_OF_HOST"
target_label = "instance"
}
forward_to = [prometheus.remote_write.deepflowagent.receiver]
}

prometheus.remote_write "deepflowagent" {
endpoint {
url = "http://127.0.0.1:38086/api/v1/prometheus"
}
}
EOF
cat << EOF > /etc/alloy/blackbox.yml
modules:
http_2xx:
prober: http
timeout: 5s
http:
method: GET
preferred_ip_protocol: "ip4" # defaults to "ip6"
ip_protocol_fallback: false # no fallback to "ip6"
http_post_2xx:
prober: http
timeout: 5s
http:
method: POST
headers:
Content-Type: application/json
body: '{}'
tcp_connect:
prober: tcp
timeout: 5s
icmp_test:
prober: icmp
timeout: 5s
icmp:
preferred_ip_protocol: "ip4"
EOF
DEFAULT_INTERFACE=$(ip route | grep default | awk '{print $5}')
DEFAULT_IP=$(ip -4 addr show $DEFAULT_INTERFACE | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
sed -i "s|IP_OF_HOST|$DEFAULT_IP|g" /etc/alloy/config.alloy

注:运行配置文件中的 URL 为实践样例,可根据拨测任务的需要灵活修改。

第 3 步:启动服务

1
2
sudo systemctl start alloy
sudo systemctl enable alloy

(可选步骤)检查服务状态

1
sudo systemctl status alloy -l

(可选步骤)检查运行日志

1
sudo journalctl -u alloy -e

0x1: 拨测指标与应用指标的统一观测

拨测指标监控

进入 DeepFlow 中的视图功能入口,可以通过内置的「拨测指标监控」视图对拨测指标实时观测。在视图中输入 URL 或 IP 的关键字段,便可在视图中自动过滤出目标地址的:

  • HTTP/HTTPS/TCP/ICMP 拨测的响应性能统计(列表);
  • 当前拨测连通性的正常比例;
  • 历史拨测连通性的变化曲线;
  • 历史拨测响应时延的变化曲线;
  • 历史 HTTP/HTTPS 拨测响应码的变化曲线;
  • 历史 HTTP/HTTPS 拨测各通信阶段的时延变化曲线。

拨测指标监控拨测指标监控

云端业务服务平台指标监控

同时可灵活定制应用监控视图对云端业务服务平台的应用调用指标实时观测。

在「应用监控」视图中一般包括:

  • 业务服务平台的微服务互访拓扑(直观观测微服务间互访关系)
  • 微服务的请求速率曲线
  • 微服务的响应速率曲线
  • 微服务的客户端异常比例曲线
  • 微服务的服务端异常比例曲线
  • 微服务的平均响应时延曲线
  • 微服务的最大响应时延曲线

当我们在「拨测指标监控」视图中发现连通性异常时,便可以快速切换到「应用监控」视图对业务服务平台中微服务的内外部应用调用性能进行诊断,发现问题关键点,并快速定位修复。

应用调用指标监控视图应用调用指标监控视图

0x2: 什么是 DeepFlow

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

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

访问 DeepFlow Demo,体验零侵扰、全栈的可观测性。