云容器引擎 CCE-容器日志:设置容器日志存储路径-使用kubectl

时间:2023-11-01 16:25:54

设置容器日志存储路径-使用kubectl

您可以通过在YAML定义的方式设置容器日志存储路径。

如下所示,使用EmptyDir挂载到容器的“/var/log/nginx”路径下,这样ICAgent就会采集容器“/var/log/nginx”路径下的日志。其中policy字段是CCE自定义的字段,能够让ICAgent识别并采集日志。

apiVersion: apps/v1kind: Deploymentmetadata:  name: testlog  namespace: defaultspec:  selector:    matchLabels:      app: testlog  template:    replicas: 1    metadata:      labels:        app: testlog    spec:      containers:        - image: 'nginx:alpine'          name: container-0          resources:            requests:              cpu: 250m              memory: 512Mi            limits:              cpu: 250m              memory: 512Mi          volumeMounts:            - name: vol-log              mountPath: /var/log/nginx              policy:                logs:                  rotate: ''      volumes:        - emptyDir: {}          name: vol-log      imagePullSecrets:        - name: default-secret

使用HostPath方法如下所示,相比EmptyDir就是volume的类型变成hostPath,且需要配置hostPath在主机上的路径。下面示例中将主机上“/tmp/log”挂载到容器的“/var/log/nginx”路径下,这样ICAgent就会采集容器“/var/log/nginx”路径下的日志,且日志还会在主机的“/tmp/log”路径下存储。

apiVersion: apps/v1kind: Deploymentmetadata:  name: testlog  namespace: defaultspec:  replicas: 1  selector:    matchLabels:      app: testlog  template:    metadata:      labels:        app: testlog    spec:      containers:        - image: 'nginx:alpine'          name: container-0          resources:            requests:              cpu: 250m              memory: 512Mi            limits:              cpu: 250m              memory: 512Mi          volumeMounts:            - name: vol-log              mountPath: /var/log/nginx              readOnly: false              extendPathMode: PodUID              policy:                logs:                  rotate: Hourly                  annotations:                    pathPattern: '**'                    format: ''      volumes:        - hostPath:            path: /tmp/log          name: vol-log      imagePullSecrets:        - name: default-secret
表2 关键参数解释

参数

中文解释

说明

extendPathMode

主机扩展路径

通过实例的ID或者容器的名称扩展主机路径,实现同一个主机路径下区分来自不同容器的挂载。

会在原先的“卷目录/子目录”中增加一个三级目录。使用户更方便获取单个Pod输出的文件。

  • None:不配置拓展路径。
  • PodUID:Pod的ID。
  • PodName:Pod的名称。
  • PodUID/ContainerName:Pod的ID/容器名称。
  • PodName/ContainerName:Pod名称/容器名称。

policy.logs.rotate

日志转储

此处日志转储是指日志的本地绕接。

  • 设置: AOM 每分钟扫描一次日志文件,当某个日志文件超过50MB时,会立即对其转储(转储时会在该日志文件所在的目录下生成一个新的zip文件。对于一个日志文件,AOM只保留最近生成的20个zip文件,当zip文件超过20个时,时间较早的zip文件会被删除),转储完成后AOM会将该日志文件清空。
  • 不设置:若您在下拉列表框中选择“不设置”,则AOM不会对日志文件进行转储。
说明:
  • AOM的日志绕接能力是使用copytruncate方式实现的,如果选择了设置,请务必保证您写日志文件的方式是append(追加模式),否则可能出现文件空洞问题。
  • 当前主流的日志组件例如Log4j、Logback等均已经具备日志文件的绕接能力,如果您的日志文件已经实现了绕接能力,则无需设置。否则可能出现冲突。
  • 建议您的业务自己实现绕接,可以更灵活的控制绕接文件的大小和个数。

policy.logs.annotations.pathPattern

采集路径

设置采集路径可以更精确的指定采集内容,当前支持以下设置方式:

  • 不设置则默认采集当前路径下.log .trace .out文件
  • 设置**表示递归采集5层目录下的.log .trace .out文件
  • 设置*表示模糊匹配

例子: 采集路径为/tmp/**/test*.log表示采集/tmp目录及其1-5层子目录下的全部以test开头的.log文件。

注意:

使用采集路径功能请确认您的采集器ICAgent版本为5.12.22或以上版本。

policy.logs.annotations.format

多行日志匹配

有些程序打印的日志存在一条完整的日志数据跨占多行(例如 Java 程序日志)情况,日志采集系统默认是按行采集。如果您想在日志采集系统中按整条显示日志,可以开启多行日志,采用时间或正则匹配的方式,当某行日志匹配上预先设置的时间格式或正则表达式,就认为是一条日志的开头,而下一个行首出现作为该条日志的结束标识符。

格式如下

{    "multi": {        "mode": "time",        "value": "YYYY-MM-DD hh:mm:ss"    }}

multi表示分行模式:

  • time:日志时间,请输入时间通配符。时间通配符填写参考示例:如日志中的时间是2017-01-01 23:59:59,按照规则应该填写:YYYY-MM-DD hh:mm:ss。
  • regular:正则模式,请输入正则表达式。
support.huaweicloud.com/usermanual-cce/cce_01_0018.html