微服务组件记事本:Skywalking的ES索引·收藏篇
(2021年倒计时33天)
书接上⽂,在上回书中,我们说到了《》,⽂章⽐较详细的展⽰了Skywalking中的各种数据和图表展⽰,有些⼩伙伴⾥问我,这些图表能不能控制展⽰或隐藏?这些图表⼜是对应的什么意思?能否查看具体的数据内容么?答案都是肯定的,如果你要是使⽤MySql作为持久化⽅案,可能看起来更直观些,
毕竟我们使⽤数据库都好多年了。不过官⽅更建议的是使⽤ElasticSearch(下⽂统称ES)来做持久化⽅案,所以今天咱们就来看看ES来记录Skywalking数据,都有哪些索引。
本⽂建议收藏下,⽅便以后即时查询,必须在微服务中Skywalking这类的APM应⽤是刚需。
ES 索引概括和地址
⽤ES来存储Skywalking数据,每天会⽣成114个索引,这个不是动态的哟,⽽是官⽅定义好的,当然你也可以⾃⼰根据需要做其他兼容,这个另说了。114个索引中,分成五⼤模块,约⼗个⼩模块,今天咱们都具体说说每个模块都有哪些索引(注意:本⽂说到的是Skywalking-aop的8.3.0版本,其他版本可能有细微差别)。
那如何来寻这些索引呢,很简单。
1、直接页⾯内查,这种⽅式很简单,其实页⾯第⼀个banner仪表盘中的图表,每⼀个都会是⼀个或多个索引,注意不是⼀对⼀或者唯⼀的哟,因为⼀个索引可能存在与多个图表上,⾄于如何寻,可以看左上⾓的那个⼩锁,点⼀下就有惊喜。
2、直接在页⾯上看,也只能看到索引名,那每个名字什么意思,或者如何计算呢,可以直接看官⽅配置⽂件。
启动OAP服务(本⽂统⼀都是⽤DOCKER来启动的,启动过程可以看我之前写的《》⽂章),启动后,进⼊容器,然后在config⽂件夹下会看到⼀个oal的⽂件夹。
进⼊oal⽂件夹,会看到有五个*.oal⽂件:
browser.oal
core.oal
dotnet-agent.oal
envoy.oal
java-agent.oal
OAL含义是观测分析语⾔(Observability Analysis Language),是Skywalking⽤来分析流⼊的数据。OAL专注于服务、服务实例以及端点的度量指标,因此OAL⾮常易于学习和使⽤,你也同时可以简单地改变和重新启动服务器,使其有效。OAL脚本本书是编译语⾔,通过OAL运⾏时动态⽣成Java代码。
你可以在环境变量中设置SW_OAL_ENGINE_DEBUG=Y,查看⽣成了哪些类。
上边七个⽂件从名字上,我们就能对其功能可见⼀斑,浏览器、核⼼(指服务)、两个探针(dotnet和java)和envoy相关。
浏览器模块:browser.oal(33)
我们查看下browser.oal⽂件,可以看到很多的索引名称和计算⽅式,咱们分成2个⼦模块来说,打开Skywalking-ui看到仪表盘-WebBrowser栏⽬下,有两个⼦模块,分别是Web APP指标和Pages指标:
Web App ⼦模块(6个索引)
browser_app_pv = unt).filter(trafficCategory == BrowserAppTrafficCategor
y.NORMAL).sum();
// app的错误率
browser_app_error_rate = from(BrowserAppTraffic.*).rate(trafficCategory == BrowserAppTrafficCategory.FIRST_ERROR,trafficCategory == BrowserAppTrafficCa // app的错误数
browser_app_error_sum = unt).filter(trafficCategory != BrowserAppTrafficCategory.NORMAL).sum();
// app单⼀版本的pv数
browser_app_single_version_pv = unt).filter(trafficCategory == BrowserAppTrafficCategory.NORMAL).sum();
// app单⼀版本的错误率
browser_app_single_version_error_rate = afficCategory).rate(trafficCategory == BrowserAppTrafficCategory.FIRST_ERR // app单⼀版本的错误总数
browser_app_single_version_error_sum = unt).filter(trafficCategory != BrowserAppTrafficCategory.NORMAL).sum();
Pages 页⾯⼦模块(27个索引)
browser_app_page_pv = unt).filter(trafficCategory == BrowserAppTrafficCategory.NORMAL).sum();
// 页⾯错误率
browser_app_page_error_rate = from(BrowserAppPageTraffic.*).rate(trafficCategory == BrowserAppTrafficCategory.FIRST_ERROR,trafficCategory == BrowserA // 页⾯错误总数
browser_app_page_error_sum = unt).filter(trafficCategory != BrowserAppTrafficCategory.NORMAL).sum();
// 页⾯ajax请求错误数
browser_app_page_ajax_error_sum = unt).filter(trafficCategory != BrowserAppTrafficCategory.NORMAL).filter(errorCategory == // 页⾯资源请求错误数
browser_app_page_resource_error_sum = unt).filter(trafficCategory != BrowserAppTrafficCategory.NORMAL).filter(errorCategory // 页⾯js执⾏错误数
browser_app_page_js_error_sum = unt).filter(trafficCategory != BrowserAppTrafficCategory.NORMAL).filter(errorCategory in [Bro // 页⾯未知异常错误数
browser_app_page_unknown_error_sum = unt).filter(trafficCategory != BrowserAppTrafficCategory.NORMAL).filter(errorCategor
// 页⾯平均跳转时间
browser_app_page_redirect_avg = directTime).longAvg();
// 页⾯平均dns时间
browser_app_page_dns_avg = from(BrowserAppPagePerf.dnsTime).longAvg();
// 页⾯平均响应时间
browser_app_page_ttfb_avg = fbTime).longAvg();
/
/ 页⾯平均tcp连接时间
browser_app_page_tcp_avg = pTime).longAvg();
// 页⾯平均trans时间
browser_app_page_trans_avg = ansTime).longAvg();
// 页⾯平均dom分析时间
browser_app_page_dom_analysis_avg = from(BrowserAppPagePerf.domAnalysisTime).longAvg();
// 页⾯平均fpt时间
browser_app_page_fpt_avg = from(BrowserAppPagePerf.fptTime).longAvg();
// 页⾯平均dom准备时间
browser_app_page_dom_ready_avg = from(BrowserAppPagePerf.domReadyTime).longAvg();
// 页⾯平均加载完成时间
browser_app_page_load_page_avg = from(BrowserAppPagePerf.loadPageTime).longAvg();
// 页⾯平均响应时间
browser_app_page_res_avg = sTime).longAvg();
// 页⾯平均ssl时间
browser_app_page_ssl_avg = from(BrowserAppPagePerf.sslTime).longAvg();
// 页⾯平均⽣存时间
browser_app_page_ttl_avg = lTime).longAvg();
// 页⾯平均⾸包时间
browser_app_page_first_pack_avg = from(BrowserAppPagePerf.firstPackTime).longAvg();
// 页⾯平均⾸次绘画完成时间
browser_app_page_fmp_avg = from(BrowserAppPagePerf.fmpTime).longAvg();
/
/ 以下均是功能指标:包括 p50, p75, p90, p95, p99
browser_app_page_fpt_percentile = from(BrowserAppPagePerf.fptTime).percentile(10);
browser_app_page_ttl_percentile = lTime).percentile(10);
browser_app_page_dom_ready_percentile = from(BrowserAppPagePerf.domReadyTime).percentile(10);
browser_app_page_load_page_percentile = from(BrowserAppPagePerf.loadPageTime).percentile(10);
browser_app_page_first_pack_percentile = from(BrowserAppPagePerf.firstPackTime).percentile(10);
browser_app_page_fmp_percentile = from(BrowserAppPagePerf.fmpTime).percentile(10);
核⼼服务模块:core.oal(38)
服务相关的索引,基本都是在仪表盘-APM和Database菜单⾥,⽽在APM栏⽬⾥⼜有四个⼦栏⽬,因此分成五个部分。分别是全局指标、
服务间指标、服务实例指标、终端指标、数据库指标。
APM全局指标(7个索引)
// Multiple values including p50, p75, p90, p95, p99
all_percentile = from(All.latency).percentile(10);
all_heatmap = from(All.latency).histogram(100, 20);
// 服务的平均响应时间
service_resp_time = from(Service.latency).longAvg();
// 服务的请求成功率
service_sla = from(Service.*).percent(status == true);
// 服务的每分钟调⽤次数
service_cpm = from(Service.*).cpm();
// Multiple values including p50, p75, p90, p95, p99
service_percentile = from(Service.latency).percentile(10);
// 服务的apdex应⽤性能指标
service_apdex = from(Service.latency).apdex(name, status);
服务之间调⽤指标(8个索引)
// 在客户端检测每分钟调⽤次数
service_relation_client_cpm = from(ServiceRelation.*).filter(detectPoint == DetectPoint.CLIENT).cpm();
// 在服务端检测每分钟调⽤次数
service_relation_server_cpm = from(ServiceRelation.*).filter(detectPoint == DetectPoint.SERVER).cpm();
// 在客户端检测到的成功率
service_relation_client_call_sla = from(ServiceRelation.*).filter(detectPoint == DetectPoint.CLIENT).percent(status == true); // 在服务端检测到的成功率
service_relation_server_call_sla = from(ServiceRelation.*).filter(detectPoint == DetectPoint.SERVER).percent(status == true); // 在客户端检测到的平均响应时间
service_relation_client_resp_time = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.CLIENT).longAvg();微服务在哪里
// 在服务端检测到的平均响应时间
service_relation_server_resp_time = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.SERVER).longAvg();
// Multiple values including p50, p75, p90, p95, p99
service_relation_client_percentile = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.CLIENT).percentile(10); service_relation_server_percentile = from(ServiceRelation.latency).filter(detectPoint == DetectPoint.SERVER).percentile(10);
服务实例之间的调⽤指标(11个索引)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论