Elastic可觀測性是通過Kibana可視化能力,將日志、指標及APM數據結合在一起,實現對容器數據的觀測和分析。當您的應用程序以Pods方式部署在Kubernetes中,可以在Kibana中查看Pods生成日志、主機和網絡上的事件指標及APM數據,逐步縮小排查范圍進行故障排查。本文介紹具體的實現方法。
前提條件
- 創建阿里云Elasticsearch實例,并開啟白名單和自動創建索引功能。本文以6.8版本的實例為例,其他版本以實際情況為準。
具體操作,請參見創建阿里云Elasticsearch實例、配置實例公網或私網訪問白名單和配置YML參數。
- 創建ACK集群,并運行Pod服務。本文的測試場景使用的Kubernetes版本為1.18.8-aliyun.1,ECS規格為2C8G。
具體操作,請參見創建Kubernetes托管版集群。
- 配置kubectl客戶端,可通過kubectl連接Kubernetes集群。
具體操作,請參見通過kubectl工具連接集群。
背景信息
關于Metricbeat、Filebeat及APM更多的特性說明,請參見Infrastructure monitoring、Log monitoring和Elastic APM。
通過Metricbeat實現指標采集
- DaemonSet:保證每個節點運行一個Pod,可以實現對Host指標、System指標、Docker統計信息以及Kubernetes上運行的所有服務指標的采集。
- Deployment:部署單個Metricbeat實例,該實例用于檢索整個集群的唯一指標,如kubernetes event或者kube-state-metrics。
- 本文以同時使用DaemonSet和Deployment的部署方式為例介紹如何部署Metricbeat容器,您也可以僅使用DaemonSet方式或Deployment方式進行部署。
- Metricbeat依賴kube-state-metrics監控,部署前需要確保已完成kube-state-metrics的部署。阿里云ACK容器默認在arms-prom命名空間下部署了kube-state-metrics監控。
- 通過kubectl訪問云容器,下載Metricbeat配置文件。
curl -L -O https://raw.githubusercontent.com/elastic/beats/6.8/deploy/kubernetes/metricbeat-kubernetes.yaml
- 修改Metricbeat配置文件。
重要
官方下載的YML文件中,DaemonSets和Deployments的資源使用extensions/v1beta1,而v1.18及以上版本的Kubernetes,DaemonSets、Deployments和Replicasets資源的extensions/v1beta1 API將被廢棄,請使用apps/v1。
- 部署Metricbeat,并查看資源狀態。
通過kubectl執行以下命令:
kubectl apply -f metricbeat-kubernetes.yaml kubectl get pods -n kube-system
重要 請確保Pods資源均處于Running狀態,否則在Kibana平臺有可能會看不到相應數據。 - 在Kibana查看監測數據。
通過Filebeat實現日志采集
本文示例中,Filebeat容器使用DaemonSet控制器部署,確保集群上每一個節點都有一個正在運行的實例采集數據,并且配置文件中的資源部署在kube-system命名空間下。您如果需要改變,可以手動更改配置文件。
- 下載Filebeat配置文件。
通過kubectl訪問云容器,下載Filebeat配置文件。
curl -L -O https://raw.githubusercontent.com/elastic/beats/6.8/deploy/kubernetes/filebeat-kubernetes.yaml
- 修改Filebeat配置文件。
- 在Kubernetes中部署Filebeat,并查看資源狀態。
通過kubectl執行以下命令:
kubectl apply -f filebeat-kubernetes.yaml kubectl get pods -n kube-system
重要 請確保Pods資源均處于Running狀態,否則在Kibana平臺有可能會看不到相應數據。 - 在Kibana查看實時日志。
通過Elastic APM實現應用程序性能監測
Elastic APM是基于Elastic Stack構建的應用程序性能監控系統。它提供實時監控軟件服務和應用程序的功能,采集傳入請求的響應時間和數據庫查詢、高速緩存調用及外部HTTP請求等的詳細性能信息,幫助您更快速的查明并修復性能問題。Elastic APM還可以自動收集未處理的錯誤、異常及調用棧,幫助您識別出新錯誤,并關注對應錯誤發生的次數。
關于Elastic APM更多的介紹,請參見Elastic APM Overview。
- 部署APM Server容器。
本文示例使用Kubernetes部署,通過ConfigMap控制器定義apm-server.yml文件,并初始化Pods啟動,通過service實現服務自動發現和負載均衡。
- 配置APM Agents。
本文示例是通過Spring Boot實現一個簡單的Web應用并打包為JAR包,并將JAR包和從Maven Central下載的最新Java Agent上傳到服務器。詳細信息,請參見 Spring Boot和 Maven Central。
- 在Kibana控制臺查看APM監控數據。
常見問題
- 問題:Kubernetes配置文件中resources.requests下資源設置較大,Pods無法啟動成功。
解決方案:Metricbeat、Filebeat、APM配置文件中都需要設置resources.requests,建議根據Kubernetes集群規格適當調整設置的值。
- 問題:在部署Metricbeat、Filebeat、APM容器時,一直報錯。報錯內容類似:
no matches for kind "DaemonSet" in version "extensions/v1beat1"
。解決方案:官方下載的YML文件中,Daemonsets和Deployments的資源使用extensions/v1beta1,而v1.18及以上版本的Kubernetes,Daemonsets、Deployments和Replicasets資源的extensions/v1beta1 API將被廢棄,請使用apps/v1。