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

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

前提條件

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

    本樣本中,建立的 Kubernetes 叢集位於華東 1 地區。

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

步驟 1 在阿里雲Log Service上配置 Log4jAppender

  1. 登入 Log Service管理主控台
  2. 單擊頁面右上方的建立 Project,填寫 Project 的基本資料並單擊確認進行建立。

    本樣本建立一個名為 k8s-log4j,與 Kubernetes 叢集位於同一地區(華東 1)的 Project。

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


  3. 建立完成後,k8s-log4j 出現在 project 列表下,單擊該 project 名稱,進入 project 詳情頁面。
  4. 預設進入日誌庫頁面,單擊右上方的建立


  5. 填寫日誌庫配置資訊並單擊確認
    本樣本建立名為 k8s-logstore 的日誌庫。


  6. 建立完畢後,頁面會提示您建立資料接入嚮導。


  7. 選擇自訂資料下的log4jAppender,根據頁面引導進行配置。
    本樣本使用了預設配置,您可根據日誌資料的具體使用情境,進行相應的配置。


步驟 2 在 Kubernetes 叢集中配置 log4j

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

  1. 串連到您的 Kubernetes 叢集。

    具體操作參見SSH訪問Kubernetes叢集通過 kubectl 串連 Kubernetes 叢集

  2. 擷取demo-deployment.yaml檔案並配置環境變數 JAVA_OPTS 設定 Kubernetes 叢集日誌的採集。

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

    apiVersion: apps/v1beta2
    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 Service Project 的名稱。本樣本中為 k8s-log4j。
    • -Dlogstore:您所使用的阿里雲Log Service Logstore 的名稱。本樣本中為 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中查看日誌

登入 Log Service管理主控台

進入對應的 Project 的詳情頁面,選擇對應的日誌庫 k8s-logstore,並單擊右側的 查詢分析 - 查詢,查看 Kubernetes 叢集輸出的日誌,如下所示。


日誌的輸出內容對應上面的命令。本樣本示範了將樣本應用產生的日誌輸出到阿里雲Log Service的操作。通過這些操作,您可以在阿里雲上配置 Log4JAppender,並通過阿里雲Log Service,實現日誌即時搜集、資料過濾、檢索等進階功能。