1e41f4b71Sopenharmony_ci# HiSysEvent打点配置
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ci## 概述
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci### 功能简介
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci组件若有HiSysEvent事件的打点需求,则需要先定义yaml文件并在bundle.json文件中[配置yaml文件的路径](subsys-dfx-hisysevent-logging-config.md#验证yaml文件)。OpenHarmony编译框架在编译过程中则会通过python编译脚本解析校验bundle.json文件指定的所有yaml文件。在解析校验之后,编译框架会将这些yaml文件中配置的信息汇总转换成名为hisysevent.zip文件。最后,将此zip文件打包到系统指定路径下,用作HiSysEvent事件落盘的判断依据。
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci
12e41f4b71Sopenharmony_ci### 基本概念
13e41f4b71Sopenharmony_ci
14e41f4b71Sopenharmony_ci在配置HiSysEvent打点之前,开发者应了解以下基本概念:
15e41f4b71Sopenharmony_ci
16e41f4b71Sopenharmony_ci- 事件领域 用于标识事件所属的领域,在yaml文件中以domain为键值指定,可参考yaml文件样例中的[domain](subsys-dfx-hisysevent-logging-config.md#编写yaml文件)。
17e41f4b71Sopenharmony_ci
18e41f4b71Sopenharmony_ci- 事件名称 用于指定事件领域包含的所有事件,可参考yaml文件样例中的[EVENT_NAMEA/EVENT_NAMEB](subsys-dfx-hisysevent-logging-config.md#编写yaml文件)。
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci- 参数 用于定义某个事件名称包含的所有键值,可参考yaml文件样例中的[__BASE/NAME1/NAME2](subsys-dfx-hisysevent-logging-config.md#编写yaml文件)。
21e41f4b71Sopenharmony_ci
22e41f4b71Sopenharmony_ci
23e41f4b71Sopenharmony_ci### 约束与限制
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci定义事件领域、事件名称及参数的约束与限制:
26e41f4b71Sopenharmony_ci
27e41f4b71Sopenharmony_ci- 每个yaml文件只能有一个事件领域,且不能与其他yaml文件中定义的事件领域重名。
28e41f4b71Sopenharmony_ci
29e41f4b71Sopenharmony_ci- 每个事件领域可定义零个或多个事件名称,同一个事件领域内部的事件名称不能重名。
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ci- 每个事件名称可定义多个参数,同一个事件名称内部的参数不能重名,每个事件名称有且只有一个名称为__BASE的参数,此参数字段组成如表1,其它自定义参数,具体字段组成如表2。
32e41f4b71Sopenharmony_ci    **表1** __BASE参数字段说明
33e41f4b71Sopenharmony_ci  
34e41f4b71Sopenharmony_ci  | 字段名称 | 描述 |
35e41f4b71Sopenharmony_ci  | -------- | -------- |
36e41f4b71Sopenharmony_ci  | type | 字段说明:必选字段,用来标识该事件名称的类型。<br/>取值范围:<br/>-&nbsp;FAULT:故障类型。<br/>-&nbsp;STATISTIC:统计类型。<br/>-&nbsp;SECURITY:安全类型。<br/>-&nbsp;BEHAVIOR:行为类型。 |
37e41f4b71Sopenharmony_ci  | level | 字段说明:必选字段,用来标识该事件名称的级别。<br/>取值范围:<br/>-&nbsp;CRITICAL:严重。<br/>-&nbsp;MINOR:一般。 |
38e41f4b71Sopenharmony_ci  | tag | 字段说明:可选字段,用来标识该事件名称的标签。<br/>定义规则:<br/>-&nbsp;最多可同时定义5个标签,标签之间使用空格来分隔。<br/>-&nbsp;单个标签最多包含16个字符,字符范围[a-zA-Z0-9]。 |
39e41f4b71Sopenharmony_ci  | desc | 字段说明:必选字段,用来对该事件名称进行描述。<br/>定义规则:<br/>-&nbsp;至少包含3个字符,最多包含128个字符。 |
40e41f4b71Sopenharmony_ci  | preserve | 字段说明:可选字段,用来标识事件是否需要落盘,默认值为true。<br/>取值范围:<br/>- true:事件需要落盘。<br/>- false:事件不需要落盘。 |
41e41f4b71Sopenharmony_ci
42e41f4b71Sopenharmony_ci    **表2** 自定义参数字段说明
43e41f4b71Sopenharmony_ci  
44e41f4b71Sopenharmony_ci  | 字段名称 | 描述 |
45e41f4b71Sopenharmony_ci  | -------- | -------- |
46e41f4b71Sopenharmony_ci  | type | 字段说明:必选字段,用来标识该参数的类型。<br/>取值范围:<br/>-&nbsp;BOOL<br/>-&nbsp;INT8<br/>-&nbsp;UINT8<br/>-&nbsp;INT16<br/>-&nbsp;UINT16<br/>-&nbsp;INT32<br/>-&nbsp;UINT32<br/>-&nbsp;INT64<br/>-&nbsp;UINT64<br/>-&nbsp;FLOAT<br/>-&nbsp;DOUBLE<br/>-&nbsp;STRING |
47e41f4b71Sopenharmony_ci  | arrsize | 字段作用:可选字段,用来标识数组类型参数的长度。<br/>取值范围:<br/>-&nbsp;1~100 |
48e41f4b71Sopenharmony_ci  | desc | 字段作用:必选字段,用来对该参数进行描述。<br/>定义规则:<br/>-&nbsp;至少包含3个字符,最多包含128个字符。 |
49e41f4b71Sopenharmony_ci
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ci## 开发步骤
52e41f4b71Sopenharmony_ci
53e41f4b71Sopenharmony_ci
54e41f4b71Sopenharmony_ci### 编写yaml文件
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ci**编写规则**
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ci- 事件领域命名规则:
60e41f4b71Sopenharmony_ci  - 字母开头,且只能由大写字母/数字/下划线组成;
61e41f4b71Sopenharmony_ci  - 字符串长度取值范围为1~16。
62e41f4b71Sopenharmony_ci
63e41f4b71Sopenharmony_ci- 事件名称命名规则:
64e41f4b71Sopenharmony_ci  - 字母开头,且只能由大写字母/数字/下划线组成;
65e41f4b71Sopenharmony_ci  - 字符串长度取值范围1~32;
66e41f4b71Sopenharmony_ci  - 单个事件领域内部事件名称的不能超过4096个。
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ci- 参数命名规则:
69e41f4b71Sopenharmony_ci  - 字母开头,且只能由大写字母/数字/下划线组成;
70e41f4b71Sopenharmony_ci  - 字符串长度取值范围1~48;
71e41f4b71Sopenharmony_ci  - 单个事件名称内包含的参数的个数不能超过128个。
72e41f4b71Sopenharmony_ci
73e41f4b71Sopenharmony_ci
74e41f4b71Sopenharmony_ci**编写样例**
75e41f4b71Sopenharmony_ci
76e41f4b71Sopenharmony_ci- yaml文件样例指定的事件领域名称为MODULEA,该事件领域包含两个事件,名称分别是EVENT_NAMEA和EVENT_NAMEB。
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_ci- EVENT_NAMEA被定义成错误类型的严重事件,该事件包含类型为字符串类型的NAME1参数、字符串类型的NAME2参数及无符号短整型类型的NAME3参数,可以通过事件领域MODULEA和事件名称EVENT_NAMEA对其进行[实时订阅](../subsystems/subsys-dfx-hisysevent-listening.md)。
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_ci- EVENT_NAMEB被定义成统计类型的一般事件,EVENT_NAMEB包含类型为无符号短整型类型的NAME1参数及整型类型的NAME2参数。因为EVENT_NAMEB在__BASE参数中定义了名称为tag1和tag2的两个事件标签,所以不仅可以通过事件领域MODULEA和事件名称EVENT_NAMEB对其进行[实时订阅](../subsystems/subsys-dfx-hisysevent-listening.md),所以还可以通过事件标签对该事件进行实时订阅。
81e41f4b71Sopenharmony_ci  
82e41f4b71Sopenharmony_ci  ```
83e41f4b71Sopenharmony_ci  ##########################################
84e41f4b71Sopenharmony_ci  # the hisysevent definition for module a #
85e41f4b71Sopenharmony_ci  ##########################################
86e41f4b71Sopenharmony_ci  
87e41f4b71Sopenharmony_ci  domain: MODULEA
88e41f4b71Sopenharmony_ci  
89e41f4b71Sopenharmony_ci  EVENT_NAMEA:
90e41f4b71Sopenharmony_ci      __BASE: {type: FAULT, level: CRITICAL, desc: event name a}
91e41f4b71Sopenharmony_ci      NAME1: {type: STRING, desc: name1}
92e41f4b71Sopenharmony_ci      NAME2: {type: STRING, desc: name2}
93e41f4b71Sopenharmony_ci      NAME3: {type: UINT16, desc: name3}
94e41f4b71Sopenharmony_ci  
95e41f4b71Sopenharmony_ci  EVENT_NAMEB:
96e41f4b71Sopenharmony_ci      __BASE: {type: STATISTIC, level: MINOR, tag: tag1 tag2, desc: event name b}
97e41f4b71Sopenharmony_ci      NAME1: {type: UINT16, desc: name1}
98e41f4b71Sopenharmony_ci      NAME2: {type: INT32, desc: name2}
99e41f4b71Sopenharmony_ci  ```
100e41f4b71Sopenharmony_ci
101e41f4b71Sopenharmony_ci
102e41f4b71Sopenharmony_ci### 验证yaml文件
103e41f4b71Sopenharmony_ci
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_ci**配置yaml文件路径**
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_cibundle.json文件中通过hisysevent_config属性完成yaml文件的路径指定:
108e41f4b71Sopenharmony_ci
109e41f4b71Sopenharmony_ci
110e41f4b71Sopenharmony_ci```
111e41f4b71Sopenharmony_ci{
112e41f4b71Sopenharmony_ci    "name": "@ohos/moduel_a",
113e41f4b71Sopenharmony_ci    "description": "module a",
114e41f4b71Sopenharmony_ci    "version": "3.1",
115e41f4b71Sopenharmony_ci    "license": "Apache License 2.0",
116e41f4b71Sopenharmony_ci    "publishAs": "code-segment",
117e41f4b71Sopenharmony_ci    "segment": {
118e41f4b71Sopenharmony_ci        "destPath": "moduel_a_path"
119e41f4b71Sopenharmony_ci    },
120e41f4b71Sopenharmony_ci    "dirs": {},
121e41f4b71Sopenharmony_ci    "scripts": {},
122e41f4b71Sopenharmony_ci    "component": {
123e41f4b71Sopenharmony_ci        "name": "hisysevent_native",
124e41f4b71Sopenharmony_ci        "subsystem": "hiviewdfx",
125e41f4b71Sopenharmony_ci        "adapted_system_type": [
126e41f4b71Sopenharmony_ci            "standard"
127e41f4b71Sopenharmony_ci        ],
128e41f4b71Sopenharmony_ci        "rom": "",
129e41f4b71Sopenharmony_ci        "ram": "",
130e41f4b71Sopenharmony_ci        "hisysevent_config": [
131e41f4b71Sopenharmony_ci            "//moduel_a_path/yaml_file1.yaml",
132e41f4b71Sopenharmony_ci            "//moduel_a_path/yaml_file2.yaml"
133e41f4b71Sopenharmony_ci        ],
134e41f4b71Sopenharmony_ci        "deps": {
135e41f4b71Sopenharmony_ci            "components": [
136e41f4b71Sopenharmony_ci                "hilog_native",
137e41f4b71Sopenharmony_ci                "hitrace_native",
138e41f4b71Sopenharmony_ci                "ipc",
139e41f4b71Sopenharmony_ci                "safwk",
140e41f4b71Sopenharmony_ci                "samgr",
141e41f4b71Sopenharmony_ci                "utils_base"
142e41f4b71Sopenharmony_ci            ],
143e41f4b71Sopenharmony_ci            "third_party": []
144e41f4b71Sopenharmony_ci        },
145e41f4b71Sopenharmony_ci        "build": {
146e41f4b71Sopenharmony_ci        }
147e41f4b71Sopenharmony_ci    }
148e41f4b71Sopenharmony_ci}
149e41f4b71Sopenharmony_ci```
150e41f4b71Sopenharmony_ci
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ci> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
153e41f4b71Sopenharmony_ci> yaml文件可根据实际需求置于组件工程的任意目录下,只要在bundle.json文件指定即可。
154e41f4b71Sopenharmony_ci
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ci**编译yaml文件**
157e41f4b71Sopenharmony_ci
158e41f4b71Sopenharmony_ci- 全量编译:
159e41f4b71Sopenharmony_ci  - 全量编译整个系统,会将所有组件配置的yaml文件中的配置进行汇总,正常完成系统编译后,指定目录下就会生成hisysevent.zip文件。
160e41f4b71Sopenharmony_ci    
161e41f4b71Sopenharmony_ci     ```
162e41f4b71Sopenharmony_ci     cd 工程根目录的绝对路径
163e41f4b71Sopenharmony_ci     ./build --product-name <product name>
164e41f4b71Sopenharmony_ci     ```
165e41f4b71Sopenharmony_ci
166e41f4b71Sopenharmony_ci  - 全量编译生成的hisysevent.zip文件可以通过以下命令获取:
167e41f4b71Sopenharmony_ci    
168e41f4b71Sopenharmony_ci     ```
169e41f4b71Sopenharmony_ci     cd 工程根目录的绝对路径
170e41f4b71Sopenharmony_ci     find out -name hisysevent.zip -type f
171e41f4b71Sopenharmony_ci     ```
172e41f4b71Sopenharmony_ci
173e41f4b71Sopenharmony_ci- 单文件编译:
174e41f4b71Sopenharmony_ci  也可以只编译单个组件的yaml文件,命令如下:
175e41f4b71Sopenharmony_ci
176e41f4b71Sopenharmony_ci  
177e41f4b71Sopenharmony_ci  ```
178e41f4b71Sopenharmony_ci  cd 工程根目录的绝对路径
179e41f4b71Sopenharmony_ci  ./build/ohos/hisysevent/gen_def_from_all_yaml.py --yaml-list <yaml file list> --def-path <file store directory>
180e41f4b71Sopenharmony_ci  ```
181e41f4b71Sopenharmony_ci
182e41f4b71Sopenharmony_ci    **表3** 单文件编译参数说明
183e41f4b71Sopenharmony_ci  
184e41f4b71Sopenharmony_ci  | 选项名称 | 描述 |
185e41f4b71Sopenharmony_ci  | -------- | -------- |
186e41f4b71Sopenharmony_ci  | --yaml-list | 指定需要编译的yaml文件路径列表,多个yaml文件路径之间用空格分隔。 |
187e41f4b71Sopenharmony_ci  | --def-path | 指定编译生成的hisysevent.zip文件的生成路径。 |
188e41f4b71Sopenharmony_ci
189e41f4b71Sopenharmony_ci
190e41f4b71Sopenharmony_ci### 打点及查询定义的事件
191e41f4b71Sopenharmony_ci
192e41f4b71Sopenharmony_ci1. 通过[hdc_std工具](../subsystems/subsys-toolchain-hdc-guide.md)将从hisysevent.zip解压的hisysevent.def文件推送至设备的/data/system/hiview/unzip_configs/sys_event_def/目录下。
193e41f4b71Sopenharmony_ci
194e41f4b71Sopenharmony_ci2. 触发yaml文件自定义的HiSysEvent事件完成打点,通过“[hisysevent -l](../subsystems/subsys-dfx-hisysevent-tool.md)”命令查询历史HiSysEvent事件,确认触发的自定义HiSysEvent事件是否打点成功。
195