-
Notifications
You must be signed in to change notification settings - Fork 0
mo ob 应用日志接入
对于日志的接入,我们主要使用的是[fluentbit的tail插件](https://docs.fluentbit.io/manual/pipeline/inputs/tail),采用使用白名单的方式,目前的日志接入方案暂时需要人工接入,我们可以针对 namespace
、pod name
进行过滤,目前,我们针对不同的日志进行了一个简单的划分:
- 将k8s的
namespace_name
定为service_name
,并作为tag新增到被采集的日志中 - 将k8s的
container_name
定为app_name
,并作为tag新增到被采集的日志中
注1:service_name和app_name本应该是在部署的时候填入到k8s deployment资源的label中,这里是先做试运行用,后续可以根据需要添加了label后修改fluentbit配置即可
注2:日志是根据service_name进行分表的,但目前mo对表名有限制!表名大小写不敏感且不能使用
-
,特请注意!mo-agent会将-
转化为_
fluentbit的tail插件采集日志的本质如其名,其实是监听文件并相当于使用tail
命令时刻获取其最新日志进行采集,fluentbit作为demonSet
的方式部署在k8s的每一个node上,而我们需要的日志就在每个node的/var/log
之中,系统日志已经在配置中配好,我们着重关注/var/log/containers/
下的应用容器日志文件:
[podname]_[namespace]_[containerName]_[id].log
每个日志文件以如上所示的命名规则被k8s保存,我们也可以利用此特性过滤筛选我们需要的日志
白名单接入可以让fluentbit只采集我们需要的日志,减少不必要的日志采集,只采集配置好的所需要的日志,但这么做的缺点是需要修改配置,这里以 cos 为例,假设现在我需要接入cos的日志,那么只需完成以下几步即可:
修改 [mo-agent chart 包](https://github.com/matrixone-cloud/observability/tree/main/charts/mo-agent-stack)中 mo.yaml
的 fluentbit 的配置:
$ curl https://raw.githubusercontent.com/matrixone-cloud/observability/main/charts/mo-agent-stack/mo.yaml?token=GHSAT0AAAAAAB3VBUHHS26HVJHZVP6VNIHSZAEHE6Q > ./mo.yaml
已知命名空间为cos
,当前试图采集该命名空间下所有pod的日志,在 fluent-bit.config.inputs
项下添加如下配置:
[INPUT]
Name tail
# 选择命名空间为cos的所有pod的所有容器的日志
Path /var/log/containers/*_cos_*.log
multiline.parser docker, cri, go
# kube.[****].* 填入自定义的tag做标识(保持kube.前缀)
Tag kube.cos.*
Mem_Buf_Limit 5MB
Skip_Long_Lines On
Refresh_Interval 10
也可以直接在Path后面使用逗号分隔:
Path /var/log/containers/*_cos_*.log, /var/log/containers/*_mo-cloud_*.log
# 此时tag建议直接用kube.*就行
Tag kube.*
假如我们只想要采集某个具体的pod的日志(eg. api-server),只需要将 Path
稍作修改即可(不需要写完整的pod name,可以用*正则替代一些字符),而Tag是自己加的,但请务必保持kube.
的前缀,因为后续有定义filter对kube.
开头的k8s日志进行统一处理,也可以不管直接用kube.*
Path /var/log/containers/api-server*_cos_*.log
Tag kube.cos.api-server.*
# or
Tag kube.*
进一步,只需要根据命名规则定义 Path
可以做到更精确的筛选
修改完成后,执行helm upgrade命令即可
$ helm upgrade mo-agent-stack . -n mo-ob -f ./test.yaml
上面的例子修改完后,可以看到已经生效
-
systemd
日志 -
syslog
日志 -
cos
、mo-cloud
、mo-system
的日志
黑名单接入则是
# for blacklist
[INPUT]
Name tail
Exclude_Path /var/log/containers/*fluent-bit*
Path /var/log/containers/*.log
multiline.parser docker, cri, go
Tag kube.*
Mem_Buf_Limit 5MB
Skip_Long_Lines On
Refresh_Interval 10
黑名单接入默认采集全部日志,使用 Exclude_Path
根据上述的命名规则剔除掉不想采集的日志文件即可,这里的例子是不采集fluentbit本身的日志