更新时间:2024-10-28 GMT+08:00

配置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日志推送策略

  1. 登录ROMA Connect控制台,在“实例”页面单击实例上的“查看控制台”,进入实例控制台。
  2. 在左侧的导航栏选择“服务集成 APIC > API策略”,在“策略管理”页签下单击“创建策略”。
  3. 在选择策略类型弹窗中选择“插件策略 > Kafka日志推送”。
  4. 在配置策略弹窗中配置插件策略信息。
    表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体信息。

    自定义认证配置

    推送的日志中,需要携带的自定义认证信息。

    • 前端:填写日志中要携带的前端自定义认证的响应字段信息,多个字段间使用英文逗号(,)分隔。
    • 后端:填写日志中要携带的后端自定义认证的响应字段信息,多个字段间使用英文逗号(,)分隔。
  5. 单击“确定”,完成插件策略的创建。

    插件策略创建后,您还需要为API绑定插件策略,才能使插件策略对API生效。

为API绑定插件策略

  1. 在“策略管理”页签右上角的过滤条件中选择“Kafka日志推送”。
  2. 在页面中单击策略的名称,进入策略详情页面。
  3. 在“关联API”下选择要绑定API的环境,然后单击“绑定API”。
  4. 在绑定API弹窗中,勾选要绑定策略的API。

    您可以通过指定API分组和API名称,筛选所需API。

  5. 单击“确定”,完成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": []
      }
    }
  }
}