OpenTelemetry(3): Collector Contrib 配置接入 Aliyun SLS Trace 服务
在
Opentelmetry(2): 【内部分享】 从入门到精通
中提到, 应用通过 OpenTelemetry Collector Contrib 将采集到的数据转发到 任意后端程序。
阿里云提供了一个
SLS Trace 服务
, 类似于 Jaeger, 可以提供服务的观测性。
1. 创建 SLS Trace 服务
创建新实例之后, 可以看到如下图
其中标记的 1,2,3 之后 授权 和 访问 需要用到的。
除了这几个参数之外, 还需要 logstore 名称, 可以理解为这个就是数据的真实位置。
1.1. 创建 RAM 账号授权策略
经过测试 SLS Trace
服务接入的时候, 并不支持 STS Token
授权。
必须要单独创建 RAM
账户, 并拿到编程的 Access ID
和 Access Key
。
在创建 RAM 账户的时候, 可以直接使用
阿里云最小化权限模版
在文档中可以看到, 权限按照功能分成了几个模块。 合并后的最终结果如下。
其中, ${project_name}
图1 中的 k8s-xxxxxxx
, ${logstore_name}
就是 图2 中的 sls-trace-devops-traces
。
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
| {
"Version": "1",
"Statement": [
{
"Action": [
"log:Post*"
],
"Resource": "acs:log:*:*:project/${project_name}/*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": [
"log:PostLogStoreLogs"
],
"Resource": [
"acs:log:*:*:project/${project_name}/logstore/${logstore_name}"
]
},
{
"Action": [
"log:ListShards",
"log:GetCursorOrData",
"log:GetConsumerGroupCheckPoint",
"log:UpdateConsumerGroup",
"log:ConsumerGroupHeartBeat",
"log:ConsumerGroupUpdateCheckPoint",
"log:ListConsumerGroup",
"log:CreateConsumerGroup"
],
"Resource": "acs:log:*:*:project/${project_name}/*",
"Effect": "Allow"
},
{
"Action": [
"log:ListShards",
"log:GetCursorOrData",
"log:GetConsumerGroupCheckPoint",
"log:UpdateConsumerGroup",
"log:ConsumerGroupHeartBeat",
"log:ConsumerGroupUpdateCheckPoint",
"log:ListConsumerGroup",
"log:CreateConsumerGroup"
],
"Resource": [
"acs:log:*:*:project/${project_name}/logstore/${logstore_name}",
"acs:log:*:*:project/${project_name}/logstore/${logstore_name}/*"
],
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": [
"log:CreateLogStore",
"log:UpdateLogStore"
],
"Resource": [
"acs:log:*:*:project/${project_name}/logstore/${logstore_name}",
"acs:log:*:*:project/${project_name}/logstore/*"
],
"Condition": {
"Bool": {
"log:Encrypted": "true"
}
}
}
]
}
|
其他操作就不说了, 就是常规的创建 RAM 账号和授权。
创建 RAM 账号后, 可以获得编程用的 Access ID
和 Access Key
2. 接入 SLS Trace 服务
可以参考
SLS Trace 服务的相关文档
, 在 接入数据概览 中可以看到 ,
SLS Trace 服务提供了两种方式接入
。
- 直接接入:
app -> SLS-Trace-Service
- 通过
OpenTelemetry Collector
转发接入: app -> OpenTelemetry Collector -> SLS-Trace-Service
2.1 直接接入
千万不要使用这种方式。
以 Go 为例, 我们使用
OpenTelmetry 官方的 Fibonacci 案例
。
按照阿里云文档案例, 使用
阿里云官方的 sls/provider
库
1
2
3
| import (
"github.com/aliyun-sls/opentelemetry-go-provider-sls/provider"
)
|
注意, 当前(2022-12-23) 阿里云提供的 provider 库并不支持最新的 OpenTelemetry v1.11.2
版本。 需要在 go.mod
中将 OpenTelemetry 降级到 v1.10.0
。
再强调一次, 千万不要使用直接接入 的方式。
- Aliyun 的官方库更新不及时, 依赖版本过低。 导致接入的时候还需要依赖库降级版本。 侵入性不是一般的大。
- 使用了 aliyun 的库之后, 意味着后台其他平台还需要单独额外的适配。
2.2. 重点来了 Contrib 转发接入
就是使用 OpenTelemetry Collector Contrib
作为中间人转发数据, 好处是 收敛了 RAM 权限账号分发管理。 将 Dev 的配置操作转移到的 Ops , 减少对业务的侵入。
OpenTelemetry Collector Contrib 下载地址
在 Github 上, 官方提供, 放心使用。
参考阿里云的
contrib 转发 sls trace 文档
, 还是很简单的, 这里给出的是一个很基础的配置。
注意, 配置 endpoint
字段的时候, 地址 不需要 配置 project_name
和 端口
。 这个配置走的是 http(s)
协议。
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
| receivers:
otlp:
protocols:
grpc:
endpoint: "0.0.0.0:55680"
http:
endpoint: "0.0.0.0:55681"
exporters:
logging/detail:
loglevel: debug
alibabacloud_logservice/traces:
endpoint: "cn-shanghai.log.aliyuncs.com"
project: "${project_name}"
logstore: "${log_store}-traces"
access_key_id: "${access_key_id}"
access_key_secret: "${access_key_secret}"
alibabacloud_logservice/metrics:
endpoint: "cn-shanghai.log.aliyuncs.com"
project: "${project_name}"
logstore: "${log_store}-metrics"
access_key_id: "${access_key_id}"
access_key_secret: "${access_key_secret}"
alibabacloud_logservice/logs:
endpoint: "cn-shanghai.log.aliyuncs.com"
project: "${project_name}"
logstore: "${log_store}-logs"
access_key_id: "${access_key_id}"
access_key_secret: "${access_key_secret}"
service:
pipelines:
traces:
receivers: [otlp] #接收端配置为otlp。
exporters: [alibabacloud_logservice/traces] #发送端配置为alibabacloud_logservice/traces。
# for debug
#exporters: [logging/detail,alibabacloud_logservice/traces]
metrics:
receivers: [otlp]
exporters: [alibabacloud_logservice/metrics]
logs:
receivers: [otlp]
exporters: [alibabacloud_logservice/logs]
|
在测试的时候, 这里可以使用
OpenTelemetry Collector 官方的测试用例
。
注意 阿里云给出的转发配置, 端口给出的是 grpc://0.0.0.0:55680
和 http://0.0.0.0:55681
。
而测试用例连接的是 grpc://localhost:30080
, 需要做相应修改。
其他没什么需要注意的。