Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

自定义上报方案 #252

Open
zzhutianyu opened this issue Sep 9, 2021 · 0 comments
Open

自定义上报方案 #252

zzhutianyu opened this issue Sep 9, 2021 · 0 comments
Assignees

Comments

@zzhutianyu
Copy link
Collaborator

zzhutianyu commented Sep 9, 2021

日志自定义上报方案(Logs Trace)

阿里云

日志上报

https://help.aliyun.com/document_detail/112903.html?spm=a2c4g.11186623.6.817.626f175bMJTh5c

  • 基于SDK上报日志

腾讯云

蓝鲸日志平台

架构设计

日志平台自定义上报

模块说明

  • bk-log-receiver
    实现接收日志协议格式包括

    • otlp-grpc
    • otlp-http
    • 日志上报http
    • 日志上报TCP
    • 日志上报UDP
      通过以上上报协议接收日志或者Trace并通过协议内携带的dataid进行上报
      读取平台下发自定义上报dataid,不符合的dataid进行丢弃
  • 节点管理

    • 安装上报集群
    • 下发自定义上报配置到上报集群

上报协议

  • otlp协议(http|grpc) (上报logs Trace)
    上报需要在resource携带bk_data_id
    python如下所示
resource = Resource.create({
			"service.name": settings.APP_CODE,
			"bk_data_id": 1
		}),
	)
  • http协议
/v1/push/
{
	"bk_data_id": 113,
	"source": "xxxx", 来源ip或者其他
	"logs": ["xxx", "xxx"]
}
  • tcp|udp协议
  1. 二进制格式
type LogMessage struct {
	Timestamp uint64
	MessageLen uint32
	Message []byte
}

// LogPack log package define
type LogPack struct {
	PkgLen uint32 // 包总长度 (标识符不计算在内)
	PkgVer uint8 // 包版本号,0x02
	SourceLen uint8 // 来源长度
	Source []byte // 来源字符串
	BkDataId int // bkdataid
	Compress uint8 // 压缩选项,0x00 无,0x01 gzip
	Messages []*LogMessage // 消息体(若 compress!=0x00 则为压缩后的 buffer)
}
  • 需要提供包协议格式或者sdk
  • 可以进行压缩
  1. json格式
{
	"bk_data_id": 113, 蓝鲸dataid
	"source": "xxxx", 来源ip
	"logs": ["xxx", "xxx"], 日志数组
	"version": "v1", 协议版本
}
  • 每种语言都有json库方便序列化

上报集群部署

  • 节点管理部署
  1. 平台管理员在平台进行集群选择通过节点管理下发到选择到机器,并通过节点管理进行维护
  2. 并可以在平台指定域名(企业版默认云区域自动写入到consul)
  3. 提供cmd命令进行安装
  • 运维手动部署
  1. 运维通过部署文档部署到指定机器
  2. 在平台侧进行配置上报集群

上报服务配置

主配置

max_message_size: 512kb
queue_limit: 50000
ip_limit: true

子配置

- type: otlp-trace
  dataid: 1111
  
- type: otlp-logs
  dataid: 1111
  
- type: http
  dataid: 1111
  
- type: udp
  dataid: 2222
  
- type: tcp
  dataid: 22223

集群保护(QOS)

  • 单次请求大小限制
  • 队列水位限制(超过丢弃)
  • ip屏蔽
  • dataid 限制 不在配置内的dataid 丢弃
  • 是否加token进行限制?

otlp-trace 采样&染色能力

采样

相关trace采样
https://docs.newrelic.com/docs/distributed-tracing/concepts/how-new-relic-distributed-tracing-works/
trace数据量大 全量大数据上报对链路&存储都是巨大的压力

  • 原始SDK采样配置
    原始sdk会在入口侧进行采样判断,然后后续链路则不进行上报操作
    但是会存在错误trace 触发采样导致无法上报

  • 接收侧采样
    image
    image

otlp官方实现
https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/processor/tailsamplingprocessor/README.md
https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/loadbalancingexporter/README.md

  • 需要实现基于trace_id的LB服务将一类trace_id发送到一个bk-log-receiver服务,通过尾采样算法进行采样,能够将错误的trace充分还原
  • 集群自转发 通过一致性hash等类似算法将同一trace转发到对应recevier服务,不通过lb进行前端负载,集群自中转

染色能力

  • SDK获取染色配置
    需要提供SDK拉取染色配置,需要平台方提供SDK去拉取对应的染色配置
  • 接收侧染色能力
    需要实现接收端多机分布下的数据汇聚能力,将trace进行采样豁免使其能够进行稳定上报

负载均衡方案

  • gslb提供就近vip接入
  • vip进行后端rs负载均衡

Saas配置

  • 平台方
  1. 选择不同云区域的机器部署上报服务
  2. 配置域名的能力
  • 用户
  1. 创建自定义上报
  2. 获取自定义上报地址

系统调优

  • 长链接调优
ulimit -n 1040000

otlp-grpc 压测报告

测试条件

限制单核使用

工具 ghz

机器

8核心16G

CPU MHz: 2595.124

链接数量 1
span数量 1
并发数量 10000 20000 50000 100000
1 3961 4025 4053 3996
10 12513 13056 12753 12379
100 15978 13852 14549 14736
1000 13708 14721 15121 14921
10000 9546 10128 10789 10861
链接数量 1
span数量 10
并发数量 10000 20000 50000 100000
1 1767 1752 1767 1767
10 2987 2893 2900 3009
100 5621 5381 4660 4194
1000 788 807 1069 2418
10000 3819 1770 2155 2097

机器配置

8核

gse上报

链接数量 1
span数量 100
并发数量 10000 20000 50000 100000
1 207 208 209 218
10 461 487 507 555
100 451 456 536 472
1000 456 451 536 451
10000 472 412 432 452

image

Otlp-http-json 压测报告

机器配置

8核

自研云机器

gse上报

测试工具 ab

链接数量 1
span数量 1
并发数量\请求数量 10000 20000 50000 100000
1 2141 2120 2120 2132
10 3278 3358 3291 3311
100 3476 3414 3585 3530
1000 3221 3303 3285 3391
10000 2715 2911 3053 3144
链接数量 1
span数量 10
并发数量\请求数量 10000 20000 50000 100000
1 655 669 652 661
10 753 760 756 768
100 779 787 785 793
1000 716 710 707 733
10000 618 754 656 665
span数量 100
并发数量\请求数量 10000 20000 50000 100000
1 95 95 96 96
10 96 96 96 96
100 97 93 92 92
1000 77 77 77 77

主要消耗在json反序列上面
image-20210909091238466

Otlp-http-proto 压测报告

span数量 1
并发数量\请求数量 10000 20000 50000 100000
1 3491 3491 3411 3564
10 8176 8997 9674 9532
100 8795 8457 8871 8422
1000 9712 3303 3285 3391
10000 7240 8613 8359 8401
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants