配置Kafka日志推送策略
ROMA Connect支持通过插件策略的方式,为API提供灵活的扩展能力。Kafka日志推送策略提供了把API的详细调用日志推送到Kafka的能力,方便用户获取API的调用日志信息。
插件策略和API本身相互独立,只有为API绑定插件策略后,插件策略才对API生效。为API绑定插件策略时需指定发布环境,插件策略只对指定环境上的API生效。
约束与限制
- 同一个API在同一个环境中只能绑定一个相同类型的插件策略,已被API绑定的插件策略无法删除。
- 同一个ROMA Connect实例内最多可创建5个Kafka日志推送策略。
- 推送的日志信息中,响应数据暂不支持Transfer Encoding响应头参数。
- 消息中的请求体字段和响应体字段大小受到kafka_log_plugin_options中request_body_size和response_body_size的限制,当超过对应限制值时,对应字段会被截断。
- 推送的日志信息中,请求Body和响应Body信息是按UTF-8编码方式计算字节长度。
创建Kafka日志推送策略
- 登录ROMA Connect控制台,在“实例”页面单击实例上的“查看控制台”,进入实例控制台。
- 在左侧的导航栏选择“服务集成 APIC > API策略”,在“策略管理”页签下单击“创建策略”。
- 在选择策略类型弹窗中选择“插件策略 > Kafka日志推送”。
- 在配置策略弹窗中配置插件策略信息。
表1 策略配置 参数
说明
策略名称
填写策略的名称,根据规划自定义。建议您按照一定的命名规则填写策略名称,方便您快速识别和查找。
策略类型
固定为“Kafka日志推送”。
可见范围
选择策略的可见范围。
- 集成应用:策略归属某个集成应用,仅拥有该集成应用权限的用户可查看和使用该策略。
- 全局:当前实例的所有用户都可查看和使用该策略。
集成应用
仅当“可见范围”选择“集成应用”时需要配置。
选择策略所属的集成应用。若没有可用的集成应用,可单击右侧的“新建集成应用”,创建一个集成应用。
描述
填写策略的描述信息。
策略内容:支持表单模式和脚本模式两种方式,脚本模式配置请参见脚本配置示例。
策略基本信息
Broker地址
日志要推送的目标Kafka连接地址列表,多个地址间以英文逗号(,)隔开。
Topic主题
日志要推送的目标Kafka Topic名称。
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或SSL认证所使用的用户密码,与“SASL用户密码”保持一致。
证书内容
仅当“安全协议”选择“SASL_SSL”时需配置。
SSL认证所使用的CA证书内容。
元数据配置信息
系统元数据
推送的日志中,需要携带的系统字段信息。
其中,start_time、request_id、client_ip、request_time、http_status、scheme、request_method、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体信息。
自定义认证配置
推送的日志中,需要携带的自定义认证信息。
- 前端:填写日志中要携带的前端自定义认证的响应字段信息,多个字段间使用英文逗号(,)分隔。
- 后端:填写日志中要携带的后端自定义认证的响应字段信息,多个字段间使用英文逗号(,)分隔。
- 单击“确定”,完成插件策略的创建。
插件策略创建后,您还需要为API绑定插件策略,才能使插件策略对API生效。
脚本配置示例
{ "broker_list": [ "10.10.10.10:81", "10.10.10.11:82", "10.10.10.12:83" ], "topic": "Topic-test", "key": "aaa", "max_retry_count": 0, "retry_backoff": 1, "sasl_config": { "security_protocol": "PLAINTEXT", "sasl_mechanisms": "PLAIN", "sasl_username": "", "sasl_password": "", "ssl_ca_content": "" }, "meta_config": { "system": { "start_time": true, "request_id": true, "client_ip": true, "api_id": false, "user_name": false, "app_id": false, "request_time": true, "http_status": true, "server_protocol": false, "scheme": true, "request_method": true, "host": false, "api_uri_mode": false, "uri": false, "request_size": false, "response_size": false, "upstream_uri": false, "upstream_addr": true, "upstream_status": true, "upstream_connect_time": false, "upstream_header_time": false, "upstream_response_time": true, "http_x_forwarded_for": true, "http_user_agent": true, "error_type": true, "access_model1": false, "access_model2": false, "inner_time": false, "proxy_protocol_vni": false, "proxy_protocol_vpce_id": false, "proxy_protocol_addr": false, "body_bytes_sent": false, "api_name": false, "app_name": false, "provider_app_id": false, "all_upstream_response_time": false, "region_id": false, "auth_type": false, "response_source": false, "provider_app_name": false, "custom_data_log01": false, "custom_data_log02": false, "custom_data_log03": false, "custom_data_log04": false, "custom_data_log05": false, "custom_data_log06": false, "custom_data_log07": false, "custom_data_log08": false, "custom_data_log09": false, "custom_data_log10": false }, "call_data": { "log_request_header": true, "request_header_filter": "aaa", "log_request_query_string": true, "request_query_string_filter": "bbb", "log_request_body": true, "log_response_header": true, "response_header_filter": "ccc", "log_response_body": true, "custom_authorizer": { "frontend": [], "backend": [] } } } }