网站首页 > 技术文章 正文
前言
工作中在执行不同场景性能测试的时候,避免不了对应用的链路进行分析,这样在我们进行性能瓶颈定位的时候不但能有判断的依据,还有瓶颈定位的证据链。今天就带着大家搭建一套应用链路追踪环境。我们就选择目前最主流的SkyWalking+ElasticSearch吧,我在之前的公司做性能的时候用的也是这套环境。
工作原理大概是这样的,SkyWalking的Agent(探针)从应用中收集 SkyWalking Tracing(链路追踪)出来的数据,把数据传递给SkyWalking的OAP服务,SkyWalking的OAP服务接收到Agent发送过来的这些数据后对这些数据进行分析并整合,整合的数据会存储到ElasticSearch、H2、MySQL等存储器中,我这里选择ElasticSearch存储器,SkyWalking UI(可视化界面)把SkyWalking OAP服务整合的数据可视化展示出来。SkyWalking的具体原理和架构图大家可以进入SkyWalking的官网自行查看。
根据SkyWalking的工作原理整体环境部署过程分下面几步进行:
1.部署ElasticSearch服务并测试
2.部署SkyWalking OAP服务+SkyWalking UI并测试
3.Agent集成JAVA项目应用程序
部署ElasticSearch服务
- 下载ElasticSearch镜像,如果不知道镜像名字,可以进入Docker镜像仓库查询下,
- https://hub.docker.com/searchq=elasticsearch&type=image浏览器访问进入后搜索框输入elasticsearch,操作如下图:
2.进入到服务器粘贴这个命令开始下载镜像
docker pull elasticsearch:7.5.1
3.镜像下载后如何运行呢?在刚才复制下载镜像命令的页面切换回Overview
4.向下滑动找到下图的位置并复制容器启动命令
5.进入到服务器输入该命令启动容器,通过STATUS 可以看到容器已在运行
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.5.1
小经验:启动后如果发现服务器特别卡,什么操作都不能进行,这是由内存分配导致的问题,ElasticSearch默认给-Xms和-Xmx分配的内存是1g,我们在启动时候添加参数:-e ES_JAVA_OPTS="-Xms512m -Xmx512m"就可以解决这个问题.
6.浏览器访问ip:端口 测试ElasticSearch服务,出现下图说明ElasticSearch服务已经部署好啦
7.如果后期需要进入容器修改ElasticSearch的配置文件可以使用如下命令
docker ps
docker exet -it ID或者容器名字 /bin/bash
#也可以把容器内的目录挂在到服务器上,这样不论是你在容器内修改配置还是服务器修改配置都可以互相同步
# 具体方法就是在启动容器时候添加 -v参数 指定服务器的目录和容器内的目录可
8.为了后续方便查看数据,我这里顺便也安装了kibana实现ES可视化,下载kibana镜像
docker pull elastic/kibana:6.8.12
9.后台启动kibana容器
docker run -d --name kibana001 --link elasticsearch -e ELASTICSEARCH_URL=http://部署ES服务器的IP:端口 -p 5601:5601 elastic/kibana:6.8.12
10.浏览器输入ip:端口 访问验证
部署SkyWalking OAP服务+SkyWalking UI
1.下载SkyWalking-OAP-Server镜像(如果不知道镜像名字参考ElasticSearch步骤查看),因为有版本兼容问题,我这里选择了6.6.0-es7版本,我的ES和SkyWalking也是安装在不同的服务器上的
docker pull apache/skywalking-oap-server:6.6.0-es7
2.启动SkyWalking-OAP-Server容器,我这里在启动参数中直接设定了存储器和ES服务器,这样就不需要在容器中再次进行配置啦.
# 这里记得修改一下自己服务器对应的值
# 重要参数说明:-e SW_STORAGE=elasticsearch 指定存储器
# -e SW_STORAGE_ES_CLUSTER_NODES=ES服务器的IP:9200 这里要指定ES服务器的IP和端口
docker run --name oap --restart always -d --restart=always -e TZ=Asia/Shanghai -p 12800:12800 -p 11800:11800 -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=ES服务器的IP:9200 apache/skywalking-oap-server:6.6.0-es7
3.下载SkyWalking-UI镜像
docker pull apache/skywalking-ui:6.6.0
4.启动SkyWalking-UI容器
# -e SW_OAP_ADDRESS=oap:12800 其中oap需要替换成部署skywalking-oap-server服务器的IP地址
docker run -d --name skywalking-ui --restart=always -e TZ=Asia/Shanghai -p 8088:8080 --link oap:oap -e SW_OAP_ADDRESS=oap:12800 apache/skywalking-ui:6.6.0
5.浏览器访问 IP:8088 测试,通过下图可以看到SkyWalking已经启动成功,到这里基础环境就已经部署好啦,接下来就是集成应用啦。
Agent集成JAVA项目应用程序
1.下载SkyWalking压缩包,解压后把Agent整个目录放到java应用的服务器上,这里尽量使用与SkyWalking同样的版本,有可能回遇到一些兼容问题。
#下载
wget https://archive.apache.org/dist/skywalking/6.6.0/apache-skywalking-apm-6.6.0.tar.gz
# 解压
tar -zxvf apache-skywalking-apm-6.6.0.tar.gz
# 我这里要监控的这个应用和agent在同一台服务器上,为了方便我把agent也放在了应用的目录下
cp -r agent/ /usr/local/wfw/
2.进入agent的配置文件指定SkyWalking OAP所在的服务器和端口,这里也可以不再配置文件配置,如果不配置就要在启动应用的时候指定。
cd agent/config
vim agent.config
3.启动java应用
# 测试启动是否成功
java -javaagent:agent/skywalking-agent.jar -jar vhr-web-0.0.1-SNAPSHOT.jar
# 命令解析 java -javaagent:agent的绝对路径 -jar 应用名字
# 测试没问题的话可以让程序后台运行
nohup java -javaagent:agent/skywalking-agent.jar -jar vhr-web-0.0.1-SNAPSHOT.jar &
4.服务器访问应用后查看在SkyWalking UI查看监控结果
5.到目前为止应用链路的监控环境也搭建完成啦,SkyWalking的使用需要自己补一下,我就不写如何使用这一块啦,告警和发送邮件后面看吧,目前有一套实现方案,有机会也会分享给大家学习。
大家喜欢就收藏吧,也欢迎分享给身边的朋友一起学习,也可以添加我的微信 wfw112233 随时交流性能相关技术,下周的文章会写一下性能流程相关基础知识。
欢迎大家关注微信公众号
猜你喜欢
- 2024-11-15 2w 字带你实战 ElasticSearch(elasticsearch-ik)
- 2024-11-15 docker搭建Elasticsearch、Kibana、Logstash 同步mysql数据到ES
- 2024-11-15 原理实践,全面讲解Logstash+Kibana+kafka
- 2024-11-15 CVE-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析
- 2024-11-15 CentOS上安装ELK(centos上安装docker-compose)
- 2024-11-15 手把手教你,在CentOS上安装ELK,进行服务器日志收集
- 2024-11-15 ELK单机版安装部署流程(elk版本选择)
- 2024-11-15 Uber如何使用ClickHouse建立日志分析平台?
- 2024-11-15 入门Elasticsearch,我觉着你看这一篇就够了
- 2024-11-15 ELK结合kafka环境搭建,简单直接,有手就行
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)