Logconfig

namespace级别CRD,表示一个日志采集任务,用于采集Pod容器日志。

Example

直接定义sink/interceptor方式

  1. apiVersion: loggie.io/v1beta1
  2. kind: LogConfig
  3. metadata:
  4. name: tomcat
  5. namespace: default
  6. spec:
  7. selector:
  8. type: pod
  9. labelSelector:
  10. app: tomcat
  11. pipeline:
  12. sources: |
  13. - type: file
  14. name: common
  15. paths:
  16. - stdout
  17. sink: |
  18. type: dev
  19. printEvents: false
  20. interceptors: |
  21. - type: rateLimit
  22. qps: 90000

引用sink和interceptor方式

  1. apiVersion: loggie.io/v1beta1
  2. kind: LogConfig
  3. metadata:
  4. name: nginx
  5. namespace: default
  6. spec:
  7. selector:
  8. type: pod
  9. labelSelector:
  10. app: nginx
  11. pipeline:
  12. sources: |
  13. - type: file
  14. name: mylog
  15. paths:
  16. - stdout
  17. sinkRef: default
  18. interceptorRef: default

spec.selector

表示Pipeline配置适用的范围,可以选择采集一批Pods的日志

type: pod

采集Pods日志

字段类型是否必填默认值含义
labelSelectormap必填通过该label来匹配Pods,支持使用来匹配所有的value,比如app: ‘

Example

  1. spec:
  2. selector:
  3. type: pod
  4. labelSelector:
  5. app: nginx

表示采集该namespace下的带有label app: nginx的所有Pods日志。

Warning

type: pod时,下面的Pipeline只支持使用file source,此时的场景只能是采集日志。

cluster

字段类型是否必填默认值含义
clusterstring非必填“”表示配置指定下发的Loggie集群。当部署多套Loggie时,和全局系统配置discovery.kubernetes.cluster配套使用

spec.pipeline

表示一个Pipeline,不支持填写多个Pipeline。

和在配置文件中Pipelines的区别在:

  • sources为实际为string,在yaml中使用表示保留换行符
  • 没有sink,只有sinkRef,表示引用的Sink CRD实例
  • 没有interceptors,只有interceptorRef,表示引用的Interceptor CRD实例

sources

在LogConfig中,如果type: podfile source新增几个专门针对容器化的参数:

字段类型是否必填默认值含义
containerNamestring非必填表示指定采集的容器名称,建议在Pod里包含多个容器时填写
excludeContainerPatternsstring数组非必填排除的容器名称,使用正则表达式形式

sources.matchFields

非必填, 将Pod中的信息加入到Fields中

字段类型是否必填默认值含义
labelKeystring数组非必填指定增加的Pod上的Label Key值,比如Pod上包含Label: app: demo,此处填写labelKey: app,此时会将Pod上的app: demo label增加到file source fields中,采集到的日志会被加上该label信息。适用于匹配的Pod的label存在不一致的场景。支持配置为”“的方式获取所有的label
annotationKeystring数组非必填和上面labelKey类似,注入的为Pod Annoatation的值,支持配置为”“的方式获取所有的annotation
envstring数组非必填和上面labelKey类似,注入的为Pod Env环境变量的值,支持配置为”*”的方式获取所有的env
reformatKeys非必填重新格式化key
reformatKeys.labelfmt参数数组非必填重新格式化label key
reformatKeys.annotationfmt参数数组非必填重新格式化annotation key
reformatKeys.envfmt参数数组非必填重新格式化env key

fmt参数

字段类型是否必填默认值含义
regexstring非必填匹配的正则表达式
replacestring非必填重新渲染的格式

reformatKeys

假设pod labels为aa.bb/foo=bar 配置reformatKeys如下:

  1. matchFields:
  2. reformatKeys:
  3. label:
  4. - regex: aa.bb/(.*)
  5. replace: pre-${1}

最终添加到日志的元信息为:pre-foo=bar

Example

  1. apiVersion: loggie.io/v1beta1
  2. kind: LogConfig
  3. metadata:
  4. name: nginx
  5. namespace: default
  6. spec:
  7. selector:
  8. type: pod
  9. labelSelector:
  10. app: nginx
  11. pipeline:
  12. sources: |
  13. - type: file
  14. name: mylog
  15. containerName: nginx
  16. matchFields:
  17. labelKey: ["app"]
  18. paths:
  19. - stdout

interceptors

字段类型是否必填默认值含义
interceptorsstring非必填表示该Pipeline的interceptor,使用方式和以上sources类似

sink

字段类型是否必填默认值含义
sinkstring非必填表示该Pipeline的sink,使用方式和以上的sources类似

如果你希望sink和interceptor可以在不同的ClusterLogConfig/LogConfig间复用,则可以使用以下ref的方式:

sinkRef

字段类型是否必填默认值含义
sinkRefstring非必填表示该Pipeline引用的Sink CR

interceptorRef

字段类型是否必填默认值含义
interceptorRefstring非必填表示该Pipeline引用的Interceptor CR