一、概述
DataKit 通過 Kubernetes Custom Resource Definition (CRD) 提供了一種聲明式的容器日誌採集配置方式。用户可以通過創建 ClusterLoggingConfig 資源來自動配置 DataKit 的日誌採集,無需手動修改 DataKit 配置文件或重啓 DataKit,同樣也無需重啓業務。
二、前置條件
- Kubernetes 集羣版本 1.16+
- DataKit Version-1.84.0 或更新版本
- 集羣管理員權限(用於註冊 CRD)
三、採集流程
1. 註冊 Kubernetes CRD
- 使用以下 YAML 註冊
ClusterLoggingConfigCRD:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: clusterloggingconfigs.logging.datakits.io
labels:
app: datakit-logging-config
version: v1alpha1
spec:
group: logging.datakits.io
versions:
- name: v1alpha1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
apiVersion:
type: string
kind:
type: string
metadata:
type: object
spec:
type: object
required:
- selector
properties:
selector:
type: object
properties:
namespaceRegex:
type: string
podRegex:
type: string
podLabelSelector:
type: string
containerRegex:
type: string
podTargetLabels:
type: array
items:
type: string
configs:
type: array
items:
type: object
required:
- source
- type
properties:
source:
type: string
type:
type: string
disable:
type: boolean
path:
type: string
multiline_match:
type: string
pipeline:
type: string
storage_index:
type: string
tags:
type: object
additionalProperties:
type: string
scope: Cluster
names:
plural: clusterloggingconfigs
singular: clusterloggingconfig
kind: ClusterLoggingConfig
shortNames:
- logging
- 創建 CRD 資源,自動應用採集配置
kubectl apply -f clusterloggingconfig-crd.yaml
- 驗證 CRD 註冊
kubectl get crd clusterloggingconfigs.logging.datakits.io
2. 創建 CRD 配置資源
- 如下為業務應用 yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
version: v1.0
enviroment: test
spec:
containers:
- name: container-demo
image: swr.cn-north-4.myhuaweicloud.com/liurui_bj/springboot-server:openj8
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
- k8s 部署運行業務後如下:
- 對應採集配置如下,該採集配置用於採集 default 工作空間 demo 業務的容器內日誌以及容器的標準輸出,容器內日誌來源 source 自定義命名為 demo-file,容器標準輸出的 source 自定義命名為 demo-std,更多配置參考鏈接
apiVersion: logging.datakits.io/v1alpha1
kind: ClusterLoggingConfig
metadata:
name: demo-logs
spec:
selector:
namespaceRegex: "^(default)$"
podRegex: "^(deploy.*)$"
podLabelSelector: "app=demo"
podTargetLabels:
- app
- version
- enviroment
configs:
- source: "demo-file"
type: "file"
path: "/data/logs/server/server.log"
tags:
log_type: "server"
component: "springboot-server"
- source: "demo-std"
type: "stdout"
disable: false
tags:
log_type: "server"
component: "springboot-server"
- 應用配置
kubectl apply -f logging-config.yaml
3. 添加相關 RBAC 配置
- 在 DataKit 的 ClusterRole 中添加以下權限:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: datakit
rules:
# 原有的其他權限
- apiGroups: ["logging.datakits.io"]
resources: ["clusterloggingconfigs"]
verbs: ["get", "list", "watch"]
- 調整 DataKit 的其他採集配置,如日誌白名單,採集器,數據 dataway 上報地址等,重新 apply DataKit 應用
kubectl apply -f datakit.yaml
4. 額外配置與説明
- 需要全局屏蔽日誌標準輸出採集,需要額外應用自定義 CRD 配置,如下:
kind: ClusterLoggingConfig
metadata:
name: test
spec:
selector:
namespaceRegex: "^(.*)$"
configs:
- source: "test"
type: "stdout"
disable: true
- DataKit 需要打開 container 採集器,不然 CRD 配置不生效
四、日誌採集展示
- 容器內日誌如下圖,數據成功上報到觀測雲,相關 source,log_type,component 等配置字段均成功上報
- 容器標準輸出如下圖,據成功上報到觀測雲,相關 source,log_type。component 等配置字段均成功上報