全部產品
Search
文件中心

Container Service for Kubernetes:為Kubernetes和Log Service配置Log4JAppender

更新時間:Jul 05, 2024

本文介紹在不需要修改應用代碼的前提下,通過配置一個YAML檔案,將阿里雲Container ServiceKubernetes叢集中產生的日誌輸出到阿里雲Log Service。此外,通過在Kubernetes叢集上部署一個樣本API程式,來進行示範。

前提條件

  • 您已經開通Container Service,並且建立了Kubernetes叢集。

    本樣本中,建立的Kubernetes叢集位於華東1(杭州)。

  • 啟用AccessKey或RAM,確保有足夠的存取權限。本例中使用AccessKey。

背景資訊

Log4j是Apache的一個開放原始碼專案。Log4j由三個重要組件構成:日誌資訊的優先順序、日誌資訊的輸出目的地、日誌資訊的輸出格式。通過配置Log4jAppender,您可以控制日誌資訊輸送的目的地是控制台、檔案、GUI組件,甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護進程等。

操作步驟

  1. 在阿里雲Log Service上配置Log4jAppender。

    1. 建立一個Log ServiceProject。

      本樣本建立一個名為k8s-log4j、與Kubernetes叢集位於同一地區(華東 1)的Project。具體操作,請參見建立Project

      說明

      在配置時,一般會使用與Kubernetes叢集位於同一地區的Log ServiceProject。因為當Kubernetes叢集和Log ServiceProject位於同一地區時,日誌資料會通過內網進行傳輸,從而避免了因地區不一致而導致的資料轉送外網頻寬費用和耗時,從而實現即時採集、快速檢索的最佳實務。

      建立project

    2. 為k8s-log4j的Project建立一個Logstore。

      本樣本建立名為k8s-logstore的日誌庫。具體操作,請參見建立Logstore配置日誌庫資訊

    3. 在k8s-logstore建立完成後,頁面會提示您建立資料接入嚮導。

      建立資料接入嚮導

    4. 選擇自訂代碼下的log4jAppender,根據頁面引導進行配置。

      本樣本使用了預設配置,您可根據日誌資料的具體使用情境,進行相應的配置。自訂資料

  2. 在Kubernetes叢集中配置log4j。

    本樣本使用demo-deploymentdemo-Service樣本YAML檔案進行示範。

    1. 串連到您的Kubernetes叢集。

    2. 擷取demo-deployment.yaml檔案並配置環境變數JAVA_OPTS

      demo-deployment.yaml檔案的樣本編排如下。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: log4j-appender-demo-spring-boot
        labels:
          app: log4j-appender
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: log4j-appender
        template:
          metadata:
            labels:
              app: log4j-appender
          spec:
            containers:
            - name: log4j-appender-demo-spring-boot
              image: registry.cn-hangzhou.aliyuncs.com/jaegertracing/log4j-appender-demo-spring-boot:0.0.2
              env:
                - name: JAVA_OPTS                ##注意
                  value: "-Dproject={your_project} -Dlogstore={your_logstore} -Dendpoint={your_endpoint} -Daccess_key_id={your_access_key_id} -Daccess_key={your_access_key_secret}"
              ports:
              - containerPort: 8080
      說明

      其中:

      • -Dproject:您所使用的阿里雲Log ServiceProject的名稱。本樣本中為k8s-log4j。

      • -Dlogstore:您所使用的阿里雲Log ServiceLogstore的名稱。本樣本中為k8s-logstore。

      • -Dendpoint:Log Service的服務入口,使用者需要根據日誌Project所屬的地區,配置自己的服務入口,參見服務入口進行查詢。本樣本中為cn-hangzhou.log.aliyuncs.com。

      • -Daccess_key_id:您的AccessKey ID。

      • -Daccess_key:您的AccessKey Secret。

    3. 在命令列中執行以下命令,建立deployment。

      kubectl create -f demo-deployment.yaml
    4. 擷取demo-Service.yaml檔案,並運行以下命令建立service。

      您不需要修改demo-Service.yaml中的配置。

      kubectl create -f demo-service.yaml
  3. 測試產生Kubernetes叢集日誌。

    您可以使用kubectl get命令查看資來源物件部署狀況,等待deployment和service部署成功後,執行kubectl get svc查看service的外部存取IP,即EXTERNAL-IP。

    命令如下:

    kubectl get svc

    結果如下:

    NAME                      TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)          AGE
    log4j-appender-demo-spring-boot-svc   LoadBalancer   172.21.XX.XX   120.55.XXX.XXX   8080:30398/TCP   1h

    在本樣本中,通過運行login命令來測試產生Kubernetes叢集日誌。其中K8S_SERVICE_IP即為EXTERNAL-IP

    說明

    您可以在GitHub log4j-appender-demo中查看完整的API集合。

    curl http://${K8S_SERVICE_IP}:8080/login?name=bruce
  4. 在阿里雲Log Service中查看日誌。

    1. Project列表中,單擊目標Project,進入對應的Project詳情頁面。

    2. 在對應的日誌庫k8s-logstore右側的表徵圖表徵圖,選擇查詢分析,查看Kubernetes叢集輸出的日誌,如下所示。

      查詢分析