使用SkyWalking+elasticsearch實現全鏈路監控

隨着微服務架構的流行,一些微服務架構下的問題也會越來越突出,比如一個請求會涉及多個服務,而服務本身可能也會依賴其他服務,整個請求路徑就構成了一個網狀的調用鏈,而在整個調用鏈中一旦某個節點發生異常,整個調用鏈的穩定性就會受到影響。
使用SkyWalking+elasticsearch實現全鏈路監控
面對以上情況, 我們就需要一些可以幫助理解系統行爲、用於分析性能問題的工具,以便發生故障的時候,能夠快速定位和解決問題。這時候分佈式追蹤系統就該閃亮登場了。

一、分佈式追蹤系統skywalking

1、什麼是分佈式追蹤?
使用SkyWalking+elasticsearch實現全鏈路監控
上圖是常見的微服務的框架,4個實例,2個MySQL、1個Redis。實際上它有兩次完全不同的請求進來:有一次的一個請求會訪問 Redis,再去訪問MySQL;另外一個可能走到另外的服務上,然後直接去MySQL。整個分佈式追蹤的目的是什麼?是爲了讓我們最終在頁面上、UI上、和數據上能夠復現這個過程。我們要拿到整個完整的鏈路,包括精確的響應時間,訪問的方法、訪問的circle,訪問的Redis的key等,這些是我們在做分佈式追蹤的時候需要展現的一個完整的信息。
2、skywalking簡介

SkyWalking 是針對分佈式系統的 APM 系統,也被稱爲分佈式追蹤系統
* 全自動探針監控,不需要修改應用程序代碼。查看支持的中間件和組件庫列表:https://github.com/apache/incubator-skywalking
* 支持手動探針監控, 提供了支持 OpenTracing 標準的SDK。覆蓋範圍擴大到 OpenTracing-Java 支持的組件。查看OpenTracing組件支持列表:https://github.com/opentracing-contrib/meta
* 自動監控和手動監控可以同時使用,使用手動監控彌補自動監控不支持的組件,甚至私有化組件。
* 純 Java 後端分析程序,提供 RESTful 服務,可爲其他語言探針提供分析能力。
* 高性能純流式分析

使用SkyWalking+elasticsearch實現全鏈路監控
SkyWalking 的核心是數據分析和度量結果的存儲平臺,通過 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量數據,SkyWalking Collecter 對數據進行分析和聚合,存儲到 Elasticsearch、H2、MySQL、TiDB 等其一即可,最後我們可以通過 SkyWalking UI 的可視化界面對最終的結果進行查看。Skywalking 支持從多個來源和多種格式收集數據:多種語言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘測、Envoy 度量等數據格式。
下面基於Linux環境部署SkyWalking+elasticsearch。

二、部署前的準備工作

1、關閉 selinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
sed -i 's/SELINUXTYPE=targeted/#&/' /etc/selinux/config
setenforce 0

2、安裝需要用的工具

yum -y install vim wget java

3、下載SkyWalking和elasticsearch
SkyWalking和elasticsearch都提供編譯好的包,下載下來解壓後直接使用。

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版本
4、防火牆開放以下端口

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

三、部署elasticsearch

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/進行驗證
使用SkyWalking+elasticsearch實現全鏈路監控
出現以上頁面說明elasticsearch安裝OK。

四、部署SkyWalking

tar zxvf apache-skywalking-apm-6.4.0.tar.gz

修改SkyWalking配置

vim apache-skywalking-apm-bin/config/application.yml

將h2內容註釋掉,啓用elasticsearch內容,使用elasticsearch存儲數據。
使用SkyWalking+elasticsearch實現全鏈路監控
注:nameSpace需要與elasticsearch的cluster.name保持一致
啓動SkyWalking

cd apache-skywalking-apm-bin/bin/
./startup.sh

驗證,瀏覽器訪問http://192.168.2.211:8080/
使用SkyWalking+elasticsearch實現全鏈路監控
能正常訪問表示安裝OK。

五、Java項目接入

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頁面刷新一下,便可看到數據了。
使用SkyWalking+elasticsearch實現全鏈路監控
點擊“追蹤”可以看到詳細內容。
使用SkyWalking+elasticsearch實現全鏈路監控
使用SkyWalking+elasticsearch實現全鏈路監控

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章