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
- 登入 Log Service管理主控台。
- 單擊頁面右上方的建立 Project,填寫 Project 的基本資料並單擊確認進行建立。
本樣本建立一個名為 k8s-log4j,與 Kubernetes 叢集位於同一地區(華東 1)的 Project。
说明 在配置時,一般會使用與 Kubernetes 叢集位於同一地區的Log Service Project。因為當 Kubernetes 叢集和Log Service Project 位於同一地區時,日誌資料會通過內網進行傳輸,從而避免了因地區不一致而導致的資料轉送外網頻寬費用和耗時,從而實現即時採集、快速檢索的最佳實務。
- 建立完成後,k8s-log4j 出現在 project 列表下,單擊該 project 名稱,進入 project 詳情頁面。
- 預設進入日誌庫頁面,單擊右上方的建立。
- 填寫日誌庫配置資訊並單擊確認。
本樣本建立名為 k8s-logstore 的日誌庫。
- 建立完畢後,頁面會提示您建立資料接入嚮導。
- 選擇自訂資料下的log4jAppender,根據頁面引導進行配置。
本樣本使用了預設配置,您可根據日誌資料的具體使用情境,進行相應的配置。
步驟 2 在 Kubernetes 叢集中配置 log4j
本樣本使用 demo-deployment 和 demo-Service 樣本 yaml 檔案進行示範。
- 串連到您的 Kubernetes 叢集。
- 擷取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。
- 在命令列中執行以下命令,建立 deployment。
kubectl create -f demo-deployment.yaml
- 擷取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
。
curl http://${K8S_SERVICE_IP}:8080/login?name=bruce
步驟 4 在阿里雲Log Service中查看日誌
登入 Log Service管理主控台。

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