
# 通过Sidecar采集日志
可通过hostpath-replacement将hostPath替换为CCI支持的emptyDir，通过pod-sidecars注入日志采集Sidecar，通过mount-stdlog-containers使日志采集Sidecar容器增加容器标准输出日志挂载。
#### 前提条件
通过Sidecar采集日志前，您需要先参考[配置Sidecar工具容器（动态注入）](https://support.huaweicloud.com/usermanual-cci2/cci_01_0128.html)章节配置Sidecar工具容器。
#### 约束与限制
"volume.cci.io/mount-stdlog-containers"和"volume.cci.io/mount-stdlog-containers-path"不支持同时配置。
#### 通过YAML创建
```
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    version: v1
    bursting.cci.io/burst-to-cci: enforce
  name: deploy-example
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deploy-example
      version: v1
  template:
    metadata:
      annotations:
        bursting.cci.io/hostpath-replacement: '[{"name":"log","policyType":"replaceByEmptyDir","emptyDir":{"sizeLimit":"10Gi"}}]'
        bursting.cci.io/pod-sidecars: '{"containers":[{"name":"log-sidecar","image":"fluent-bit:latest","resources":{},"volumeMounts":[{"name":"log","mountPath":"/tmp/log"}],"position":"tail"}]}'
        volume.cci.io/mount-stdlog-containers: log-sidecar #指定需要挂载容器标准输出日志的容器名
      labels:
        app: deploy-example
        version: v1
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        resources:
          limits:
            cpu: "1"
            memory: 2Gi
          requests:
            cpu: "1"
            memory: 2Gi
        volumeMounts:
        - mountPath: /tmp/log
          name: log
      imagePullSecrets:
        - name: default-secret
      volumes:
      - hostPath:
          path: /local/log
        name: log
```
通过以上方式配置，Sidecar工具容器可采集的日志可以分为以下两种：
- 标准输出。业务容器的标准输出日志会被挂载到/var/log/pods路径下，Sidecar可以以文件的方式收集业务容器的标准输出日志。

- 文件日志。业务容器将日志文件输出到和Sidecar共享的Volume中，Sidecar可以收集对应Volume内的文本文件。
表1关键参数Pod的注解说明 
| Pod的注解                                     | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                          | 示例值                                                                                                                                                                                                              |
|:---|:---|:---|:---|
| volume.cci.io/mount-stdlog-containers      | String | 1. 指定需要挂载容器标准输出日志的容器名，若有多个容器需要挂载则以逗号分隔。也可以配置"\*"表示所有容器都进行挂载。如果配置了"\*"则不可再配置其它容器名。  2. 匹配了该注解的容器，在启动后会将包含该Pod所有容器标准输出日志的目录挂载到容器内的/var/log/pods路径。   | 示例一： ``` "container-0,container-1" ``` 示例二： ``` "*" ```                                                                      |
| volume.cci.io/mount-stdlog-containers-path | String | 1. 以json格式指定需要挂载容器标准输出日志的容器名和容器内挂载路径。容器名配置"\*"表示所有容器都进行挂载。如果配置了"\*"则不可再配置其它容器名。  2. 匹配了该注解的容器，在启动后会将包含该Pod所有容器标准输出日志的目录挂载到配置指定的路径。               | 示例一： ``` "{\"container-0\":\"/var/log/pods\",\"container-1\":\"/tmp/log/pods\"}" ``` 示例二： ``` "{\"*\":\"/tmp/log/pods\"}" ``` |
   
