- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
【第3期】构建统一的云原生应用可观测性数据平台
展开查看详情
1 .© 2020, YUNSHAN Networks Technology Co., Ltd. All rights reserved.
2 .构建统一的云原生应用 可观测性数据平台 DeepFlow在混合云中的实践总结 向阳@云杉网络 2022-04-09 © 2022, YUNSHAN Networks Technology Co., Ltd. All rights reserved.
3 .构建统一的云原生应用可观测性数据平台 1. 可观测性数据平台的挑战 2. 解决数据孤岛:AutoTagging 3. 降低资源开销:MultistageCodec 4. 统一数据平台的落地思路及案例
4 .统一的可观测性数据平台 telegraf 看云网更清晰 Simplify the growing complexity.
5 .挑战:数据孤岛、资源开销 telegraf 数据 孤岛 资源消耗 看云网更清晰 Simplify the growing complexity.
6 .构建统一的云原生应用可观测性数据平台 1. 可观测性数据平台的挑战 2. 解决数据孤岛:AutoTagging 3. 降低资源开销:MultistageCodec 4. 统一数据平台的落地思路及案例
7 .OpenTelemetry的方法 以追踪为核心 统一的上下文 看云网更清晰 Simplify the growing complexity.
8 .OpenTelemetry的方法 TraceID & Tag Tag, Exemplars (TraceID, SpanID) Tag, TraceID, SpanID 看云网更清晰 Simplify the growing complexity.
9 .数据打通并不简单 ① Trace与「非Request scope」的Metrics 例如:响应Request A的实例在一段时间内做了多少次GC? ① 看云网更清晰 Simplify the growing complexity.
10 .数据打通并不简单 ② 应用、系统、网络的Metrics之间 例如:某个Service的Pod的QPS、IOPS、BPS分别是多少? 例如:Pod所在的KVM宿主机的CPU、内存指标? ② 看云网更清晰 Simplify the growing complexity.
11 .数据打通并不简单 ③ Metrics与「非Aggregatable」的Log 例如:QPS降低与进程、服务器的日志有关联吗? ③ 看云网更清晰 Simplify the growing complexity.
12 .数据打通并不简单 ④应用、系统、网络的Log之间 例如:应用日志ERROR与Ingress日志有什么关联吗? ④ 看云网更清晰 Simplify the growing complexity.
13 .数据打通并不简单 ⑤「非Request scope」的Log与Trace之间 例如:系统日志异常与Request时延增大是否有关联 ⑤ 看云网更清晰 Simplify the growing complexity.
14 .数据打通并不简单 ⑥ 应用、系统、网络的Trace之间 例如:访问一个服务的耗时究竟有哪些部分组成? App,Sidecar,Node,KVM,NFVGW? ⑥ 看云网更清晰 Simplify the growing complexity.
15 .我们需要哪些Tag?OpenTelemetry的答案 请求属性 服务属性 业务属性 代码属性 实例属性 看云网更清晰 Simplify the growing complexity.
16 .混合云环境下的资源属性还有哪些 资源池 网络资源 区域 VPC 可用区 子网 云平台 CIDR 应用进程 租户 IP地址 应用进程 NATGW envoy 云资源 ALB envoy POD 宿主机 … POD POD 云服务器 POD iptables、ipvs iptables、ipvs KVM KVM KVM KVM VM VM L2GW、OvS L4~L7 GW L2GW、OvS HOST Gateway HOST 看云网更清晰 Simplify the growing complexity.
17 .云原生应用的服务属性还有哪些 Ingress Namespace zone=ZoneA owner=xiangyang 容器资源 服务 容器集群 app deployType=canary group=iot Service Service 容器节点 version releaseVersion=12 env=prod 命名空间 env Deployment Deployment 容器服务 group level=low app=trident Ingress owner Pod Pod Deployment stage Version=1.4.0 StatefulSet commitId deployId=287115 ReplicaSet deployId Container Container commitId=e86c973 layer=service POD ... cluster=devops taskEnv=prod Node Cluster DeepFlow的典型客户环境中,两个微服务通信涉及到的标签多达上百个 看云网更清晰 Simplify the growing complexity.
18 .AutoTagging:自动同步资源和服务属性 自动同步云API、K8s apiserver owner=xian zone=ZoneA env=prod Labels gyang ~30种资源标签,100+自定义微服务标签 deployType =canary releaseVer sion=12 group=iot 资源池 网络资源 容器资源 服务 区域 VPC 容器集群 app TKE ACK 可用区 子网 容器节点 version 容 云平台 CIDR 命名空间 env 器 租户 IP地址 容器服务 group NATGW Ingress owner 云资源 ALB Deployment stage 宿主机 … StatefulSet commitId 云服务器 ReplicaSet deployId POD ... 云 理解云网络,自动标记端到端数据标签 主机名、IP地址、VPC/隧道ID、对等连接、NAT/LB ➔ 资源标签 工作负载、容器服务、命名空间 ➔ 服务标签 DeepFlow support list 看云网更清晰 Simplify the growing complexity.
19 .AutoTagging:云原生知识图谱,微服务调用拓扑 看云网更清晰 Simplify the growing complexity.
20 .AutoTagging:关联、切分、下钻 √ 看云网更清晰 Simplify the growing complexity.
21 .但 … AutoTagging带来的问题 • 理想很丰满:观测数据无缝跳转 • 现实很骨感:上百个标签,后端资源消耗飙升 资源池 网络资源 容器资源 服务 区域 VPC 容器集群 app 可用区 子网 容器节点 version 云平台 CIDR 命名空间 env 租户 IP地址 容器服务 group NATGW Ingress owner 云资源 ALB Deployment stage 宿主机 … StatefulSet commitId 云服务器 ReplicaSet deployId POD Level ... 看云网更清晰 Simplify the growing complexity.
22 .构建统一的云原生应用可观测性数据平台 1. 可观测性数据平台的挑战 2. 解决数据孤岛:AutoTagging 3. 降低资源开销:MultistageCodec 4. 统一数据平台的落地思路及案例
23 .MultistageCodec:采集 ➔ 存储 ➔ 查询 GUI tagstr …… DeepFlow ClickHouse Querier ③ 查询 ③ 查询 tagint tagint ② 存储 …… tagint tagint Data no-tag DeepFlow tagint DeepFlow Agent ① 采集 Ingester ① 采集 ② 存储 tagint tagint tagint tagint tagint …… DeepFlow Controller tagstr 云API、K8s apiserver 看云网更清晰 Simplify the growing complexity.
24 .Stage-1:采集时的编码 • Controller同步云API、K8s apiserver • 将所有标签编码为Int • Controller向Agent下发编码后的Int标签 • 仅向Agent下发最少的标签 • 标签的“基” • 如何选择基 • VPC:多租户环境下,与IP决定实例、服务 看云网更清晰 Simplify the growing complexity.
25 .Stage-2:存储时的编码 • Controller同步云API、K8s apiserver • 将所有标签编码为Int • Controller向Ingester下发编码后的Int标签 • 仅向Ingester下发需要持久化存储的标签 • 便于检索 • 如何选择需要随观测数据存储的标签 • 存储系统标签的:资源的标签、K8s的标签 • 不存储自定义标签:K8s label owner=xian zone=ZoneA env=prod gyang deployType releaseVer group=iot =canary sion=12 …… 看云网更清晰 Simplify the growing complexity.
26 .Stage-3:查询时的编、解码 • Querier编码自定义标签的Filter和Group查询请求 • Filter:利用CK字典依据系统标签过滤 • Group:利用CK字典依据系统标签翻译 • Querier将系统标签解码为可读字符串 • 使用CK字典解码Int化的系统标签 CREATE DICTIONARY deepflow.pod_map ( `id` UInt64, `name` String ) PRIMARY KEY id SOURCE(MYSQL(...)) SELECT dictGet( SELECT dictGet( deepflow.pod_map, deepflow.pod_label_env, ('name’), (‘value’), (toUInt64(pod_id_0)) (toUInt64(pod_id_0)) ) AS pod_name_0 ) AS pod_label_env_0 FROM http_requests ... FROM http_requests ... 看云网更清晰 Simplify the growing complexity.
27 .MultistageCodec:采集 ➔ 存储 ➔ 查询 GUI tagstr …… DeepFlow ClickHouse Querier ③ 查询 ③ 查询 tagint tagint ② 存储 …… tagint tagint Data no-tag DeepFlow tagint DeepFlow Agent ① 采集 Ingester ① 采集 ② 存储 tagint tagint tagint tagint tagint …… DeepFlow Controller tagstr 云API、K8s apiserver 看云网更清晰 Simplify the growing complexity.
28 .MultistageCodec的性能提升:~10X 标签存储类型 机制 标签长度 CPU 内存 磁盘开销 使用Int Tag 直接存索引 16B 1 1 1 使用LowCard(String) Tag 索引和标签分离 16B 10 1 1.5 (Card.=5000) 5 (Card.=10000) 使用String Tag 支持存标签 16B 5 1.5 7.5 (Card.=5000) 25 (Card.=10000) int LowCard 看云网更清晰 Simplify the growing complexity.
29 .生产环境数据:Server端资源消耗<1% • 监控600+个K8s Node(~8000个POD),共600*16vCPU • 每秒写入1M Row(50MB字节),每行100~150 Column • Server端共6*16vCPU,总计CPU消耗<150%,总计Load<60 看云网更清晰 Simplify the growing complexity.