• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 分布式跟踪
2
3本模块提供了端侧业务流程调用链跟踪的打点能力,包括业务流程跟踪的启动、结束、信息埋点等能力。
4
5> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
6> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
7
8## 导入模块
9
10```js
11import hiTraceChain from '@ohos.hiTraceChain';
12```
13
14
15## HiTraceFlag
16
17跟踪标志组合类型枚举。
18
19**系统能力:** 以下各项对应的系统能力均为SystemCapability.HiviewDFX.HiTrace20
21| 名称 | 默认值 | 说明 |
22| -------- | -------- | -------- |
23| DEFAULT           | 0      | 缺省标志。       |
24| INCLUDE_ASYNC     | 1      | 异步调用标志。启动跟踪时,缺省只跟踪同步调用。设置该标志,同时跟踪同步、异步调用。   |
25| DONOT_CREATE_SPAN | 1 << 1 | 无分支标志。启动跟踪时,在同步、异步调用时缺省自动创建分支信息。设置该标志,指示不创建分支。     |
26| TP_INFO           | 1 << 2 | 埋点标志。启动跟踪式时,缺省不进行埋点。调试场景下设置该标志,在同步、异步调用的收发侧自动埋点,输出埋点信息和时间戳。收发埋点按照client、server分为[client send(CS)、server receive(SR)、server send(SS)、client receive(CR)](#hitracetracepointtype)四类信息。一次同步调用输出CS/SR/SS/CR,一次异步调用输出CS/SR/SS三个埋点信息。       |
27| NO_BE_INFO        | 1 << 3 | 无起始结束标志。启动跟踪时,缺省打印启动及结束跟踪信息。设置该标志,指示不打印启动及结束跟踪信息。 |
28| DISABLE_LOG       | 1 << 4 | 日志关联标志。设置该标志,指示隐藏日志中的跟踪信息。  |
29| FAILURE_TRIGGER   | 1 << 5 | 故障触发标志。预置标志,暂时没有作用。  |
30| D2D_TP_INFO       | 1 << 6 | 设备间埋点标志。TP_INFO的一个子集,设置该标志,只进行设备间的调用埋点。 |
31
32## HiTraceTracepointType
33
34跟踪埋点类型枚举。
35
36**系统能力:** 以下各项对应的系统能力均为SystemCapability.HiviewDFX.HiTrace37
38| 名称 | 默认值 | 说明 |
39| -------- | -------- | -------- |
40| CS       | 0 | 客户端发送类型,标识client侧的发送埋点。        |
41| CR       | 1 | 客户端接收类型,标识client侧的接收埋点。        |
42| SS       | 2 | 服务端发送类型,标识server侧的发送埋点。        |
43| SR       | 3 | 服务端接收类型,标识server侧的接收埋点。        |
44| GENERAL  | 4 | 一般类型,标识CS、CR、SS、SR四种场景之外的埋点。|
45
46## HiTraceCommunicationMode
47
48跟踪通信类型枚举。
49
50**系统能力:** 以下各项对应的系统能力均为SystemCapability.HiviewDFX.HiTrace51
52| 名称 | 默认值 | 说明 |
53| -------- | -------- | -------- |
54| DEFAULT  | 0 | 缺省通信类型    |
55| THREAD   | 1 | 线程间通信类型  |
56| PROCESS  | 2 | 进程间通信类型  |
57| DEVICE   | 3 | 设备间通信类型  |
58
59## HiTraceId
60
61此接口为HiTraceId对象接口。
62
63**系统能力:** 以下各项对应的系统能力均为SystemCapability.HiviewDFX.HiTrace64
65| 参数名 | 类型 | 必填 | 说明 |
66| -------- | -------- | -------- | -------- |
67| chainId      | bigint | 是 | 跟踪链标识。   |
68| spanId      | number | 否 | 分支标识。     |
69| parentSpanId | number | 否 | 父分支标识。   |
70| flags        | number | 否 | 跟踪标志组合。 |
71
72## hiTraceChain.begin
73
74begin(name: string, flags: number = HiTraceFlag.DEFAULT): HiTraceId
75
76开始跟踪,同步接口。
77
78**系统能力:** SystemCapability.HiviewDFX.HiTrace
79
80**参数:**
81
82| 参数名 | 类型 | 必填 | 说明 |
83| -------- | -------- | -------- | -------- |
84| name  | string | 是 | 跟踪业务名。 |
85| flags | number | 是 | 跟踪标志组合,具体可参考[HiTraceFlag](#hitraceflag)。 |
86
87**返回值:**
88
89| 类型 | 说明 |
90| -------- | -------- |
91| [HiTraceId](#hitraceid) | HiTraceId实例。 |
92
93**示例:**
94
95```js
96let asyncTraceId = hiTraceChain.begin("business", hiTraceChain.HiTraceFlag.INCLUDE_ASYNC | hiTraceChain.HiTraceFlag.DONOT_CREATE_SPAN);
97```
98
99## hiTraceChain.end
100
101end(id: HiTraceId): void
102
103结束跟踪,同步接口。
104
105**系统能力:** SystemCapability.HiviewDFX.HiTrace
106
107**参数:**
108
109| 参数名 | 类型 | 必填 | 说明 |
110| -------- | -------- | -------- | -------- |
111| id | [HiTraceId](#hitraceid) | 是 | HiTraceId实例。 |
112
113**示例:**
114
115```js
116let asyncTraceId = hiTraceChain.begin("business");
117// 若干业务逻辑完成后,结束跟踪。
118hiTraceChain.end(asyncTraceId);
119```
120
121## hiTraceChain.getId
122
123getId(): HiTraceId
124
125获取跟踪标识,同步接口。
126
127**系统能力:** SystemCapability.HiviewDFX.HiTrace
128
129**返回值:**
130
131| 类型 | 说明 |
132| -------- | -------- |
133| [HiTraceId](#hitraceid) | HiTraceId实例。 |
134
135**示例:**
136
137```js
138let traceId = hiTraceChain.begin("business");
139// 若干业务逻辑完成后,获取当前HiTraceId。
140let curTraceId = hiTraceChain.getId();
141```
142
143## hiTraceChain.setId
144
145setId(id: HiTraceId): void
146
147设置跟踪标识,同步接口。
148
149**系统能力:** SystemCapability.HiviewDFX.HiTrace
150
151**参数:**
152
153| 参数名 | 类型 | 必填 | 说明 |
154| -------- | -------- | -------- | -------- |
155| id | [HiTraceId](#hitraceid) | 是 | HiTraceId实例。 |
156
157**示例:**
158
159```js
160let asyncTraceId;
161let traceId = hiTraceChain.begin("business");
162// 若干业务逻辑完成后,设置当前HiTraceId。
163hiTraceChain.setId(asyncTraceId);
164```
165
166## hiTraceChain.clearId
167
168clearId(): void
169
170清除跟踪标识,同步接口。
171
172**系统能力:** SystemCapability.HiviewDFX.HiTrace
173
174**示例:**
175
176```js
177let traceId = hiTraceChain.begin("business");
178// 若干业务逻辑完成后,清除当前HiTraceId。
179hiTraceChain.clearId();
180```
181
182## hiTraceChain.createSpan
183
184createSpan(): HiTraceId
185
186创建跟踪分支,同步接口。
187
188**系统能力:** SystemCapability.HiviewDFX.HiTrace
189
190**返回值:**
191
192| 类型 | 说明 |
193| -------- | -------- |
194| [HiTraceId](#hitraceid) | HiTraceId实例。 |
195
196**示例:**
197
198```js
199let traceId = hiTraceChain.begin("business");
200// 若干业务逻辑完成后,创建跟踪分支。
201let spanTraceId = hiTraceChain.createSpan();
202```
203
204## hiTraceChain.tracepoint
205
206tracepoint(mode: HiTraceCommunicationMode, type: HiTraceTracepointType, id: HiTraceId, msg?: string): void
207
208信息埋点,同步接口。
209
210**系统能力:** SystemCapability.HiviewDFX.HiTrace
211
212**参数:**
213
214| 参数名 | 类型 | 必填 | 说明 |
215| -------- | -------- | -------- | -------- |
216| mode | [HiTraceCommunicationMode](#hitracecommunicationmode) | 是 | 信息埋点需要指定的跟踪通信模式。 |
217| type | [HiTraceTracepointType](#hitracetracepointtype)| 是 | 信息埋点需要指定的跟踪埋点类型。 |
218| id   | [HiTraceId](#hitraceid) | 是 | 实施信息埋点操作的HiTraceId实例。 |
219| msg  | string | 否 | 信息埋点操作传入的trace说明信息。 |
220
221**示例:**
222
223```js
224let asyncTraceId = hiTraceChain.begin("business", hiTraceChain.HiTraceFlag.INCLUDE_ASYNC | hiTraceChain.HiTraceFlag.DONOT_CREATE_SPAN);
225// 若干业务逻辑完成后,触发信息埋点操作。
226hiTraceChain.tracepoint(hiTraceChain.HiTraceCommunicationMode.THREAD, hiTraceChain.HiTraceTracepointType.SS, asyncTraceId, "Just a example");
227```
228
229## hiTraceChain.isValid
230
231isValid(id: HiTraceId): boolean
232
233判断HiTraceId对象是否有效,同步接口。
234
235**系统能力:** SystemCapability.HiviewDFX.HiTrace
236
237**参数:**
238
239| 参数名 | 类型 | 必填 | 说明 |
240| -------- | -------- | -------- | -------- |
241| id  | [HiTraceId](#hitraceid) | 是 | 需要判断是否有效的HiTraceId实例。 |
242
243**返回值:**
244
245| 类型 | 说明 |
246| -------- | -------- |
247| boolean | 返回true表示HiTraceId有效,否则无效。 |
248
249**示例:**
250
251```js
252let traceId = hiTraceChain.begin("business");
253let traceIdIsvalid = hiTraceChain.isValid(traceId);
254```
255
256## hiTraceChain.isFlagEnabled
257
258isFlagEnabled(id: HiTraceId, flag: HiTraceFlag): boolean
259
260判断HiTraceId对象中指定的跟踪标志是否已置位,同步接口。
261
262**系统能力:** SystemCapability.HiviewDFX.HiTrace
263
264**参数:**
265
266| 参数名 | 类型 | 必填 | 说明 |
267| -------- | -------- | -------- | -------- |
268| id  | [HiTraceId](#hitraceid) | 是 | 需要判断指定跟踪标志是否置位的HiTraceId实例。 |
269| flag | [HiTraceFlag](#hitraceflag) | 是 | 指定的跟踪标志。 |
270
271**返回值:**
272
273| 类型 | 说明 |
274| -------- | -------- |
275| boolean | 返回true标识HiTraceId已置位指定的flag,否则没有置位。 |
276
277**示例:**
278
279```js
280let asyncTraceId = hiTraceChain.begin("business", hiTraceChain.HiTraceFlag.INCLUDE_ASYNC);
281// enabledDoNotCreateSpanFlag为true
282let enabledDoNotCreateSpanFlag = hiTraceChain.isFlagEnabled(asyncTraceId, hiTraceChain.HiTraceFlag.INCLUDE_ASYNC);
283```
284
285## hiTraceChain.enableFlag
286
287enableFlag(id: HiTraceId, flag: HiTraceFlag): void
288
289置位HiTraceId对象中指定的跟踪标志,同步接口。
290
291**系统能力:** SystemCapability.HiviewDFX.HiTrace
292
293**参数:**
294| 参数名 | 类型 | 必填 | 说明 |
295| -------- | -------- | -------- | -------- |
296| id  | [HiTraceId](#hitraceid) | 是 | 需要置位指定跟踪标志的HiTraceId实例。 |
297| flag | [HiTraceFlag](#hitraceflag) | 是 | 指定的跟踪标志。 |
298
299**示例:**
300
301```js
302let asyncTraceId = hiTraceChain.begin("business", hiTraceChain.HiTraceFlag.INCLUDE_ASYNC);
303hiTraceChain.enableFlag(asyncTraceId, hiTraceChain.HiTraceFlag.DONOT_CREATE_SPAN);
304// enabledDoNotCreateSpanFlag为true
305let enabledDoNotCreateSpanFlag = hiTraceChain.isFlagEnabled(asyncTraceId, hiTraceChain.HiTraceFlag.DONOT_CREATE_SPAN);
306```
307