Skywalking中OAP的概念:OAP(Observability Analysis Platform)可觀測性分析平臺是一個新的概念,始于skywalking6.X。OAP可以從多種數(shù)據(jù)源接收數(shù)據(jù),分為兩組:Tracing和Metrics。從6.2.0開始因為登錄認證的安全漏洞問題炎码,移除了登錄認證。
1秋泳、下載
目前最新為6.5.0辅肾,下載地址http://skywalking.apache.org/downloads/
2、安裝和配置
下載完成以后轮锥,解壓后進入/ apache-skywalking-apm-bin文件夾矫钓,得到如下圖所示文件夾列表:
進入config文件夾修改application.yml文件,core.default模塊為默認配置舍杜,一般不需要修改新娜,如果要修改IP或者端口,則直接修改對應(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(默認)和請求restHost:restPort用于GraphQL查詢私杜。
儲存數(shù)據(jù)庫注釋H2,放開ElasticSearch配置救欧,如下圖所示:
其中衰粹,nameSpace為elasticsearch的集群名稱cluster.name,clusterNodes處添加elasticsearch的【ip:端口】笆怠,多個es集群節(jié)點以逗號分隔铝耻。ElasticSearch需要6.3.2或更高版本,官方文檔寫的不高于7.0.0蹬刷,未驗證(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配置:進入/agent/config文件夾打開agent.config文件,設(shè)置agent.service_name办成,設(shè)置collector.backend_service 泡态,默認連接到 127.0.0.1:11800;
UI界面訪問端口設(shè)置:修改/webapp/webapp.yml文件中的server.port端口即可迂卢。
SkyWalking支持對以下內(nèi)容進行動態(tài)配置:
默認動態(tài)配置是關(guān)閉的某弦,在/config/application.yml中configuration處配置桐汤。已有的實現(xiàn)有Apollo、Nacos刀崖、Zookeeper惊科、Consul拍摇。其中nacos配置如下,此處的config key為nacos中的dataId亮钦,namespace即命名空間對應(yīng)的id,覆蓋yml配置則屬性文件后綴名選yaml,對于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ù)
在啟動應(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命令赘淮,如下圖:
以上三種配置辕录,如果需要指定服務(wù)名稱,則增加
-Dskywalking.agent.service_name=application_name命令梢卸。
4走诞、skywalking初始化及啟動
當(dāng)集群部署SkyWalking的時候多實例同時啟動會存在并發(fā)初始化問題,所以在啟動之前運行一個單實例執(zhí)行初始化動作蛤高,通過執(zhí)行oapServiceInit.sh/oapServiceInit.bat進行初始化蚣旱,可初始化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:如果未進行初始化會進行初始化操作恤批,然后開啟監(jiān)聽提供服務(wù)位隶。
/bin/oapServiceInit.bat:進行初始化操作,然后會退出开皿。
/bin/oapServiceNoInit.bat:不進行初始化啟動涧黄,會等待es索引、或者mysql赋荆、TIDB表存在笋妥,然后開始監(jiān)聽并提供服務(wù)。意味著oap服務(wù)器等待其他oap服務(wù)器進行初始化窄潭。
/bin/webappService.bat:啟動UI服務(wù)春宣。
/bin/startup.bat:同時啟動oapService.bat和webappService.bat。
5、界面訪問
啟動ElasticSearch月帝,進入/bin文件夾運行startup.bat文件啟動skywalking躏惋,沒問題的話訪問http://localhost:8080即可看到skywalking控制臺,如下圖所示即啟動成功:
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}.({時間戳} * 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
手動追蹤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處配置,默認為cluster.standalone單機模式怔软】严福可配置集群有zookeeper、kubernetes爽雄、consul蝠检、nacos。配置集群模式時注釋掉standalone模式挚瘟。集群模式下叹谁,各個實例的采樣率建議設(shè)置一致,否則可能會導(dǎo)致數(shù)據(jù)丟失風(fēng)險乘盖。采樣率配置在/config/application.yml中焰檩,receiver-trace.Default.sampleRate。agent配置:/agent/config/agent.config文件中的collector.backend_service多個節(jié)點以英文逗號分隔订框。示例如下: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多個逗號分隔析苫,示例:127.0.0.1:12800,127.0.0.1:12801
以nacos集群為例:
啟動nacos以后,SkyWalking的webapp服務(wù)啟動一個即可穿扳,collector服務(wù)分別執(zhí)行每個節(jié)點的/bin/oapService.bat啟動衩侥。成功啟動以后就會在nacos服務(wù)列表看到collector啟動的服務(wù)實例,如下圖:
8矛物、告警配置
Alarm模塊由兩部分組成:
Alarm rules: 定義了如何觸發(fā)度量警告茫死,應(yīng)該考慮什么條件。
Webhooks:警告被觸發(fā)以后web服務(wù)的端點列表中哪一個端點應(yīng)該被調(diào)用履羞。
Alarm rule由以下key組成:
Rule name: 在告警信息中顯示的唯一名稱峦萎。必須以_rule結(jié)尾屡久。
Metrics name: 是oal腳本中的度量名。只支持long,double和int類型爱榔。
Include names:以下實體名稱包含在此規(guī)則中被环,如服務(wù)名、端點名详幽。
Exclude names:以下實體名稱不包含在此規(guī)則中筛欢,如服務(wù)名、端點名妒潭。
Threshold:閾值悴能。
OP: 操作符支持 >, <, =揣钦。
Period: 多久告警規(guī)則需要被核實一下雳灾。這是一個時間窗口,與后端部署環(huán)境時間相匹配冯凹。
Count: 在一個Period窗口中谎亩,如果超過Threshold值(按op)的次數(shù)等于Count值,需要發(fā)送警報宇姚。
Slience period:靜默時間匈庭。在某個時間點出發(fā)告警以后,在接下來period的時間段內(nèi)將會保持靜默浑劳。默認值與period相同阱持,意味著在一段時間內(nèi),相同的告警(相同的度量名稱相同的id)只會觸發(fā)一次魔熏。
Webhook要求對等方是一個 Web 容器. 告警的消息會通過 HTTP請求進行發(fā)送, 請求方法為 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實體名稱蒜绽。
id0:scope
實體的ID镶骗。
id1:暫未用。
ruleName: 配置在alarm-settings.yml中的規(guī)則名稱躲雅。
alarmMessage: 告警文本信息
startTime: 當(dāng)前時間到UTC 1970年1月1日半夜12點毫秒值鼎姊。
示例:
[{
"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對比以及它的概念相赁、使用相寇。
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界面體驗
10唤衫、UI界面介紹
CPM:每分鐘請求調(diào)用次數(shù)(平均吞吐量)。
SLA: 服務(wù)等級協(xié)議(簡稱:SLA跺嗽,全稱:service level agreement)战授。是在一定開銷下為保障服務(wù)的性能和可用性页藻,服務(wù)提供商與用戶間定義的一種雙方認可的協(xié)定。通常這個開銷是驅(qū)動提供服務(wù)質(zhì)量的主要因素植兰。即服務(wù)可用性份帐,如99.9,99.99,99.999
CLR:(公共語言運行庫,Common Language Runtime)和 Java 虛擬機一樣也是一個運行時環(huán)境,是一個可由多種編程語言使用的運行環(huán)境楣导。CLR 的核心功能包括:內(nèi)存管理废境、程序集加載、安全性筒繁、異常處理和線程同步噩凹,可由面向 CLR 的所有語言使用。并保證應(yīng)用和底層操作系統(tǒng)之間必要的分離毡咏。
百分位數(shù):skywalking中有P50驮宴,P75,P90呕缭,P95堵泽,P99這種統(tǒng)計口徑,就是百分位數(shù)的概念恢总。
圖例:如下圖迎罗,表示12月16日,14:53分這個時間點探針反饋的統(tǒng)計結(jié)果來看片仿,有50%的請求響應(yīng)時間低于1020ms纹安,有75%的請求響應(yīng)時間低于1200ms,有90%的請求響應(yīng)時間低于2150ms砂豌,有95%的請求響應(yīng)時間低于3140ms厢岂,有99%的請求響應(yīng)時間低于3220ms。