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

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

1、分佈式追蹤系統skywalking

一、什麼是分佈式追蹤?
使用SkyWalking+elasticsearch實現全鏈路監控
上圖是常見的微服務的框架,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+elasticsearch實現全鏈路監控
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

2、部署前的準備工做

一、關閉 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

3、部署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。

4、部署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。

5、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實現全鏈路監控

相關文章
相關標籤/搜索