隨着微服務架構的流行,一些微服務架構下的問題也會愈來愈突出,好比一個請求會涉及多個服務,而服務自己可能也會依賴其餘服務,整個請求路徑就構成了一個網狀的調用鏈,而在整個調用鏈中一旦某個節點發生異常,整個調用鏈的穩定性就會受到影響。
面對以上狀況, 咱們就須要一些能夠幫助理解系統行爲、用於分析性能問題的工具,以便發生故障的時候,可以快速定位和解決問題。這時候分佈式追蹤系統就該閃亮登場了。java
一、什麼是分佈式追蹤?
上圖是常見的微服務的框架,4個實例,2個MySQL、1個Redis。實際上它有兩次徹底不一樣的請求進來:有一次的一個請求會訪問 Redis,再去訪問MySQL;另一個可能走到另外的服務上,而後直接去MySQL。整個分佈式追蹤的目的是什麼?是爲了讓咱們最終在頁面上、UI上、和數據上可以復現這個過程。咱們要拿到整個完整的鏈路,包括精確的響應時間,訪問的方法、訪問的circle,訪問的Redis的key等,這些是咱們在作分佈式追蹤的時候須要展示的一個完整的信息。
二、skywalking簡介linux
SkyWalking 是針對分佈式系統的 APM 系統,也被稱爲分佈式追蹤系統 * 全自動探針監控,不須要修改應用程序代碼。查看支持的中間件和組件庫列表:https://github.com/apache/incubator-skywalking * 支持手動探針監控, 提供了支持 OpenTracing 標準的SDK。覆蓋範圍擴大到 OpenTracing-Java 支持的組件。查看OpenTracing組件支持列表:https://github.com/opentracing-contrib/meta * 自動監控和手動監控能夠同時使用,使用手動監控彌補自動監控不支持的組件,甚至私有化組件。 * 純 Java 後端分析程序,提供 RESTful 服務,可爲其餘語言探針提供分析能力。 * 高性能純流式分析
SkyWalking 的核心是數據分析和度量結果的存儲平臺,經過 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量數據,SkyWalking Collecter 對數據進行分析和聚合,存儲到 Elasticsearch、H二、MySQL、TiDB 等其一便可,最後咱們能夠經過 SkyWalking UI 的可視化界面對最終的結果進行查看。Skywalking 支持從多個來源和多種格式收集數據:多種語言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘測、Envoy 度量等數據格式。
下面基於Linux環境部署SkyWalking+elasticsearch。git
一、關閉 selinuxgithub
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config sed -i 's/SELINUXTYPE=targeted/#&/' /etc/selinux/config setenforce 0
二、安裝須要用的工具apache
yum -y install vim wget java
三、下載SkyWalking和elasticsearch
SkyWalking和elasticsearch都提供編譯好的包,下載下來解壓後直接使用。vim
cd /data/ wget https://www-eu.apache.org/dist/skywalking/6.4.0/apache-skywalking-apm-6.4.0.tar.gz wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
注:SkyWalking 6.4.0目前只支持elasticsearch 6.x版本
四、防火牆開放如下端口後端
firewall-cmd --permanent --add-port=9200/tcp firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --permanent --add-port=11800/tcp firewall-cmd --permanent --add-port=12800/tcp firewall-cmd --reload
tar zxvf elasticsearch-7.4.0-linux-x86_64.tar.gz mv elasticsearch-6.6.2 elasticsearch
修改elasticsearch配置瀏覽器
vim elasticsearch/config/elasticsearch.yml cluster.name: CollectorDBCluster path.data: /data/elasticsearch/data path.logs: /data/elasticsearch/logs network.host: 0.0.0.0 http.port: 9200
建立啓動用戶服務器
useradd els -p 123456 chown -R els:els /data/elasticsearch
修改limit數量,須要從新登錄系統生效架構
vim /etc/security/limits.conf #添加如下內容 * soft nofile 75535 * hard nofile 75535
修改內核參數vm.max_map_count
vim /etc/sysctl.conf #添加如下內容 vm.max_map_count=262144
執行如下命令生效
sysctl -p
切換到els用戶,啓動elasticsearch
su - els /data/elasticsearch/bin/elasticsearch -d
瀏覽器訪問http://192.168.2.211:9200/進行驗證
出現以上頁面說明elasticsearch安裝OK。
tar zxvf apache-skywalking-apm-6.4.0.tar.gz
修改SkyWalking配置
vim apache-skywalking-apm-bin/config/application.yml
將h2內容註釋掉,啓用elasticsearch內容,使用elasticsearch存儲數據。
注:nameSpace須要與elasticsearch的cluster.name保持一致
啓動SkyWalking
cd apache-skywalking-apm-bin/bin/ ./startup.sh
驗證,瀏覽器訪問http://192.168.2.211:8080/
能正常訪問表示安裝OK。
skywalking支持不少項目,好比Java、.net、github、sample等,這裏我只講下Java項目的接入使用,其餘項目你們可自行查看官方文檔。
修改agent/config/agent.config文件內容,只須要修改如下兩行
agent.service_name=${SW_AGENT_NAME:YFW_Java} collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.2.211:11800}
注:agent.servicename是你的java項目的名稱;collector.backendservice是項目鏈接skywalking的IP地址和端口號。
將agent打包並上傳到java項目服務器上,在java程序啓動時添加下面這個參數啓動便可。
-javaagent:/yibang/agent/skywalking-agent.jar
注:指定skywalking-agent.jar文件的完整路徑
而後將skywalking頁面刷新一下,即可看到數據了。
點擊「追蹤」能夠看到詳細內容。