SkyWalking安裝和使用

image

Skywalking中OAP的概念:OAP(Observability Analysis Platform)可觀測(cè)性分析平臺(tái)是一個(gè)新的概念,始于skywalking6.X。OAP可以從多種數(shù)據(jù)源接收數(shù)據(jù),分為兩組:Tracing和Metrics。從6.2.0開始因?yàn)榈卿浾J(rèn)證的安全漏洞問題,移除了登錄認(rèn)證。

1、下載

目前最新為6.5.0,下載地址http://skywalking.apache.org/downloads/

2、安裝和配置

    下載完成以后,解壓后進(jìn)入/ apache-skywalking-apm-bin文件夾,得到如下圖所示文件夾列表:
image
    進(jìn)入config文件夾修改application.yml文件,core.default模塊為默認(rèn)配置,一般不需要修改,如果要修改IP或者端口,則直接修改對(duì)應(yīng)的IP地址和端口即可,修改restHost和restPort后也需要同步修改/webapp文件夾下webapp.yml文件中collector.ribbon.listOfServers的配置。后端接收數(shù)據(jù)監(jiān)聽端口有restHost:restPort用于http rest APIs,gRPCHost:gRPCPort用于gRPC APIs。UI監(jiān)聽端口8080(默認(rèn))和請(qǐng)求restHost:restPort用于GraphQL查詢。

儲(chǔ)存數(shù)據(jù)庫(kù)注釋H2,放開ElasticSearch配置,如下圖所示:

image

其中,nameSpace為elasticsearch的集群名稱cluster.name,clusterNodes處添加elasticsearch的【ip:端口】,多個(gè)es集群節(jié)點(diǎn)以逗號(hào)分隔。ElasticSearch需要6.3.2或更高版本,官方文檔寫的不高于7.0.0,未驗(yàn)證(Required ElasticSearch 6.3.2 or higher, excepted 7.0.0 or higher)。官方文檔建議ES增加如下配置:

thread_pool.index.queue_size: 1000 # Only suitable for ElasticSearch 6
thread_pool.write.queue_size: 1000 # Suitable for ElasticSearch 6 and 7
index.max_result_window: 1000000

agent配置:進(jìn)入/agent/config文件夾打開agent.config文件,設(shè)置agent.service_name,設(shè)置collector.backend_service ,默認(rèn)連接到 127.0.0.1:11800;

UI界面訪問端口設(shè)置:修改/webapp/webapp.yml文件中的server.port端口即可。

SkyWalking支持對(duì)以下內(nèi)容進(jìn)行動(dòng)態(tài)配置:

image

默認(rèn)動(dòng)態(tài)配置是關(guān)閉的,在/config/application.yml中configuration處配置。已有的實(shí)現(xiàn)有Apollo、Nacos、Zookeeper、Consul。其中nacos配置如下,此處的config key為nacos中的dataId,namespace即命名空間對(duì)應(yīng)的id,覆蓋yml配置則屬性文件后綴名選yaml,對(duì)于receiver-trace.default.slowDBAccessThreshold,文件后綴選text:

configuration:
  nacos:
    # Nacos Server Host
    serverAddr: 127.0.0.1
    # Nacos Server Port
    port: 8848
    # Nacos Configuration Group
    group: 'skywalking'
    # Nacos Configuration namespace
    namespace: ''
    # Unit seconds, sync period. Default fetch every 60 seconds.
    period : 60
    # the name of current cluster, set the name if you want to upstream system known.
    clusterName: "default"

3、應(yīng)用中探針接入

agent支持的服務(wù)清單列表查看如下鏈接:https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/Supported-list.md

>>基于tomcat的服務(wù)

在tomcat的bin目錄下,查看是否存在setenv.bat文件(linux為setenv.sh),不存在創(chuàng)建,并添加一行命令,set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar",linux下添加以下命令CATALINA_OPTS="$CATALINA_OPTS-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"; exportCATALINA_OPTS

>>基于jar file的服務(wù)

在啟動(dòng)應(yīng)用程序的命令行添加-javaagent參數(shù),并確保在-jar參數(shù)之前添加它。命令如下:java -javaagent: /path/to/skywalking-agent/skywalking-agent.jar-jar yourApp.jar

idea中配置:打開run->Edit Configurations面板,在VM options處輸入-javaagent:/path/to/skywalking-agent/skywalking-agent.jar命令,如下圖:

image

以上三種配置,如果需要指定服務(wù)名稱,則增加

-Dskywalking.agent.service_name=application_name命令。

image
image

4、skywalking初始化及啟動(dòng)

當(dāng)集群部署SkyWalking的時(shí)候多實(shí)例同時(shí)啟動(dòng)會(huì)存在并發(fā)初始化問題,所以在啟動(dòng)之前運(yùn)行一個(gè)單實(shí)例執(zhí)行初始化動(dòng)作,通過執(zhí)行oapServiceInit.sh/oapServiceInit.bat進(jìn)行初始化,可初始化ES索引,MYSQL,TIDB以及一些初始化數(shù)據(jù),執(zhí)行成功看到如下日志:

2018-11-09 23:04:39,465 -org.apache.skywalking.oap.server.starter.OAPServerStartUp -2214 [main] INFO []- OAP starts up in init mode successfully, exit now...。

/bin/oapService.bat:如果未進(jìn)行初始化會(huì)進(jìn)行初始化操作,然后開啟監(jiān)聽提供服務(wù)。
/bin/oapServiceInit.bat:進(jìn)行初始化操作,然后會(huì)退出。
/bin/oapServiceNoInit.bat:不進(jìn)行初始化啟動(dòng),會(huì)等待es索引、或者mysql、TIDB表存在,然后開始監(jiān)聽并提供服務(wù)。意味著oap服務(wù)器等待其他oap服務(wù)器進(jìn)行初始化。
/bin/webappService.bat:啟動(dòng)UI服務(wù)。
/bin/startup.bat:同時(shí)啟動(dòng)oapService.bat和webappService.bat。

5、界面訪問

啟動(dòng)ElasticSearch,進(jìn)入/bin文件夾運(yùn)行startup.bat文件啟動(dòng)skywalking,沒問題的話訪問http://localhost:8080即可看到skywalking控制臺(tái),如下圖所示即啟動(dòng)成功:

image

6、日志中traceId輸出

關(guān)于trace相關(guān)概念看中文翻譯https://wu-sheng.gitbooks.io/opentracing-io/content/或者:https://github.com/opentracing-contrib/opentracing-specification-zh/blob/master/specification.md
traceId格式:{service_instance_id}.{thread_id}.({時(shí)間戳} * 10000 + 線程自增序列([0, 9999]))
日志為log4j2如果要在監(jiān)控的應(yīng)用中輸出traceId,首先引入如下依賴:

<dependency>
      <groupId>org.apache.skywalking</groupId>      
     <artifactId>apm-toolkit-log4j-2.x</artifactId>      
     <version>{project.release.version}</version>
</dependency>

然后修改log4j2.xml的日志輸出格式增加[%traceId]即可。更多信息查看官方文檔
https://github.com/apache/skywalking/blob/v6.5.0/docs/en/setup/service-agent/java-agent/Application-toolkit-log4j-2.x.md
日志為logback的話,引入如下依賴:

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-logback-1.x</artifactId>
    <version>{project.release.version}</version>
</dependency>

修改logback.xml的日志輸出格式,增加%tid即可。更多信息查看官方文檔https://github.com/apache/skywalking/blob/v6.5.0/docs/en/setup/service-agent/java-agent/Application-toolkit-logback-1.x.md

手動(dòng)追蹤traceId,首先引入如下依賴:

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>${skywalking.version}</version>
</dependency>

然后在想要追蹤的方法上增加@Trace注解,該方法內(nèi)部即可通過TraceContext.traceId()方法獲取traceId,亦可通過ActiveSpan.tag("my_tag","my_value");增加標(biāo)簽標(biāo)記。

7、集群配置

/config/application.yml文件下cluster處配置,默認(rèn)為cluster.standalone單機(jī)模式??膳渲眉河衵ookeeper、kubernetes、consul、nacos。配置集群模式時(shí)注釋掉standalone模式。集群模式下,各個(gè)實(shí)例的采樣率建議設(shè)置一致,否則可能會(huì)導(dǎo)致數(shù)據(jù)丟失風(fēng)險(xiǎn)。采樣率配置在/config/application.yml中,receiver-trace.Default.sampleRate。agent配置:/agent/config/agent.config文件中的collector.backend_service多個(gè)節(jié)點(diǎn)以英文逗號(hào)分隔。示例如下:collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800,127.0.0.1:11801}
webapp配置:/webapp/webapp.yml文件中collector.ribbon.listOfServers多個(gè)逗號(hào)分隔,示例:127.0.0.1:12800,127.0.0.1:12801
以nacos集群為例:
啟動(dòng)nacos以后,SkyWalking的webapp服務(wù)啟動(dòng)一個(gè)即可,collector服務(wù)分別執(zhí)行每個(gè)節(jié)點(diǎn)的/bin/oapService.bat啟動(dòng)。成功啟動(dòng)以后就會(huì)在nacos服務(wù)列表看到collector啟動(dòng)的服務(wù)實(shí)例,如下圖:


image

8、告警配置

Alarm模塊由兩部分組成:
Alarm rules: 定義了如何觸發(fā)度量警告,應(yīng)該考慮什么條件。
Webhooks:警告被觸發(fā)以后web服務(wù)的端點(diǎn)列表中哪一個(gè)端點(diǎn)應(yīng)該被調(diào)用。
Alarm rule由以下key組成:
Rule name: 在告警信息中顯示的唯一名稱。必須以_rule結(jié)尾。
Metrics name: 是oal腳本中的度量名。只支持long,double和int類型。
Include names:以下實(shí)體名稱包含在此規(guī)則中,如服務(wù)名、端點(diǎn)名。
Exclude names:以下實(shí)體名稱不包含在此規(guī)則中,如服務(wù)名、端點(diǎn)名。
Threshold:閾值。
OP: 操作符支持 >, <, =。
Period: 多久告警規(guī)則需要被核實(shí)一下。這是一個(gè)時(shí)間窗口,與后端部署環(huán)境時(shí)間相匹配。
Count: 在一個(gè)Period窗口中,如果超過Threshold值(按op)的次數(shù)等于Count值,需要發(fā)送警報(bào)。
Slience period:靜默時(shí)間。在某個(gè)時(shí)間點(diǎn)出發(fā)告警以后,在接下來period的時(shí)間段內(nèi)將會(huì)保持靜默。默認(rèn)值與period相同,意味著在一段時(shí)間內(nèi),相同的告警(相同的度量名稱相同的id)只會(huì)觸發(fā)一次。
Webhook要求對(duì)等方是一個(gè) Web 容器. 告警的消息會(huì)通過 HTTP請(qǐng)求進(jìn)行發(fā)送, 請(qǐng)求方法為 POST, Content-Type 為 application/json, JSON 格式基于List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage, 包含以下信息:
scopeId,scope:所有scope定義在org.apache.skywalking.oap.server.core.source.DefaultScopeDefine類中。
name:目標(biāo)scope實(shí)體名稱。
id0:scope
實(shí)體的ID。
id1:暫未用。
ruleName: 配置在alarm-settings.yml中的規(guī)則名稱。
alarmMessage: 告警文本信息
startTime: 當(dāng)前時(shí)間到UTC 1970年1月1日半夜12點(diǎn)毫秒值。
示例:
[{
"scopeId": 1,
"scope": "SERVICE",
"name": "serviceA",
"id0": 12,
"id1": 0,
"ruleName": "service_resp_time_rule",
"alarmMessage": "alarmMessage xxxx",
"startTime": 1560524171000
}, {
"scopeId": 1,
"scope": "SERVICE",
"name": "serviceB",
"id0": 23,
"id1": 0,
"ruleName": "service_resp_time_rule",
"alarmMessage": "alarmMessage yyy",
"startTime": 1560524171000
}]

9、參考鏈接

https://cloud.tencent.com/developer/article/1536086 skywalking與pinpoint對(duì)比以及它的概念、使用。

https://www.youtube.com/watch?v=JC-Anlshqx8 skywalking的UI界面使用視頻

https://github.com/apache/skywalking/blob/master/docs/en/guides/How-to-build.md 本地編譯調(diào)試。

https://blog.csdn.net/weixin_41618475/article/details/90263316

需要安裝npm環(huán)境和awk軟件。

https://gitee.com/OpenSkywalking/sky-walking 碼云skywalking地址

http://122.112.182.72:8080 skywalkingUI界面體驗(yàn)

10、UI界面介紹

CPM:每分鐘請(qǐng)求調(diào)用次數(shù)(平均吞吐量)。

SLA: 服務(wù)等級(jí)協(xié)議(簡(jiǎn)稱:SLA,全稱:service level agreement)。是在一定開銷下為保障服務(wù)的性能和可用性,服務(wù)提供商與用戶間定義的一種雙方認(rèn)可的協(xié)定。通常這個(gè)開銷是驅(qū)動(dòng)提供服務(wù)質(zhì)量的主要因素。即服務(wù)可用性,如99.9,99.99,99.999

CLR:(公共語(yǔ)言運(yùn)行庫(kù),Common Language Runtime)和 Java 虛擬機(jī)一樣也是一個(gè)運(yùn)行時(shí)環(huán)境,是一個(gè)可由多種編程語(yǔ)言使用的運(yùn)行環(huán)境。CLR 的核心功能包括:內(nèi)存管理、程序集加載、安全性、異常處理和線程同步,可由面向 CLR 的所有語(yǔ)言使用。并保證應(yīng)用和底層操作系統(tǒng)之間必要的分離。

百分位數(shù):skywalking中有P50,P75,P90,P95,P99這種統(tǒng)計(jì)口徑,就是百分位數(shù)的概念。

圖例:如下圖,表示12月16日,14:53分這個(gè)時(shí)間點(diǎn)探針反饋的統(tǒng)計(jì)結(jié)果來看,有50%的請(qǐng)求響應(yīng)時(shí)間低于1020ms,有75%的請(qǐng)求響應(yīng)時(shí)間低于1200ms,有90%的請(qǐng)求響應(yīng)時(shí)間低于2150ms,有95%的請(qǐng)求響應(yīng)時(shí)間低于3140ms,有99%的請(qǐng)求響應(yīng)時(shí)間低于3220ms。

image
image
image
image
image
image
image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容