前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用性能监控-skywalking

应用性能监控-skywalking

作者头像
章工运维
发布2023-07-21 19:35:45
3370
发布2023-07-21 19:35:45
举报
文章被收录于专栏:章工运维章工运维

# 概述

随着应用功能越来越多,从单体架构发展到现在微服务架构,拆分的模块越来越细粒化,需要定位应用模块之间的问题困难越来越大,需要通过一些第三方工具去帮助我们快速定位和发现应用模块的问题,实现以下功能: 1、监控模块间响应时间展示 2、应用模块间调用链路展示 3、慢响应识别 市面上也有非常多的APM软件提供。主流开源的如SkyWalking、ZipKin、CAT、PinPoint、ElasticAPM。这些都是根开发语言有强绑定关系,并且需要业务加载对应的开发包和引入SDK,对业务具有一定的侵入性。目前还有新兴的解决方案,基于云原生ServiceMesh方式,对应用没有侵入性和开发语言绑定。

# SkyWalking介绍

基于Google分布式链路追踪论文Dapper开发,由中国工程师吴晟开发并开源贡献给Apache基金会,支持多种开发语言如Java、PHP、Go、C++、Node.js、Python、.NET、Lua……

# SkyWalking组件介绍

总体架构如下

f7579a7eec639de9.jpg
f7579a7eec639de9.jpg

SkyWalking架构总体分为四部分:

Agent:探针负责与各类开发语言和平台集成如ServiceMesh,进行Tracing和Metric数据收集。发送给Server端。 Server端(OAP):接受Agent采集发送过来的数据,进行数据分析、处理、聚合、查询以及将数据发送到后端存储。 Storage:支持多种后端存储(ElasticSearch、Mysql、Tidb…),接收Server端发送过来的数据。 UI: 进行数据计算后的结果统一展示和调用链路展示。

# SkyWalking安装

环境信息

软件

版本

kubernetes

v1.18.20

skywalking

v8.1.0

SkyWalking官方支持多种安装方式,这里为了快速部署,使用的是在Kubernetes上用Helm安装,后端存储使用ElasticSearch。 使用官方Helm安装方式最小化安装,后端存储使用ElasticSearch。 参考部署手册 https://github.com/apache/skywalking-kubernetes (opens new window)

环境

配置环境变量

export SKYWALKING_RELEASE_NAME=skywalking

export SKYWALKING_RELEASE_NAMESPACE=default 配置repo

代码语言:javascript
复制
export REPO=skywalking

helm repo add ${REPO} https://apache.jfrog.io/artifactory/skywalking-helm  

helm repo update

安装skywalking,这里安装会自动帮你部署一个ElasticSearch,如果需要对接已经存在的ElasticSearch集群或使用其他的后端存储,可以使用其他参数进行部署安装。

代码语言:javascript
复制
helm install "${SKYWALKING_RELEASE_NAME}" ${REPO}/skywalking -n "${SKYWALKING_RELEASE_NAMESPACE}" \

  --set oap.image.tag=8.1.0-es7 \

  --set oap.storageType=elasticsearch7 \

  --set ui.image.tag=8.1.0 \

  --set elasticsearch.imageTag=7.5.1

部署完后查看

代码语言:javascript
复制
kubectl get pod 

NAME                              READY   STATUS      RESTARTS   AGE

elasticsearch-master-0            1/1     Running     0          8m54s

elasticsearch-master-1            1/1     Running     0          8m54s

elasticsearch-master-2            1/1     Running     0          8m54s

skywalking-es-init-vl8c7          0/1     Completed   0          8m54s

skywalking-oap-64df9d4b8c-dvksd   1/1     Running     0          3m50s

skywalking-oap-64df9d4b8c-p6thl   1/1     Running     0          8m54s

skywalking-ui-649dc77bd7-t9d7m    1/1     Running     0          8m54s

部署了一个ElasticSearch集群和skywalking对应的组件

为了方便访问,我们将Skywalking的UI通过NodePort对外暴露出来。

代码语言:javascript
复制
kubectl patch  svc skywalking-ui  --type='json' -p '[{"op":"replace","path":"/spec/type","value":"NodePort"},{"op":"add","path":"/spec/ports/0/nodePort","value":30930}]'|

访问http://节点ip:30930,此时默认UI界面如下: (opens new window)

# 与应用集成方式

方式一:应用启动加载agent依赖包。 比如通过http://skywalking.apache.org/downloads/下载对应发行版本tar包里面包含的agent文件,然后应用启动命令加载此agent依赖文件即可。如以下通过容器应用构建Dockerfile方式加载。 (opens new window)

代码语言:javascript
复制
FROM registry.cn-shenzhen.aliyuncs.com/yedward/openjdk:8-jre-slim

USER appuser

EXPOSE 8080

COPY --from=build /usr/src/app/target/*.jar /app/

WORKDIR /app

CMD java -jar -Xms1024m -Xmx1024m /app/spring-petclinic.jar -javaagent:/opt/skywalking/agent/skywalking-agent.jar

方式二:通过外部挂载和参数引用方式。下面Demo主要就是对这种方式的演示。

这两种方式最大的区别在于,方式一需要改动应用启动命令,方式二对应用本身不需要进行改动,就需要进行升级即可。

# 应用Demo演示

以spring-petclinic为Demo进行演示,一个简单的应用,前面有一个Gateway做为统一流量入口,通过Web模块将对应的服务请求转发到后端不同的其他服务上,进行服务调用。

https://github.com/wanshaoyuan/spring-petclinic-msa.git (opens new window)

部署Demo应用

代码语言:javascript
复制
#下载
git clone https://github.com/wanshaoyuan/spring-petclinic-msa.git
#部署yaml

kubectl apply -f k8s/local-skywalking/

访问服务

http://host_ip:31080 (opens new window)

一个宠物医院系统,可以点击进行一些资料的添加和修改。

查看Skywalking的数据,点击右上角自动的按钮进行自动的刷新

调用Top耗时显示和响应耗时范围展示

服务响应时间和调用成功率

全局调用链路展示

总结: Skywalking UI做的非常精美,做为一款开源产品功能覆盖还是非常全面的,APM系统对于目前微服务体系的应用进行故障排查还是有非常大的帮助。但这种非常对开发语言还是有一定依赖性,另外一种不需要开发语言依赖的方式就是ServiceMesh的实现 完全不侵入应用,也不需要加载Jar包,ServiceMesh主要是通过做应用透明代理和流量劫持去实现链路追踪,如Istio,但他的缺点是只能追踪HTTP请求,覆盖范围有限,并且相对追踪的数据也比埋点的要少一些。


原文链接 (opens new window)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 概述
  • # SkyWalking介绍
  • # SkyWalking组件介绍
  • # SkyWalking安装
  • # 与应用集成方式
  • # 应用Demo演示
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档