阿里云日志服務SLS支持通過Sidecar模式采集ECI日志。本文介紹如何部署Sidecar容器,以及創建Logtail配置,實現容器日志的采集。
前提條件
背景信息
阿里云日志服務SLS支持在ECI中通過Sidecar模式采集日志,即在每個ECI Pod中,除業務容器外,運行一個Sidecar容器作為日志Agent,用于采集業務容器產生的日志。
Sidecar模式基于Logtail實現,Logtail必須和業務容器共享日志目錄,業務容器將日志寫入到共享目錄中,Logtail通過監控共享目錄中日志文件的變化并采集日志。
采集的日志可以分為以下兩種:
標準輸出
采集標準輸出依賴于ECI的stdlog卷。創建ECI Pod時可以將該卷掛載到Sidecar容器上,Sidecar可以直接以文件的方式訪問ECI基礎組件收集的標準輸出日志。
文本文件
采集文本文件可以通過Pod內共享的Volume實現。Pod內同一個Volume可以掛載到多個容器,Sidecar可以直接收集業務容器輸出到對應Volume內的文本文件。
步驟一:部署Sidecar容器
創建一個包含Sidecar容器的Deployment。
YAML內容示例如下,請根據實際情況將占位符變量替換為實際值。
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-log-sidecar-demo name: nginx-log-sidecar-demo spec: replicas: 2 selector: matchLabels: app: nginx-log-sidecar-demo template: metadata: labels: app: nginx-log-sidecar-demo alibabacloud.com/eci: "true" spec: containers: - name: nginx-log-demo image: registry-vpc.${RegionId}.aliyuncs.com/eci_open/nginx:1.14.2 command: - /bin/sh args: - -c - while true; do echo hello world; date; echo hello sls >> /var/log/nginx/test.log; sleep 1;done imagePullPolicy: Always volumeMounts: - mountPath: /var/log/nginx name: nginx-log - name: logtail image: registry-vpc.${RegionId}.aliyuncs.com/log-service/logtail:latest env: - name: ALIYUN_LOGTAIL_USER_ID value: "${Aliuid}" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: nginx-log-sidecar - name: ALIYUN_LOGTAIL_CONFIG value: /etc/ilogtail/conf/${RegionId}/ilogtail_config.json - name: aliyun_logs_machinegroup value: k8s-group-app-alpine imagePullPolicy: Always volumeMounts: - mountPath: /var/log/nginx name: nginx-log - mountPath: /stdlog name: stdlog volumes: - emptyDir: {} #文本文件日志存儲到emptyDir卷 name: nginx-log - name: stdlog #標準輸出日志存儲到stdlog卷 csi: driver: stdlogplugin.csi.alibabacloud.com
獲取Pod信息。
kubectl get pods -l app=nginx-log-sidecar-demo
預期返回結果如下:
NAME READY STATUS RESTARTS AGE nginx-log-sidecar-demo-5d85d8497c-jzvpg 2/2 Running 0 21m nginx-log-sidecar-demo-5d85d8497c-tkpk8 2/2 Running 0 21m
查看日志。
通過kubectl命令查看日志
執行exec命令進入容器后,通過tail命令查看stdlog卷中日志文件的內容。
kubectl exec -it nginx-log-sidecar-demo-5d85d8497c-jzvpg -c logtail -- bash ls /stdlog tail /stdlog/nginx-log-demo/0.log -n 5
示例如下:
通過彈性容器實例控制臺查看日志
在實例詳情頁選擇日志頁簽,然后選擇容器查看日志內容。
步驟二:配置Logtail采集日志
部署Sidecar容器后,您需要在日志服務控制臺創建Logtail配置來采集日志。
登錄日志服務控制臺。
在接入數據區域,單擊正則 - 文本日志 。
選擇日志空間,單擊下一步。
請選擇Project和Logstore。如果沒有,您也可以直接單擊立即創建進行創建。
創建機器組。
如果您已有可用的機器組 ,可直接單擊使用現有機器組,跳過該步驟。
按界面提示確認已創建機器組,然后單擊確認安裝完畢。
配置機器組相關參數,單擊下一步。
機器組標識選擇用戶自定義標識,將步驟一配置的環境變量
ALIYUN_LOGTAIL_USER_DEFINED_ID
填入用戶自定義標識框中。本文示例為nginx-log-sidecar
。
配置機器組。
選擇目標機器組,將該機器組從源機器組移動到應用機器組,然后單擊下一步。
設置Logtail配置。
Logtail支持通過極簡模式、正則模式、分隔符模式、JSON模式等模式采集文本日志。更多信息,請參見概述。
說明是否為Docker文件的配置項請保持關閉。
標準輸出示例
采集標準輸出時,日志路徑為stdlog卷在容器的掛載路徑,本文示例為
/stdlog
。文本文件示例
采集文本文件時,日志路徑為共享Volume在容器的掛載路徑,本文示例為
/var/log/nginx
。
查詢分析配置。
默認已設置索引,您也可以根據業務需求,重新設置索引。具體操作,請參見配置索引。
查看采集的ECI日志。
完成上述配置后,日志服務SLS即可開始采集ECI日志。下圖為標準輸出日志采集到SLS日志庫的效果示例。