
# 配置API的Kafka日志推送
Kafka日志推送策略提供了把API的详细调用日志推送到Kafka的能力，方便用户获取API的调用日志信息。
![](https://support.huaweicloud.com/usermanual-apig/public_sys-resources/note_3.0-zh-cn.png)
如果此策略在当前实例中不支持，可[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)升级实例到最新版本。
#### 约束与限制
- 同一个环境中，一个API只能被一个Kafka日志推送策略绑定，但一个Kafka日志推送策略可以绑定多个API。
- 同一个APIG实例内最多可创建5个Kafka日志推送策略。如需调整配额，请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)，申请修改。
- API绑定Kafka日志推送策略后，性能将损耗30%。性能数据请参考[产品规格差异](https://support.huaweicloud.com/productdesc-apig/apig-specifications.html)。
- 日志支持最大推送大小为4K，请求体/响应体支持最大推送大小为1K，超出部分会被截断。
- 当消息中的请求体大小超过配置项kafka_log_plugin_options的request_body_size时，字段的值会被截断（超过request_body_size的部分被截断）；当消息中的响应体大小超过kafka_log_plugin_options的response_body_size时，字段的值会被截断（超过response_body_size的部分被截断）。
- 推送的日志信息中，响应数据暂不支持Transfer Encoding响应头参数。
- 推送的日志信息中，请求Body和响应Body信息是按UTF-8编码方式计算字节长度。
- 策略和API本身相互独立，只有为API绑定策略后，策略才对API生效。为API绑定策略时需指定发布环境，策略只对指定环境上的API生效。
- API的下线操作不影响策略的绑定关系，再次发布后仍然会带有下线前绑定的策略。
- 如果策略与API有绑定关系，则策略无法执行删除操作。
 
#### 创建Kafka日志推送策略
1. 进入[API网关控制台](https://console.huaweicloud.com/apig2/#/overview)页面。
2. 根据实际业务在左侧导航栏上方选择实例。

3. 在左侧导航栏选择"API管理 \> API策略"。
4. 在"策略管理"页面，单击"创建策略"。
5. 在"选择策略类型"弹窗中，选择"插件策略 \> Kafka日志推送"。
6. 在"创建策略"弹窗中，根据下表参数说明，配置策略信息。 
   表1Kafka日志推送参数说明 
   | 参数         | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   |:---|:---|
   | 策略名称       | 填写策略的名称，根据业务规划自定义。建议您按照一定的命名规则填写策略名称，方便您快速识别和查找。 支持中文、英文、数字、下划线，且只能以英文或中文开头，长度为3\~255个字符。                                                                                                                                                                                                                                                                                                                          |
   | 策略类型       | 固定为"Kafka日志推送"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 描述         | 填写策略的描述信息。长度为1\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 策略内容       | 策略的配置内容，支持表单配置和脚本配置两种方式。                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | **策略基本信息**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ||
   | Broker地址   | 填写目标Kafka的连接地址，建立连接关系。多个地址间以英文逗号（,）隔开。                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | Topic主题    | 填写目标Kafka上报日志的主题。                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | Key        | 填写日志的Key值，表示日志存储在Kafka的指定分区，可以当成有序消息队列使用。如果Key为空，则日志分布式存储在不同的消息分区。                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 失败重试分配     | 日志推送到Kafka失败后的重试配置。 - 重试次数：失败后的重试次数，范围为0\~5次。  - 重试间隔时间：失败后的重试时间间隔，范围为1\~10秒。                                                                                                                                                                                                        |
   | **SASL配置信息**                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ||
   | 安全协议       | 连接目标Kafka所使用的安全协议。 - PLAINTEXT：默认接入点的用户认证协议。  - SASL_PLAINTEXT：SASL用户认证协议。  - SASL_SSL：SSL用户认证协议。                                                                                                                               |
   | 消息收发机制     | 目标Kafka的消息收发机制，默认为PLAIN。                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | SASL用户名    | **仅当"安全协议"选择"SASL_PLAINTEXT"或"SASL_SSL"时需配置。** SASL或SSL认证所使用的用户名。                                                                                                                                                                                                                                                                                                                                                                               |
   | SASL用户密码   | **仅当"安全协议"选择"SASL_PLAINTEXT"或"SASL_SSL"时需配置。** SASL或SSL认证所使用的用户密码。                                                                                                                                                                                                                                                                                                                                                                               |
   | 确认SASL用户密码 | **仅当"安全协议"选择"SASL_PLAINTEXT"或"SASL_SSL"时需配置。** 填写与SASL用户密码一样的值。                                                                                                                                                                                                                                                                                                                                                                                 |
   | 证书内容       | **仅当"安全协议"选择"SASL_SSL"时需配置。** SSL认证所使用的CA证书内容。                                                                                                                                                                                                                                                                                                                                                                                                   |
   | **元数据配置信息**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ||
   | 系统元数据      | 推送的日志中，需要携带的系统字段信息。 其中，start_time、request_id、client_ip、request_time、http_status、scheme、request_method、host、uri、upstream_addr、upstream_status、upstream_response_time、http_x_forwarded_for、http_user_agent和error_type字段信息默认在日志中携带，其他系统字段需勾选后才携带。                                                                                                                                                                                                  |
   | 请求数据       | 推送的日志中，需要携带的API请求信息。 - 日志包含请求头域信息：勾选后，需填写日志中要携带的请求Header参数。多个字段间使用英文逗号（,）分隔，支持使用\*进行通配设置。  - 日志包含请求QueryString信息：勾选后，需填写日志中要携带的请求Query参数信息。多个字段间使用英文逗号（,）分隔，支持使用\*进行通配设置。  - 日志包含请求Body体信息：勾选后，日志中会携带API请求的Body体信息。   |
   | 响应数据       | 推送的日志中，需要携带的API响应信息。 - 日志包含响应头域信息：勾选后，需填写日志中要携带的响应Header参数。多个字段间使用英文逗号（,）分隔，支持使用\*进行通配设置。  - 日志包含响应Body体信息：勾选后，日志中会携带响应Body体信息。                                                                                                                                                  |
   | 自定义认证配置    | 推送的日志中，需要携带的自定义认证信息。 - 前端：填写日志中要携带的前端自定义认证的响应字段信息，多个字段间使用英文逗号（,）分隔。  - 后端：填写日志中要携带的后端自定义认证的响应字段信息，多个字段间使用英文逗号（,）分隔。                                                                                                                                                                     |
      
   
   
7. 单击"确定"。 
   - 在策略列表中显示已创建的策略，表示策略创建成功。
   
   - 如果您需要复制已创建的策略，请在已创建策略的"操作"列中单击"克隆"配置参数即可。**克隆策略的名称不能与已创建的策略名称重复。**
   
   
   
   
8. 策略创建后，您还需要[为策略绑定API]，才能使策略对API生效。
   
   **策略的绑定、解绑、更新会实时生效，不需要重新发布API。**
   
   
 
 #### 为策略绑定API
1. 单击策略名称，进入策略详情。
2. 在API列表区域选择环境后，单击"绑定API"。
3. 筛选API分组以及发布环境，勾选所需的API。 
   支持通过API名称或标签筛选API，标签为创建API时定义的标签。
   
   
4. 单击"确定"，绑定完成。 
   - 如果单个API不需要绑定此策略，单击API所在行的"解绑"。
   
   - 如果批量API不需要绑定此策略，则勾选待解绑的API，单击列表上方"解绑"。最多同时解绑1000个API。
   
   
   
   
 
#### 相关文档
如果您希望通过API创建Kafka日志推送策略，请参考[创建插件](https://support.huaweicloud.com/api-apig/CreatePlugin.html)。
