有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
本文介绍云原生 API 网关 Kong 如何将请求日志上报到 Ckafka 或自建 Kafka 。

操作场景

提供自建的 Kafka 以及对应的 topic 或使用腾讯云 Ckafka 产品, 根据下述操作,就可以将云原生 API 网关的流量日志落盘到该 Kafka 实例上。

操作步骤

1. 安装最新版本 tse-kafka-log 插件。 微服务引擎 Kong 控制台,选择需要的网关实例,单击插件管理 > 系统插件
如果已经安装,可以忽略此步骤。


2. 进入云原生 API 网关的 Kong 实例的基本信息 > Konga 控制台,查看 Kong 管理控制台地址并进入。



3. 进入 Kong 管理控制台页面后,单击侧边导航栏 SERVICES,选择需要的 service 并进入详情页。



4. 选择 Plugins 并单击 Add Plugin,在 Other 栏中选择添加 Tse Kafka Log。



5. 填写 kafka server 地址以及 topic,其中 bootstrap servers 填写 kafka 的 server 地址,topic 是 kafka 的 topic 名字。
注意:
1. topic 是填写 topic 的名字,而不是 ID。
2. 插件配置的详细字段说明,在步骤7中。



6. 该插件绑定 service 后,请求 service,消费 kafka 后可以查看消费到当前请求的日志内容(json 格式)。






7. ts
e-kafka-log 插件配置字段详细说明

注意:
在 Konga 的页面中,配置项键的_会被隐藏掉,例如:bootstrap_servers 会显示为 bootstrap servers。
配置项键
是否必填
默认值
说明
bootstrap_servers
数组,一般的 bootstrap_servers 地址是9092端口,例如:10.0.90.16:9092
topic
topic 的名字,而不是 ID
max_body_size
8192
请求和响应的最大 body 大小,超过此大小的 body 会被截断
log_req_body
false
是否打印请求 body
log_res_body
false
是否打印响应 body
base64_req_body_encoding
数组。当请求 Header:content-encoding 符合其中一个,会把请求的 body进行 base64 encode
base64_res_body_encoding
数组。当响应 Header:content-encoding 符合其中一个,会把响应的 body进行 base64 encode
log_req_headers
true
是否打印请求 headers
log_res_headers
true
是否打印响应 headers
exclude_req_headers
数组。打印请求 headers 中,删除指定的 header
exclude_res_headers
数组。打印响应 headers 中,删除指定的 header
skip_expr_in_access
高级,在 access 阶段运行一个 lua 代码,判断是否跳过打印日志。return true 就是跳过
skip_expr_in_body_filter
高级,在 body filter 阶段运行一个lua代码,判断是否跳过打印日志。return true 就是跳过
http_log_mode
default
default/close/custom。default 为内置的日志字段,close 为关闭日志,custom 为自定义日志
http_log_custom_format
{}
七层自定义的日志格式。例如{"cip": "$remote_addr", "host": "$host"},跟 CLS 日志保持一致
stream_log_mode
default
default/close/custom。default 为内置的日志字段,close 为关闭日志,custom 为自定义日志
stream_log_custom_format
{}
四层自定义的日志格式。例如{"cip": "$remote_addr", "protocol": "$protocol"},跟 CLS日 志保持一致
batch_size
100
消息缓存队列长度,默认100
retry_count
3
消息发送重试次数,失败时候会重试
flush_timeout
2000
发送的超时时间,单位 ms
compressor
Lz4
消息压缩算法,默认用 Lz4

参考

更多相关说明请参见 Kong 插件文档