本文介紹在不需要修改應用代碼的前提下,通過配置一個YAML檔案,將阿里雲Container ServiceKubernetes叢集中產生的日誌輸出到阿里雲Log Service。此外,通過在Kubernetes叢集上部署一個樣本API程式,來進行示範。
前提條件
您已經開通Container Service,並且建立了Kubernetes叢集。
本樣本中,建立的Kubernetes叢集位於華東1(杭州)。
啟用AccessKey或RAM,確保有足夠的存取權限。本例中使用AccessKey。
背景資訊
Log4j是Apache的一個開放原始碼專案。Log4j由三個重要組件構成:日誌資訊的優先順序、日誌資訊的輸出目的地、日誌資訊的輸出格式。通過配置Log4jAppender,您可以控制日誌資訊輸送的目的地是控制台、檔案、GUI組件,甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護進程等。
操作步驟
在阿里雲Log Service上配置Log4jAppender。
建立一個Log ServiceProject。
本樣本建立一個名為k8s-log4j、與Kubernetes叢集位於同一地區(華東 1)的Project。具體操作,請參見建立Project。
說明在配置時,一般會使用與Kubernetes叢集位於同一地區的Log ServiceProject。因為當Kubernetes叢集和Log ServiceProject位於同一地區時,日誌資料會通過內網進行傳輸,從而避免了因地區不一致而導致的資料轉送外網頻寬費用和耗時,從而實現即時採集、快速檢索的最佳實務。
為k8s-log4j的Project建立一個Logstore。
本樣本建立名為k8s-logstore的日誌庫。具體操作,請參見建立Logstore。
在k8s-logstore建立完成後,頁面會提示您建立資料接入嚮導。
選擇自訂代碼下的log4jAppender,根據頁面引導進行配置。
本樣本使用了預設配置,您可根據日誌資料的具體使用情境,進行相應的配置。
在Kubernetes叢集中配置log4j。
本樣本使用demo-deployment和demo-Service樣本YAML檔案進行示範。
串連到您的Kubernetes叢集。
擷取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。
在命令列中執行以下命令,建立deployment。
kubectl create -f demo-deployment.yaml
擷取demo-Service.yaml檔案,並運行以下命令建立service。
您不需要修改demo-Service.yaml中的配置。
kubectl create -f demo-service.yaml
測試產生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
在阿里雲Log Service中查看日誌。
在Project列表中,單擊目標Project,進入對應的Project詳情頁面。
在對應的日誌庫k8s-logstore右側的表徵圖,選擇查詢分析,查看Kubernetes叢集輸出的日誌,如下所示。