云容器引擎 CCE-通过ICAgent采集容器日志(不推荐):YAML示例(ICAgent)

时间:2024-05-31 08:37:30

YAML示例(ICAgent)

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

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: testlog
  namespace: default
spec:
  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/v1
kind: Deployment
metadata:
  name: testlog
  namespace: default
spec:
  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_10_0018.html