Skip to content

mo ob 应用日志接入

EZ4BRUCE edited this page Mar 8, 2023 · 1 revision

对于日志的接入,我们主要使用的是[fluentbit的tail插件](https://docs.fluentbit.io/manual/pipeline/inputs/tail),采用使用白名单的方式,目前的日志接入方案暂时需要人工接入,我们可以针对 namespacepod name 进行过滤,目前,我们针对不同的日志进行了一个简单的划分:

  1. 将k8s的namespace_name定为service_name,并作为tag新增到被采集的日志中
  2. 将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保存,我们也可以利用此特性过滤筛选我们需要的日志

image

白名单接入 [ 当前 ]

白名单接入可以让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

上面的例子修改完后,可以看到已经生效

image

当前已经默认接入的日志

  1. systemd日志
  2. syslog日志
  3. cosmo-cloudmo-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本身的日志

Clone this wiki locally