
# 日志上报LTS
#### 约束与限制
在使用LTS服务前，需要先购买LTS的VPCEP。购买时在"云服务"一栏搜索并选择"LTS"相关云服务，具体操作请参见[如何在VPCEP控制台创建终端节点？](https://support.huaweicloud.com/lts_faq/lts_faq_0084.html)
#### 应用场景
云日志服务（Log Tank Service，简称LTS）通过海量日志数据的分析与处理，可以将云服务和应用程序的可用性和性能最大化，CCI 2.0支持将pod内的日志上报到云日志服务LTS。
#### 通过控制台界面创建无状态负载对接LTS
1. 登录[云容器实例 CCI2.0](https://console.huaweicloud.com/cci2.0/?#/cci/cluster/list)控制台。
2. 左侧导航栏中选择"负载管理 \> 无状态负载"，单击"创建工作负载"。
3. 添加基础配置。
4. 添加容器配置。一个Pod可以包含一个或多个运行不同镜像的容器，通常情况下一个Pod中只有一个容器，如果您的应用程序需要多个容器，请添加容器。
5. 选择升级策略。
6. 将容器日志投递至云日志服务（LTS）进行集中管理，请勾选"日志对接LTS"，并参考[表1]完成相关配置。
   
    表1日志对接LTS 
   | 参数   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   |:---|:---|
   | 日志组  | 选择日志所属的逻辑分组。可选择已有日志组，或单击"创建日志组"新建。 说明： 日志组名称不能与其他日志组名称或原始名称相同。只支持输入英文、数字、中文、中划线、下划线及小数点，且不能以小数点、下划线开头或以小数点结尾。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 日志流  | 选择日志组中具体的日志流（日志存储的基本单位）。可选择已有日志流，或单击"创建日志流"新建。 说明： 只支持输入英文、数字、中文、中划线、下划线及小数点，且不能以小数点、下划线开头或以小数点结尾。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 策略名称 | 自定义日志采集策略名称，用于识别本次日志采集规则。 说明： 名称由小写字母、数字和横线（-）组成，且必须以字母或数字开头和结尾，最长支持63个字符                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 日志类型 | - 容器标准输出：采集容器在运行过程中打印到标准输出或标准错误的日志。  - 容器日志文件：采集容器内部指定日志文件的内容。 说明： - 路径配置最多支持添加20个日志目录。  - 重复的路径配置只生效一次日志目录，请填写绝对路径。  - 日志文件名，不支持.gz .tar .zip 后缀类型。  - 最多有三级目录采用通配符匹配，且第一级目录不能使用通配符。目录名和文件名支持完整名称和通配符模式，通配符只支持星号（\*）和半角问号（?）。星号（\*）表示匹配多个任意字符。半角问号（?）表示匹配单个任意字符。      |
   | 日志格式 | - 单行文本：每条日志仅包含一行文本，以换行符 \\n 作为各条日志的分界线。  - 多行文本：每条日志可能横跨多行文本，采用首行正则的方式进行匹配，当选择多行文本时，需填写日志匹配格式。                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
      
   
   
7. 配置完成后，单击"创建工作负载"。 
   在负载列表中，待负载状态为"运行中"，负载创建成功。您可以单击负载名进入负载详情界面，刷新负载状态。
   
   
8. 等待负载变为运行中状态，单击"日志"查看Pod上报的日志。 
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002625037195.png "点击放大")
   
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002594597606.png "点击放大")
   
   
   
 
#### 通过YAML创建无状态负载对接LTS
1. 登录[LTS控制台](https://console.huaweicloud.com/lts/#/cts/manager/groups)，创建日志组。
   
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002535788457.png "点击放大")
   
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002535868507.png)
   
   
   
2. 在创建出的日志组下创建日志流。 
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002535788459.png "点击放大")
   
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002535868509.png)
   
   
   
3. 登录[云容器实例 CCI2.0](https://console.huaweicloud.com/cci2.0/?#/cci/cluster/list)控制台。
4. 在左侧导航栏中选择"负载管理"，选择"无状态负载"并单击"YAML创建"。 
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002211495756.png "点击放大")
   
   
   
5. YAML示例如下： 
   如果是初次使用，建议不使用regulation正则匹配，后续根据需要再使用。
   ```
   apiVersion: cci/v2
   kind: Deployment
   metadata:
     name: test
   spec:
     replicas: 1
     selector:
       matchLabels:
         app: test
     template:
       metadata:
         annotations:
           logconf.k8s.io/fluent-bit-log-type: lts      # 日志上报类型
           logconfigs.logging.openvessel.io: "{\"default-config\":{\"container_files\":{\"container-0\":\"stdout.log;\/root\/out.log;\/data\/emptydir-volume\/*.log\"},\"lts-log-info\":{\"349b50f7-f6ba-4768-86f9-e7f84ab677c0\":\"8a9e0589-c3b5-4ed1-b8cd-1e8a54612d0e\"}}}"  # 日志上报配置
         labels:
           app: test
       spec:
         containers:
         - image: centos:latest
           command: ['sh', '-c', "while true; do echo hello; touch /root/out.log; echo hello >> /root/out.log; touch /data/emptydir-volume/emptydir.log; echo hello >> /data/emptydir-volume/emptydir.log; sleep 10; done"]     # 模拟日志写入
           volumeMounts:
           - name: emptydir-volume
             mountPath: /data/emptydir-volume
           - name: emptydir-memory-volume
             mountPath: /data/emptydir-memory-volume
           name: container-0  # 容器名称 (container-0)和上方logconfigs.logging.openvessel.io参数中的值保持一致
           resources:
             limits:
               cpu: 100m
               memory: 100Mi
             requests:
               cpu: 100m
               memory: 100Mi
         volumes:
         - name: emptydir-volume
           emptyDir: {}
         - name: emptydir-memory-volume
           emptyDir:
             sizeLimit: 1Gi
             medium: Memory
     strategy:
       type: RollingUpdate
       rollingUpdate:
         maxSurge: 1
         maxUnavailable: 0
   ```
   annotation中"logconfigs.logging.openvessel.io"为日志上报相关的各类配置项，为json形式，各字段介绍如下：
   ```
   {
       "default-config": { // 配置名称，可自定义名称
           "container_files": { // 支持设置多个容器的日志收集路径（stdout.log表示标准输出，/root/out.log表示rootfs（包含挂卷）下文本日志，/data/emptydir-xxx/*.log表示rootfs（包含挂卷）下文本目录）
               "container-0": "stdout.log;/root/out.log;/data/emptydir-volume/*.log",
               ...
           },        
           "lts-log-info": { // 仅支持设置单个日志组和日志流
               "f938a11a-678e-4631-80a0-3667be1280f7": "a248c18b-61ed-4de2-8f7f-c042b78bb0fd" // 日志组id：日志流id
           }
       },
       "other-config": { // 支持多配置
           ...
       }
   }
   ```
   
   
6. 等待负载变为运行中状态，单击"日志"查看Pod上报的日志。 
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002535788461.png "点击放大")
   
   ![](https://support.huaweicloud.com/bestpractice-cci2/zh-cn_image_0000002535868511.png "点击放大")
   
   
   
 
