使用日志服務進行Kubernetes日志采集


阿里雲容器服務Kubernetes集群集成了日志服務(SLS),您可在創建集群時啟用日志服務,快速采集Kubernetes 集群的容器日志,包括容器的標准輸出以及容器內的文本文件。

新建 Kubernetes 集群

如果您尚未創建任何的 Kubernetes 集群,可以按照本節的步驟來進行操作:

  1. 登錄 容器服務管理控制台
  2. 單擊左側導航欄中集群,單擊右上角創建Kubernetes集群。
  3. 進入創建頁面后,參見創建Kubernetes集群進行配置。
  4. 拖動到頁面底部,勾選日志服務配置項,表示在新建的 Kubernetes 集群中安裝日志插件。
  5. 當勾選了使用日志服務后,會出現創建 Project(日志服務管理日志的組織結構,具體可見項目)的提示,目前有兩種方式可選:
    • 選擇一個現有的 Project 來管理采集的日志。
    • 自動創建一個新的 Project 來管理采集的日志,Project 會自動命名為 k8s-log-{ClusterID},ClusterID 表示您新建的 Kubernetes 集群的唯一標識。
  6. 配置完成后,單擊右上角創建集群,在彈出的窗口中單擊確定,完成創建。
    完成創建后,您可在集群列表頁面看到創建的Kubernetes集群。

已創建 Kubernetes 集群,手動安裝日志服務組件

如果您先前已創建了 Kubernetes 集群,可以根據本節的內容來進行所需的操作以使用日志服務:

  • 未安裝:手動安裝日志服務組件。
  • 已安裝但版本較老:升級日志服務組件,若不升級則只能使用日志服務控制台或 CRD 進行采集配置。

檢查日志服務組件版本

  1. 通過cloudshell 連接 Kubernetes 集群。

    詳細內容,可參考在CloudShell上通過kubectl管理Kubernetes集群 。

  2. 快速判定是否需要進行升級或遷移操作,命令如下:
    $ kubectl describe daemonsets -n kube-system logtail-ds | grep ALICLOUD_LOG_DOCKER_ENV_CONFIG 
    • 如果輸出結果為 ALICLOUD_LOG_DOCKER_ENV_CONFIG: true表示您可正常使用,不需要進行升級或遷移。
    • 其他情況則需要進行后續檢查。
  3. 執行以下檢查命令確定是否是采用 helm 安裝。
    $ helm get alibaba-log-controller | grep CHART CHART: alibaba-cloud-log-0.1.1 
    • 輸出內容中的 0.1.1 表示日志服務組件的版本,請使用 0.1.1 及以上版本的組件,如果版本過低,請參照升級日志服務組件進行升級。如果您已采用 helm 安裝且版本正確,可以跳過后續步驟。
    • 如果無任何內容輸出,表示未采用 helm 安裝日志服務組件,但可能采用了 DaemonSet 的方式安裝,請根據后續步驟進行檢查。
  4. DaemonSet 分為新舊兩種方式:
    $ kubectl get daemonsets -n kube-system logtail
    
    • 如果無輸出結果或內容是 No resources found.,則表明未安裝日志服務組件,請參照操作手動安裝日志服務組件
    • 如果有正確的輸出結果表示使用舊 DaemonSet 方式進行了安裝,需要進行升級,請參照升級日志服務組件操作。

手動安裝日志服務組件

  1. 通過cloudshell 連接 Kubernetes 集群。

    詳細內容,可參考在CloudShell上通過kubectl管理Kubernetes集群 。

  2. 在cloudshell中獲取您的主賬號aliuid,命令為 echo $ALIBABA_CLOUD_ACCOUNT_ID
  3. 替換${your_k8s_cluster_id}{your_ali_uid}{your_k8s_cluster_region_id}參數后執行以下安裝命令。
    wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id ${your_k8s_cluster_id} --ali-uid ${your_ali_uid} --region-id ${your_k8s_cluster_region_id}
    參數說明:
    • your_k8s_cluster_id:您的Kubernetes集群ID。
    • your_ali_uid:您在步驟2中獲取的aliuid。
    • your_k8s_cluster_region_id:您的Kubernetes集群所在的Region,可在地域和可用區中查看到,如在杭州,則為cn-hangzhou。

安裝示例

[root@iZbp******biaZ ~]# wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id c77a*****************0106 --ali-uid 19*********19 --region-id cn-hangzhou
--2018-09-28 15:25:33--  https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh
Resolving acs-logging.oss-cn-hangzhou.aliyuncs.com... 118.31.219.217, 118.31.219.206
Connecting to acs-logging.oss-cn-hangzhou.aliyuncs.com|118.31.219.217|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2273 (2.2K) [text/x-sh]
Saving to: ‘alicloud-k8s-log-installer.sh’

alicloud-k8s-log-installer.sh                      100%[================================================================================================================>]   2.22K  --.-KB/s    in 0s

2018-09-28 15:25:33 (13.5 MB/s) - ‘alicloud-k8s-log-installer.sh’ saved [2273/2273]

--2018-09-28 15:25:33--  http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alibaba-cloud-log.tgz
Resolving logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com... 118.31.219.49
Connecting to logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com|118.31.219.49|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2754 (2.7K) [application/x-gzip]
Saving to: ‘alibaba-cloud-log.tgz’

alibaba-cloud-log.tgz                              100%[================================================================================================================>]   2.69K  --.-KB/s    in 0s

2018-09-28 15:25:34 (79.6 MB/s) - ‘alibaba-cloud-log.tgz’ saved [2754/2754]

[INFO] your k8s is using project : k8s-log-c77a92ec5a3ce4e64a1bf13bde1820106
NAME:   alibaba-log-controller
LAST DEPLOYED: Fri Sep 28 15:25:34 2018
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1beta1/CustomResourceDefinition
NAME                                   AGE
aliyunlogconfigs.log.alibabacloud.com  0s

==> v1beta1/ClusterRole
alibaba-log-controller  0s

==> v1beta1/ClusterRoleBinding
NAME                    AGE
alibaba-log-controller  0s

==> v1beta1/DaemonSet
NAME        DESIRED  CURRENT  READY  UP-TO-DATE  AVAILABLE  NODE SELECTOR  AGE
logtail-ds  2        2        0      2           0          <none>         0s

==> v1beta1/Deployment
NAME                    DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
alibaba-log-controller  1        1        1           0          0s

==> v1/Pod(related)
NAME                                     READY  STATUS             RESTARTS  AGE
logtail-ds-6v979                         0/1    ContainerCreating  0         0s
logtail-ds-7ccqv                         0/1    ContainerCreating  0         0s
alibaba-log-controller-84d8b6b8cf-nkrkx  0/1    ContainerCreating  0         0s

==> v1/ServiceAccount
NAME                    SECRETS  AGE
alibaba-log-controller  1        0s


[SUCCESS] install helm package : alibaba-log-controller success. 

升級日志服務組件

如果您已安裝舊版本的日志服務組件(通過 helm 或 DaemonSet),可以按照以下操作進行升級或遷移。

 
說明 通過cloudshell 連接 Kubernetes 集群。

詳細內容可參考在CloudShell上通過kubectl管理Kubernetes集群 。

Helm 升級(推薦)

  1. 下載最新的日志服務組件 helm 包,命令如下:
    wget http://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/alibaba-cloud-log.tgz -O alibaba-cloud-log.tgz
    
  2. 使用 helm upgrade 進行升級,命令如下:
    helm get values alibaba-log-controller --all > values.yaml && helm upgrade alibaba-log-controller alibaba-cloud-log.tgz --recreate-pods -f values.yaml
    

DaemonSet升級

若您不是使用helm的方式安裝的日志組件,可通過修改DaemonSet模板的方式進行升級。若您的鏡像賬號為acs,請參考鏡像倉庫中最新的tag,將鏡像中的tag更新至最新版本;若您的鏡像賬號為log-service,請參考鏡像倉庫中最新的tag,將鏡像中的tag更新至最新版本。

 
說明
  • 用戶升級tag后,如果Logtail沒有滾動更新,您需要手動刪除Logtail的Pod,觸發強制更新。
  • 查看Logtail是否運行在所有節點(包括master節點)上。若沒有,請為Logtail設置tolerations
tolerations:
- operator: "Exists"

更多最新配置方式,請參考最新helm包中的相關配置

DaemonSet 遷移

此升級步驟適用於檢查日志服務組件版本時結果為使用舊方式 DaemonSet 的用戶,該方式不支持在容器服務中進行日志服務配置,您可按如下操作進行升級遷移:

  1. 按照新版本的方式安裝,安裝命令最后新增一個參數為您之前 Kubernetes 集群使用的日志服務 Project 名。
    例如 Project 名為 k8s-log-demo,集群 ID 為 c12ba2028cxxxxxxxxxx6939f0b,則安裝命令為:
    wget https://acs-logging.oss-cn-hangzhou.aliyuncs.com/alicloud-k8s-log-installer.sh -O alicloud-k8s-log-installer.sh; chmod 744 ./alicloud-k8s-log-installer.sh; ./alicloud-k8s-log-installer.sh --cluster-id c12ba2028cxxxxxxxxxx6939f0b --ali-uid 19*********19 --region-id cn-hangzhou --log-project k8s-log-demo
    
  2. 安裝成功后,進入日志服務控制台
  3. 在日志服務控制台,將相應 Project 以及 Logstore 下的歷史采集配置應用到新的機器組 k8s-group-${your_k8s_cluster_id}
  4. 一分鍾后,將歷史采集配置從歷史的機器組中解綁。
  5. 觀察日志采集正常后,可以選擇刪除之前安裝的 logtail daemonset。
 
說明 升級期間會有部分日志重復;CRD 配置管理方式只對使用 CRD 創建的配置生效(由於歷史配置使用非 CRD 方式創建,因此歷史配置不支持 CRD 管理方式)。

創建應用時配置日志服務

在容器服務中,您可以在創建應用的同時配置日志服務對容器的日志進行采集,目前支持以控制台向導和 YAML 模板兩種方式進行創建。

控制台向導創建

  1. 登錄 容器服務管理控制台
  2. 在 Kubernetes 菜單下,單擊左側導航欄中的應用 部署,然后單擊頁面右上角的使用鏡像創建。
  3. 設置應用名稱、部署集群、命名空間、副本數量和類型,單擊下一步,進入容器配置頁面。

  4. 進入容器配置頁面中,本例中選擇nginx鏡像,對容器采集進行配置。

    以下僅介紹日志服務相關的配置,其他的應用配置可參見使用鏡像創建無狀態Deployment應用

  5. 進行日志配置。單擊+號創建新的采集配置,每個采集配置由 Logstore 名稱和日志采集路徑兩項構成。
    • Logstore 名稱:您可以使用它來指定所采集日志存儲於哪個 Logstore,如果該 Logstore 不存在的話,我們會自動為您在集群關聯的日志服務 Project 下創建相應的 Logstore。
       
      說明 名稱中不能包含下划線(_),可以使用 - 來代替。
    • 日志采集路徑:您可以用它來指定希望采集的日志所在的路徑,如使用/usr/local/tomcat/logs/catalina.*.log 來采集tomcat的文本日志。
       
      說明 如果指定為 stdout 則表示采集容器的標准輸出和標准錯誤輸出。

      每一項采集配置都會被自動創建為對應 Logstore 的一個采集配置,默認采用極簡模式(按行)進行采集,如果您需要更豐富的采集方式,可以前往日志服務控制台,進入相應的 Project(默認是 k8s-log 前綴)和 Logstore 對配置進行修改。



  6. 自定義 Tag。單擊+號創建新的自定義 Tag,每一個自定義 Tag 都是一個鍵值對,會拼接到所采集到的日志中,您可以使用它來為容器的日志數據進行標記,比如版本號。

  7. 當完成所有配置后,可單擊右上角的下一步進入后續流程,后續操作可見使用鏡像創建無狀態Deployment應用

使用 YAML 模板創建

  1. 登錄 容器服務管理控制台
  2. 在 Kubernetes 菜單下,單擊左側導航欄中的應用 > 部署,然后單擊頁面右上角的使用模板創建。
  3. YAML 模板的語法同 Kubernetes 語法,但是為了給容器指定采集配置,需要使用 env 來為 container 增加采集配置和自定義 Tag,並根據采集配置,創建對應的 volumeMounts 和 volumns。以下是一個簡單的 Pod 示例:
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-demo
    spec:
      containers:
      - name: my-demo-app
        image: 'registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest'
        env:
        ######### 配置 環境變量 ###########
        - name: aliyun_logs_log-stdout
          value: stdout
        - name: aliyun_logs_log-varlog
          value: /var/log/*.log
        - name: aliyun_logs_mytag1_tags
          value: tag1=v1
        ###############################
        ######### 配置vulume mount ###########
        volumeMounts:
        - name: volumn-sls-mydemo
          mountPath: /var/log
      volumes:
      - name: volumn-sls-mydemo
        emptyDir: {}
      ###############################
    • 其中有三部分需要根據您的需求進行配置,一般按照順序進行配置。
    • 第一部分通過環境變量來創建您的采集配置和自定義 Tag,所有與配置相關的環境變量都采用 aliyun_logs_ 作為前綴。
    • 創建采集配置的規則如下:
      - name: aliyun_logs_{Logstore 名稱}
        value: {日志采集路徑}
      

      示例中創建了兩個采集配置,其中 aliyun_logs_log-stdout 這個 env 表示創建一個 Logstore 名字為 log-stdout,日志采集路徑為 stdout 的配置,從而將容器的標准輸出采集到 log-stdout 這個 Logstore 中。

       
      說明 Logstore 名稱中不能包含下划線(_),可以使用 - 來代替。
    • 創建自定義 Tag 的規則如下:
      - name: aliyun_logs_{任意不包含'_'的名稱}_tags
        value: {Tag 名}={Tag 值}
      
      配置 Tag 后,當采集到該容器的日志時,會自動附加對應的字段到日志服務。
    • 如果您的采集配置中指定了非 stdout 的采集路徑,需要在此部分創建相應的 volumnMounts。

      示例中采集配置添加了對/var/log/*.log 的采集,因此相應地添加了/var/log的 volumeMounts。

  4. 當 YAML 編寫完成后,單擊創建,即可將相應的配置交由 Kubernetes 集群執行。

查看日志

本例中查看通過控制台向導創建的tomcat應用的日志。完成配置后,tomcat應用的日志已被采集並存儲到日志服務中,您可以如下步驟來查看您的日志:

    1. 安裝成功后,進入日志服務控制台
    2. 在進入控制台后,選擇 Kubernetes 集群對應的 Project(默認為 k8s-log-{Kubernetes 集群 ID}),進入 Logstore 列表頁面。
    3. 在列表中找到相應的 Logstore(采集配置中指定),單擊查詢。

    4. 本例中,在日志查詢頁面,您可查看tomcat應用的標准輸出日志和容器內文本日志,並可發現自定義tag附加到日志字段中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM