K8S上日志收集疑问
如果微服务运行在k8s上
生产日志格式是否使用json
日志输出到那里,本地文件?标准输入输出?
微服务如果使用deploment资源运行,没有持久化能力,会输出到本地吗?
日志打印
我看到zap日志打印的时候ts字段记录时间用的是秒数,可读性很差,线上出了问题,进行排查的时候会不会带来困难,如何解决
gin日志和zap日志
我看到gin打印的日志并不是json格式,能否将其统一集中收集
日志收集方式使用那种
- 在pod层收集:使用fluent-bit通过sidecar方式收集(此刻日志打印在何处)
- 在宿主机容器上收集:所有容器输入到标准输入输出的都会在docker日志目录上看到
如果可以麻烦您提供一下生产上处理方案
正在回答
生产环境一般采用json格式
gin本身实例化的时候有一个newdevelopment和newproduction两种方式实例化,这两种方式实例化的一个区别就是newproduction打印的日志是json格式newdevelopment是常见的文本格式,这点在课程中应该提到过
zap可以设置格式的输入是timestamp还是可视化格式,不过建议自己定制两种都显示,毕竟timestamp对于大数据来说很友好不用转换,所以可以两种格式都显示
k8s中日志的收集主要区别出来我们的日志其实有两种目的:1.有一些日志要给大数据中心采用进行分析,这些格式必须实现和大数据中心定义好, 而且写这种日志的时候一定是单独写一个日志文件,另一种日志就是便于我们平时分析问题的日志,这种日式是另一个文件,这种日志我们建议单独写,而且这些日志我们一般都是保存在elk或者loki中,elk由于有点重,我们公司目前k8s采用了loki,这些主要提供检索功能
k8s中如何区别这两种日志呢? 1. 大数据日志和自己的查询日志只要我们分离好了,那么我们可以让k8s云团队自己写函数hook住我们启动的时候读取环境变量,比如LOGPATH,这样k8s管理人员就知道了我们的日志写入到哪里了,这里写入日志也是要区别的,比如大数据的日志一定是写文件的(落盘),但是我们自己的elk查询日志就可以有两种选择:1. 写日志文件(落盘) 2. 输出到std,不写文件,这两种方式都可以,不过写文件你如果采用了日志文件,那么可能日志过大,导致k8s容器的磁盘不足然后程序挂掉,不过这个时候k8s会去重启,这样你的容器又是新的,你的日志文件就又从0开始,之前的已经同步到elk就么问题,如果有一部分没来得及同步过去就丢失了
elk的日志也可以直接写console,这样k8s也能监控到并同步到loki,但是console输出快到一定程度的时候可能会来不及收集
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星