You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by GitBox <gi...@apache.org> on 2022/01/22 09:01:36 UTC

[GitHub] [apisix] jagerzhang edited a comment on pull request #6181: feat: support to log custom labels of route by default

jagerzhang edited a comment on pull request #6181:
URL: https://github.com/apache/apisix/pull/6181#issuecomment-1019114669


   > This PR is to log some data without changing the file format. Is it different?
   
   日志格式有两种定义方式:`通过log_format自定义日志格式` 或 `直接使用APISIX的默认全日志格式`,我说下两种日志方式的个人见解:
   
   ## 自定义日志格式
   这个模式,需要用户自定义log_format。我觉得这个场景有2个难点:
   - 如何通过log_format来实现和默认全日志(full log)一样的日志内容?这个之前求助过,实际没有结论;
   - log_format 一旦定义就是静态的设置,后续如果APISIX的日志格式有所优化,得通过修改log_format来更新;
   
   比如space小哥这里提的优化:https://github.com/apache/apisix/pull/6163 支持用户自定义日志格式,也能够记录路由里面`具体`的路由标签,用这个方法除了有上述难点之外,这个方法记录的路由标签也是固定不变的,如果路由标签新增了其他keyword,将不会被记录,需要重新定义日志格式,增加了运维复杂度。
   
   总体来说,这种方式的上手门槛和运维成本较高,所以我们没有选择这个方式。
   
   ## 默认的全日志格式(通过 `log_util.get_full_log(conf, ctx)` 生成)
   这个模式,不需要用户自定义日志就能得到非常全面的日志格式,没有上手门槛和运维成本,前面我还提了个PR进一步支持了记录多阶段延迟字段(https://github.com/apache/apisix/pull/6063)。从生成函数名称(get_full_log)来看,官方也是将其称为APISIX全日志,既然是全日志,那路由里面的自定义labels是不是也应该支持记录进去?可以看到,我对`kafka-logger`的修改也只是将路由自定义的labels放到了`get_full_log`逻辑块里面,并没有污染到其他自定义日志的场景。
   
   ## 最后,我说下我们为什么需要这个自定义标签
   前面我也提交了相关issue: https://github.com/apache/apisix/issues/5998 我们是想通过在路由里面定义标签,实现和生产业务的关联关系,这样做的好处很多,比如后续网关用户可以在网关服务门户能快速提取具体路由对应的请求日志,而不需要到日志里面去进行复杂的索引(我们目前正在将APISIX包装成一站式的七层接入服务),再比如可以快速聚合分析各业务、应用的请求流量,更准确的将告警送达到具体业务等等,而不需要通过复杂的域名和路由组合条件来关联到具体业务。
   
   以上就是我这边的一些理解和说明,如果讲得不对请指正。如果确实觉得这个自定义标签不适合默认添加到全日志当中,是否可以改成通过插件的配置来自定义开启这个记录?当然,如果都觉得不合理,那我们只能单独维护 `kafka-logger.lua` 这个文件来实现这个功能了。


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@apisix.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org