cw-datadog 2.23.0.2 → 2.23.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/datadog_profiling_native_extension/extconf.rb +4 -2
- data/ext/libdatadog_api/library_config.c +12 -11
- data/ext/libdatadog_extconf_helpers.rb +1 -1
- data/lib/datadog/appsec/api_security/route_extractor.rb +20 -5
- data/lib/datadog/appsec/api_security/sampler.rb +3 -1
- data/lib/datadog/appsec/assets/blocked.html +8 -0
- data/lib/datadog/appsec/assets/blocked.json +1 -1
- data/lib/datadog/appsec/assets/blocked.text +3 -1
- data/lib/datadog/appsec/assets.rb +1 -1
- data/lib/datadog/appsec/remote.rb +4 -0
- data/lib/datadog/appsec/response.rb +18 -4
- data/lib/datadog/core/cloudwise/client.rb +412 -25
- data/lib/datadog/core/cloudwise/component.rb +195 -52
- data/lib/datadog/core/cloudwise/docc_heartbeat_worker.rb +105 -0
- data/lib/datadog/core/cloudwise/docc_operation_worker.rb +191 -0
- data/lib/datadog/core/cloudwise/docc_registration_worker.rb +89 -0
- data/lib/datadog/core/cloudwise/license_worker.rb +90 -4
- data/lib/datadog/core/cloudwise/probe_state.rb +134 -12
- data/lib/datadog/core/configuration/components.rb +10 -9
- data/lib/datadog/core/configuration/settings.rb +43 -0
- data/lib/datadog/core/configuration/supported_configurations.rb +6 -2
- data/lib/datadog/core/remote/client/capabilities.rb +7 -0
- data/lib/datadog/core/remote/component.rb +2 -2
- data/lib/datadog/core/remote/transport/config.rb +2 -10
- data/lib/datadog/core/remote/transport/http/config.rb +9 -9
- data/lib/datadog/core/remote/transport/http/negotiation.rb +17 -8
- data/lib/datadog/core/remote/transport/http.rb +2 -0
- data/lib/datadog/core/remote/transport/negotiation.rb +2 -18
- data/lib/datadog/core/remote/worker.rb +23 -35
- data/lib/datadog/core/telemetry/component.rb +26 -13
- data/lib/datadog/core/telemetry/event/app_started.rb +67 -49
- data/lib/datadog/core/telemetry/event/synth_app_client_configuration_change.rb +27 -4
- data/lib/datadog/core/telemetry/transport/http/telemetry.rb +5 -6
- data/lib/datadog/core/telemetry/transport/telemetry.rb +1 -2
- data/lib/datadog/core/telemetry/worker.rb +51 -6
- data/lib/datadog/core/transport/http/adapters/net.rb +2 -0
- data/lib/datadog/core/transport/http/client.rb +69 -0
- data/lib/datadog/core/utils/only_once_successful.rb +6 -2
- data/lib/datadog/data_streams/transport/http/client.rb +4 -32
- data/lib/datadog/data_streams/transport/stats.rb +1 -1
- data/lib/datadog/di/probe_notification_builder.rb +35 -13
- data/lib/datadog/di/transport/diagnostics.rb +2 -2
- data/lib/datadog/di/transport/http/diagnostics.rb +2 -4
- data/lib/datadog/di/transport/http/input.rb +2 -4
- data/lib/datadog/di/transport/input.rb +2 -2
- data/lib/datadog/open_feature/component.rb +60 -0
- data/lib/datadog/open_feature/configuration.rb +27 -0
- data/lib/datadog/open_feature/evaluation_engine.rb +59 -0
- data/lib/datadog/open_feature/exposures/batch_builder.rb +32 -0
- data/lib/datadog/open_feature/exposures/buffer.rb +43 -0
- data/lib/datadog/open_feature/exposures/deduplicator.rb +30 -0
- data/lib/datadog/open_feature/exposures/event.rb +60 -0
- data/lib/datadog/open_feature/exposures/reporter.rb +40 -0
- data/lib/datadog/open_feature/exposures/worker.rb +116 -0
- data/lib/datadog/open_feature/ext.rb +13 -0
- data/lib/datadog/open_feature/noop_evaluator.rb +26 -0
- data/lib/datadog/open_feature/provider.rb +134 -0
- data/lib/datadog/open_feature/remote.rb +74 -0
- data/lib/datadog/open_feature/resolution_details.rb +35 -0
- data/lib/datadog/open_feature/transport.rb +72 -0
- data/lib/datadog/open_feature.rb +19 -0
- data/lib/datadog/profiling/component.rb +6 -0
- data/lib/datadog/profiling/profiler.rb +4 -0
- data/lib/datadog/profiling.rb +1 -2
- data/lib/datadog/single_step_instrument.rb +1 -1
- data/lib/datadog/tracing/contrib/cloudwise/propagation.rb +164 -7
- data/lib/datadog/tracing/contrib/graphql/unified_trace.rb +22 -17
- data/lib/datadog/tracing/contrib/karafka/framework.rb +30 -0
- data/lib/datadog/tracing/contrib/karafka/patcher.rb +14 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +6 -2
- data/lib/datadog/tracing/contrib/waterdrop/configuration/settings.rb +27 -0
- data/lib/datadog/tracing/contrib/waterdrop/distributed/propagation.rb +48 -0
- data/lib/datadog/tracing/contrib/waterdrop/ext.rb +17 -0
- data/lib/datadog/tracing/contrib/waterdrop/integration.rb +43 -0
- data/lib/datadog/tracing/contrib/waterdrop/middleware.rb +46 -0
- data/lib/datadog/tracing/contrib/waterdrop/patcher.rb +46 -0
- data/lib/datadog/tracing/contrib/waterdrop/producer.rb +50 -0
- data/lib/datadog/tracing/contrib/waterdrop.rb +37 -0
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/transport/http/api.rb +73 -1
- data/lib/datadog/tracing/transport/http/client.rb +12 -26
- data/lib/datadog/tracing/transport/http/traces.rb +4 -2
- data/lib/datadog/tracing/transport/trace_formatter.rb +16 -0
- data/lib/datadog/version.rb +2 -2
- data/lib/datadog.rb +1 -0
- metadata +38 -15
- data/lib/datadog/core/cloudwise/IMPLEMENTATION_V2.md +0 -517
- data/lib/datadog/core/cloudwise/QUICKSTART.md +0 -398
- data/lib/datadog/core/cloudwise/README.md +0 -722
- data/lib/datadog/core/remote/transport/http/client.rb +0 -49
- data/lib/datadog/core/telemetry/transport/http/client.rb +0 -49
- data/lib/datadog/di/transport/http/client.rb +0 -47
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
# Cloudwise 快速开始指南
|
|
2
|
-
|
|
3
|
-
## 🚀 5 分钟快速测试
|
|
4
|
-
|
|
5
|
-
### 步骤 1: 启动 Mock API 服务器
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
cd lib/datadog/core/cloudwise
|
|
9
|
-
ruby mock_api_server.rb
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
你会看到:
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
============================================================
|
|
16
|
-
🚀 Cloudwise Mock API Server
|
|
17
|
-
============================================================
|
|
18
|
-
Server starting on http://localhost:8080
|
|
19
|
-
...
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
在浏览器中打开 http://localhost:8080 查看 API 文档。
|
|
23
|
-
|
|
24
|
-
### 步骤 2: 运行集成测试
|
|
25
|
-
|
|
26
|
-
在另一个终端窗口:
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
cd lib/datadog/core/cloudwise
|
|
30
|
-
|
|
31
|
-
# 方式 1: 完整流程(会调用 generateHostId)
|
|
32
|
-
ruby test_integration.rb
|
|
33
|
-
|
|
34
|
-
# 方式 2: 使用已有 account_id(跳过 generateHostId)
|
|
35
|
-
CLOUDWISE_ACCOUNT_ID=acc-existing-123 ruby test_integration.rb
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### 步骤 3: 观察日志
|
|
39
|
-
|
|
40
|
-
你会看到类似的输出:
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
🧪 Cloudwise Integration Test
|
|
44
|
-
✅ Mock API server is running
|
|
45
|
-
✅ Datadog configured
|
|
46
|
-
⏳ Waiting for Cloudwise initialization (5 seconds)...
|
|
47
|
-
|
|
48
|
-
============================================================
|
|
49
|
-
📊 Cloudwise Status
|
|
50
|
-
============================================================
|
|
51
|
-
Enabled: true
|
|
52
|
-
Account ID: acc-1234567890-123
|
|
53
|
-
Host ID Generated: ✅
|
|
54
|
-
Probe Active: 🟢 Active
|
|
55
|
-
Heartbeat Running: ✅
|
|
56
|
-
License Running: ✅
|
|
57
|
-
App Reg Running: ✅
|
|
58
|
-
App Registered: ✅
|
|
59
|
-
============================================================
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### 步骤 4: 测试探针熔断
|
|
63
|
-
|
|
64
|
-
在第三个终端窗口,切换探针状态:
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
curl http://localhost:8080/admin/toggle_probe
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
返回:
|
|
71
|
-
|
|
72
|
-
```json
|
|
73
|
-
{
|
|
74
|
-
"status": "suspended",
|
|
75
|
-
"message": "Probe status changed to suspended"
|
|
76
|
-
}
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
观察测试脚本的输出,会看到:
|
|
80
|
-
|
|
81
|
-
```
|
|
82
|
-
⚠️ PROBE STATE CHANGED!
|
|
83
|
-
🔴 Probe suspended - data collection stopped
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
再次调用恢复探针:
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
curl http://localhost:8080/admin/toggle_probe
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
会看到:
|
|
93
|
-
|
|
94
|
-
```
|
|
95
|
-
⚠️ PROBE STATE CHANGED!
|
|
96
|
-
🟢 Probe recovered - data collection resumed
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## 📝 完整集成步骤
|
|
100
|
-
|
|
101
|
-
### 1. 添加配置
|
|
102
|
-
|
|
103
|
-
编辑 `lib/datadog/core/configuration/settings.rb`,添加:
|
|
104
|
-
|
|
105
|
-
```ruby
|
|
106
|
-
settings :cloudwise do
|
|
107
|
-
option :enabled do |o|
|
|
108
|
-
o.type :bool
|
|
109
|
-
o.env 'DD_CLOUDWISE_ENABLED'
|
|
110
|
-
o.default false
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
option :base_url do |o|
|
|
114
|
-
o.type :string
|
|
115
|
-
o.env 'DD_CLOUDWISE_BASE_URL'
|
|
116
|
-
o.default 'http://localhost:8080'
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
option :server_name do |o|
|
|
120
|
-
o.type :string
|
|
121
|
-
o.env 'DD_CLOUDWISE_SERVER_NAME'
|
|
122
|
-
o.default { Socket.gethostname }
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
option :license_key do |o|
|
|
126
|
-
o.type :string, nilable: true
|
|
127
|
-
o.env 'DD_CLOUDWISE_LICENSE_KEY'
|
|
128
|
-
o.default nil
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
option :heartbeat_interval do |o|
|
|
132
|
-
o.type :int
|
|
133
|
-
o.env 'DD_CLOUDWISE_HEARTBEAT_INTERVAL'
|
|
134
|
-
o.default 60
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
option :license_check_interval do |o|
|
|
138
|
-
o.type :int
|
|
139
|
-
o.env 'DD_CLOUDWISE_LICENSE_CHECK_INTERVAL'
|
|
140
|
-
o.default 300
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
option :app_registration_interval do |o|
|
|
144
|
-
o.type :int
|
|
145
|
-
o.env 'DD_CLOUDWISE_APP_REGISTRATION_INTERVAL'
|
|
146
|
-
o.default 600
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### 2. 集成组件
|
|
152
|
-
|
|
153
|
-
编辑 `lib/datadog/core/configuration/components.rb`:
|
|
154
|
-
|
|
155
|
-
```ruby
|
|
156
|
-
class Components
|
|
157
|
-
def initialize(settings)
|
|
158
|
-
# ... 现有代码 ...
|
|
159
|
-
|
|
160
|
-
# Cloudwise component
|
|
161
|
-
@cloudwise = build_cloudwise(settings)
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
attr_reader :cloudwise
|
|
165
|
-
|
|
166
|
-
private
|
|
167
|
-
|
|
168
|
-
def build_cloudwise(settings)
|
|
169
|
-
require_relative '../cloudwise/component'
|
|
170
|
-
Datadog::Core::Cloudwise::Component.new(
|
|
171
|
-
settings: settings,
|
|
172
|
-
logger: logger
|
|
173
|
-
)
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
def startup!
|
|
177
|
-
# ... 现有代码 ...
|
|
178
|
-
cloudwise.start if cloudwise.enabled?
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
def shutdown!
|
|
182
|
-
# ... 现有代码 ...
|
|
183
|
-
cloudwise.stop if cloudwise.enabled?
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### 3. 配置应用
|
|
189
|
-
|
|
190
|
-
在你的应用中:
|
|
191
|
-
|
|
192
|
-
```ruby
|
|
193
|
-
require 'datadog'
|
|
194
|
-
|
|
195
|
-
Datadog.configure do |c|
|
|
196
|
-
c.service = 'my-app'
|
|
197
|
-
|
|
198
|
-
# Cloudwise 配置
|
|
199
|
-
c.cloudwise.enabled = true
|
|
200
|
-
c.cloudwise.base_url = ENV['CLOUDWISE_API_URL']
|
|
201
|
-
c.cloudwise.server_name = ENV['SERVER_NAME']
|
|
202
|
-
c.cloudwise.license_key = ENV['CLOUDWISE_LICENSE_KEY']
|
|
203
|
-
end
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
或使用环境变量:
|
|
207
|
-
|
|
208
|
-
```bash
|
|
209
|
-
export DD_CLOUDWISE_ENABLED=true
|
|
210
|
-
export DD_CLOUDWISE_BASE_URL=https://api.cloudwise.com
|
|
211
|
-
export DD_CLOUDWISE_SERVER_NAME=my-app
|
|
212
|
-
export DD_CLOUDWISE_LICENSE_KEY=your-license-key
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
## 🎯 关键功能
|
|
216
|
-
|
|
217
|
-
### 1. Host ID 生成
|
|
218
|
-
|
|
219
|
-
- **自动执行**: 应用启动时
|
|
220
|
-
- **失败重试**: 每 2 分钟
|
|
221
|
-
- **完成后**: 自动停止 Worker
|
|
222
|
-
|
|
223
|
-
### 2. 心跳注册
|
|
224
|
-
|
|
225
|
-
- **执行周期**: 60 秒
|
|
226
|
-
- **失败重试**: 间隔 2 秒,最多 3 次
|
|
227
|
-
- **探针熔断**: 返回 code=1001 时停止采集
|
|
228
|
-
- **探针恢复**: 返回 code=1000/1002 时恢复采集
|
|
229
|
-
|
|
230
|
-
### 3. License 校验
|
|
231
|
-
|
|
232
|
-
- **执行周期**: 5 分钟
|
|
233
|
-
- **失败重试**: 间隔 2 秒,最多 3 次
|
|
234
|
-
- **校验失败**: 停止数据采集
|
|
235
|
-
- **校验成功**: 恢复数据采集
|
|
236
|
-
|
|
237
|
-
### 4. 应用注册
|
|
238
|
-
|
|
239
|
-
- **执行周期**: 10 分钟
|
|
240
|
-
- **失败重试**: 间隔 2 秒,最多 3 次
|
|
241
|
-
- **注意**: 注册失败不影响数据采集
|
|
242
|
-
|
|
243
|
-
## 🔍 状态监控
|
|
244
|
-
|
|
245
|
-
### 查看状态
|
|
246
|
-
|
|
247
|
-
```ruby
|
|
248
|
-
status = Datadog.components.cloudwise.status
|
|
249
|
-
puts status.inspect
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
输出:
|
|
253
|
-
|
|
254
|
-
```ruby
|
|
255
|
-
{
|
|
256
|
-
enabled: true,
|
|
257
|
-
account_id: "acc-1234567890-123",
|
|
258
|
-
host_id_generated: true,
|
|
259
|
-
probe_active: true,
|
|
260
|
-
probe_suspended: false,
|
|
261
|
-
heartbeat_running: true,
|
|
262
|
-
license_running: true,
|
|
263
|
-
app_registration_running: true,
|
|
264
|
-
app_registered: true
|
|
265
|
-
}
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
### 健康检查端点
|
|
269
|
-
|
|
270
|
-
```ruby
|
|
271
|
-
# In Rails
|
|
272
|
-
get '/health/cloudwise' do
|
|
273
|
-
cloudwise = Datadog.components.cloudwise
|
|
274
|
-
|
|
275
|
-
if cloudwise&.probe_active?
|
|
276
|
-
render json: { status: 'ok', probe: 'active' }
|
|
277
|
-
else
|
|
278
|
-
render json: { status: 'suspended', probe: 'suspended' }, status: 503
|
|
279
|
-
end
|
|
280
|
-
end
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
## 📊 日志示例
|
|
284
|
-
|
|
285
|
-
### 正常运行
|
|
286
|
-
|
|
287
|
-
```
|
|
288
|
-
[INFO] 🚀 Starting Cloudwise Component
|
|
289
|
-
[INFO] 📍 Step 1: Starting Host ID generation worker...
|
|
290
|
-
[INFO] Cloudwise: Generated Host ID, account_id: acc-xxx
|
|
291
|
-
[INFO] 💓 Step 2: Starting Heartbeat worker (60s interval)...
|
|
292
|
-
[INFO] 🔑 Step 3: Starting License verification worker (5 min interval)...
|
|
293
|
-
[INFO] 📝 Step 4: Starting Application registration worker (10 min interval)...
|
|
294
|
-
[INFO] ✅ Cloudwise Component started successfully
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
### 探针熔断
|
|
298
|
-
|
|
299
|
-
```
|
|
300
|
-
[WARN] 🔴 Cloudwise: Probe suspended - data collection stopped
|
|
301
|
-
[DEBUG] Cloudwise: Probe suspended, skipping trace submission
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
### 探针恢复
|
|
305
|
-
|
|
306
|
-
```
|
|
307
|
-
[INFO] 🟢 Cloudwise: Probe resumed - data collection active
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
## 🧪 测试场景
|
|
311
|
-
|
|
312
|
-
### 场景 1: 正常运行
|
|
313
|
-
|
|
314
|
-
1. 启动 Mock API 服务器
|
|
315
|
-
2. 启动应用
|
|
316
|
-
3. 观察所有接口正常调用
|
|
317
|
-
|
|
318
|
-
### 场景 2: 探针熔断
|
|
319
|
-
|
|
320
|
-
1. 切换探针状态: `curl http://localhost:8080/admin/toggle_probe`
|
|
321
|
-
2. 观察数据采集停止
|
|
322
|
-
3. 再次切换恢复
|
|
323
|
-
4. 观察数据采集恢复
|
|
324
|
-
|
|
325
|
-
### 场景 3: License 失效
|
|
326
|
-
|
|
327
|
-
1. 切换 License 状态: `curl http://localhost:8080/admin/toggle_license`
|
|
328
|
-
2. 等待 License 校验(5 分钟或重启应用加快测试)
|
|
329
|
-
3. 观察数据采集停止
|
|
330
|
-
4. 切换 License 状态恢复
|
|
331
|
-
|
|
332
|
-
### 场景 4: 网络故障
|
|
333
|
-
|
|
334
|
-
1. 停止 Mock API 服务器
|
|
335
|
-
2. 观察重试日志
|
|
336
|
-
3. 重启 Mock API 服务器
|
|
337
|
-
4. 观察自动恢复
|
|
338
|
-
|
|
339
|
-
## 📚 文档索引
|
|
340
|
-
|
|
341
|
-
| 文档 | 说明 |
|
|
342
|
-
|------|------|
|
|
343
|
-
| `QUICKSTART.md` | 本文件 - 快速开始 |
|
|
344
|
-
| `README.md` | 完整功能文档 |
|
|
345
|
-
| `INTEGRATION_GUIDE.md` | 详细集成步骤 |
|
|
346
|
-
| `example.rb` | 代码示例 |
|
|
347
|
-
| `mock_api_server.rb` | 测试服务器 |
|
|
348
|
-
| `test_integration.rb` | 集成测试脚本 |
|
|
349
|
-
|
|
350
|
-
## 🆘 常见问题
|
|
351
|
-
|
|
352
|
-
### Q: 如何验证 Cloudwise 是否正常工作?
|
|
353
|
-
|
|
354
|
-
A: 查看日志中是否有 Cloudwise 相关输出,或检查状态:
|
|
355
|
-
|
|
356
|
-
```ruby
|
|
357
|
-
puts Datadog.components.cloudwise.status
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
### Q: 如何临时禁用 Cloudwise?
|
|
361
|
-
|
|
362
|
-
A: 设置环境变量:
|
|
363
|
-
|
|
364
|
-
```bash
|
|
365
|
-
export DD_CLOUDWISE_ENABLED=false
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
或在代码中:
|
|
369
|
-
|
|
370
|
-
```ruby
|
|
371
|
-
c.cloudwise.enabled = false
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
### Q: 探针熔断后多久会恢复?
|
|
375
|
-
|
|
376
|
-
A: 取决于心跳或 License 校验接口下次返回成功的时间:
|
|
377
|
-
- 心跳: 最多 60 秒
|
|
378
|
-
- License: 最多 5 分钟
|
|
379
|
-
|
|
380
|
-
### Q: Host ID 一直生成失败怎么办?
|
|
381
|
-
|
|
382
|
-
A: 检查:
|
|
383
|
-
1. API 服务器是否可达
|
|
384
|
-
2. base_url 配置是否正确
|
|
385
|
-
3. license_key 是否有效
|
|
386
|
-
4. 网络防火墙设置
|
|
387
|
-
|
|
388
|
-
## 🎉 完成!
|
|
389
|
-
|
|
390
|
-
现在你已经了解了 Cloudwise 集成的基本使用。
|
|
391
|
-
|
|
392
|
-
更多详细信息,请参考:
|
|
393
|
-
- `README.md` - 完整功能文档
|
|
394
|
-
- `INTEGRATION_GUIDE.md` - 详细集成指南
|
|
395
|
-
- `CLOUDWISE_IMPLEMENTATION.md` - 实现总结
|
|
396
|
-
|
|
397
|
-
祝使用愉快!🚀
|
|
398
|
-
|