本文介紹在不需要修改應用代碼的前提下,通過配置一個YAML文件,將阿里云容器服務Kubernetes集群中產生的日志輸出到阿里云日志服務。此外,通過在Kubernetes集群上部署一個示例API程序,來進行演示。
前提條件
您已經開通容器服務,并且創建了Kubernetes集群。
本示例中,創建的Kubernetes集群位于華東1(杭州)。
啟用AccessKey或RAM,確保有足夠的訪問權限。本例中使用AccessKey。
背景信息
Log4j是Apache的一個開放源代碼項目。Log4j由三個重要組件構成:日志信息的優先級、日志信息的輸出目的地、日志信息的輸出格式。通過配置Log4jAppender,您可以控制日志信息輸送的目的地是控制臺、文件、GUI組件,甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等。
操作步驟
在阿里云日志服務上配置Log4jAppender。
創建一個日志服務Project。
本示例創建一個名為k8s-log4j、與Kubernetes集群位于同一地域(華東 1)的Project。具體操作,請參見創建Project。
說明在配置時,一般會使用與Kubernetes集群位于同一地域的日志服務Project。因為當Kubernetes集群和日志服務Project位于同一地域時,日志數據會通過內網進行傳輸,從而避免了因地域不一致而導致的數據傳輸外網帶寬費用和耗時,從而實現實時采集、快速檢索的最佳實踐。
為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
:您所使用的阿里云日志服務Project的名稱。本示例中為k8s-log4j。-Dlogstore
:您所使用的阿里云日志服務Logstore的名稱。本示例中為k8s-logstore。-Dendpoint
:日志服務的服務入口,用戶需要根據日志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
在阿里云日志服務中查看日志。
在Project列表中,單擊目標Project,進入對應的Project詳情頁面。
在對應的日志庫k8s-logstore右側的圖標,選擇查詢分析,查看Kubernetes集群輸出的日志,如下所示。