
# 对接配置日志
#### 使用前提
对接日志系统，需要在csd.yaml文件中配置能力插件依赖功能声明，具体参考[服务包扩展目录](https://support.huaweicloud.com/devg-osc/osc_ss_0037.html) capabilitiesrequirements示例。
#### 对接原理
OSC内置了ops-operator插件，通过webhook的方式拦截标签匹配的工作负载（包括Deployment、StatefulSet或DaemonSet）资源，为其注入日志采集和上报功能，日志最终被采集上报至华为应用运维管理AOM。
如果需要对接日志系统，需要确保服务容器内部有输出日志文件，OSC服务会将日志文件挂载到外部供AOM采集上报，从而达到对接的效果。
#### 对接流程
1. 获取OSC规范开发的服务包，如果只有原生的helm或OperatorFramework包，可以参考章节[服务包转换](https://support.huaweicloud.com/devg-osc/osc_ss_0051.html#osc_ss_0051__section10383132654620)进行转换。
2. 在目录manifests/vendor下新增配置文件log_config.yaml 
   配置规则如下所示：
   ```
   apiVersion: osc.io/v1
   kind: LogConfig
   metadata:
     name: kafka-log
   spec:
     logConfigItems:
       - labelSelector:
           app.kubernetes.io/component: kafka
           app.kubernetes.io/version: "20.9.3"
         logPaths:
           - /var/kafka/
           - /var/kafka/access/kafka-access.log
   ```
   具体参数说明如下：
   
   | 参数名           | 含义      | 类型       | 是否必填 | 备注                                                                                                                                                                                     |
   |:---|:---|:---|:---|:---|
   | apiVersion    | 配置版本    | string   | 是    | 固定为osc.io/v1                                                                                                                                                                           |
   | kind          | 配置种类    | string   | 是    | 固定为LogConfig                                                                                                                                                                           |
   | metadata.name | 配置名     | string   | 否    | 日志配置默认名称 须知： 目前对于log_config.yaml文件，一个服务包内有且仅有一个，目前该名字没有实际业务意义。在服务包下发时会根据服务包名称等，由OSC自动生成一个在Kubernetes集群该Namespace下面唯一的名字。 |
   | labelSelector | 匹配实例的标签 | string数组 | 是    | 同一operator CRD下也可能存在多个工作负载，需要通过label selector与应用实例label相关联。 此label要求和用户需要对接日志的工作负载中的label字段完全匹配，从而保证ops应用可以扫描到并进行绑定日志                                     |
   | logPaths      | 日志路径或文件 | string数组 | 是    | 容器内日志路径，可填多个，但不允许存在包含关系。 日志内的路径支持目录和文件 目录：扫描此目录下的所有为log,out,trace结尾的日志并对接 文件：只对接指定的文件      |
      
   
   
3. 在manifests/xxx_csd.yaml文件中增加引用日志能力的配置。 
   ```
   apiVersion: osc.io/v1beta1
   kind: CustomServiceDefinition
   metadata:
     name: helmrelease-csd
   spec:
     CRDRef:
       apiVersion: apiextensions.k8s.io/v1
       kind: CustomResourceDefinition
     capabilityRequirements:
       - apiVersion: osc.io/v1
         kind: LogConfig
         defaultPath: vendor/log_config.yaml
   ```
   
   
4. 如下为一个具体的应用配置日志样例进行说明。 
   ```
   apiVersion: osc.io/v1
   kind: LogConfig
   metadata:
     name: hwfka-log
   spec:
     logConfigItems:
       ## 同一operator CRD下也可能存在多个工作负载,
       ## 需要通过label selector将应用实例与相应的ops配置相关联
       - labelSelector:
           osc.huawei.com/service_provider: hwfka
           osc.huawei.com/component: broker
         crd: hwfkas.osctest.huawei.com
         logPaths:
           - /opt/kafka/logs
       - labelSelector:
           osc.huawei.com/service_provider: hwfka
           osc.huawei.com/component: zookeeper
         crd: hwfkas.osctest.huawei.com
         logPaths:
           - /opt/kafka/logs
       - labelSelector:
           osc.huawei.com/service_provider: hwfka
           osc.huawei.com/component: kafkamanager
         crd: hwfkas.osctest.huawei.com
         logPaths:
           - /opt/cmak-3.0.0.5/logs
   ```
   
   
 
