在阿里公有云上手抖买了云服务器ECS(Elastic Compute Service)好久了,花了几百大洋,肉痛。。。那时刚好正值阿里云ARMS(应用实时监控服务)开通试用,那就玩一把吧。ARMS是基于Agent的无侵入式APM(应用性能管理)方案,它对性能监控、分布式链路追踪、故障诊断都有很强的支持,包含应用监控、前端监控、容器监控甚至是自定义监控等非常大而全的功能,简直是一站式全家桶服务。
准备ECS环境
只有一台ECS,那就要物尽其用,体验ECS环境下的ARMS。对ECS进行操作,需先配置安全组规则,定义出入方向的端口等等,第一次SSH登录,需重置密码。考虑只有一台ECS环境,可能要测试多应用,安装Docker和Nginx环境。
1、安装docker环境,启动测试,判断是否安装成功
# 修改软件源sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.reposudo sed -i 's/download.docker.com/mirrors.ustc.edu.cn/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
sudo yum makecache fastsudo yum install docker-ce
sudo systemctl enable dockersudo systemctl start docker
# hello world镜像测试服务docker run hello-world
参考:
2、docker下安装nginx
# 安装Nginx,并挂载资源和配置docker run -d -p 80:80 --name nginx-web -v /home/nginx/www:/usr/share/nginx/html -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx nginx
vi
/home/nginx/www/index.html 编写测试首页
<!DOCTYPE html><html><head><meta charset="utf-8"><title>Nginx test !!!</title></head><body> <h1>Nginx</h1> <p>Hello,wenqy!</p></body></html>
vi
/home/nginx/conf/nginx.conf配置路由到首页
server { listen 80; #server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; }}
curl 127.0.0.1:80 测试访问
3、docker镜像加速
开通镜像服务器:
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
公 访问
ECS安全组规则里,配置入口方向,开放端口,0.0.0.0/0
curl 123.56.xxx.xxx访问
nginx access
RDS环境
准备RDS环境,有条件的同学也可以购买RDS(关系型数据库服务),进行RDS操作时,需添加白名单和安全组,申请外 地址,创建数据库账 等等。
ARMS环境
阿里云官 ,开通ARMS试用,注意不要选择专业版,专业版按量付费,不差钱的那就另说了。
单应用测试
Docker安装demo应用
准备应用,从start.aliyun.com (类似https://start.spring.io/在线项目初始化器)下载 demo
mvn clean installjava -jar demo-0.0.1-SNAPSHOT.jar
启动失败,提示没有清单属性,META-INF没有定义主类
修改插件配置
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.2.6.RELEASE</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <mainClass>com.wenqy.demo.DemoApplication</mainClass> </configuration></plugin>
还要写controller类,来暴露REST服务,本想体验一把start.aliyun.com的便捷性,可能我操作不对,直接放弃,改用之前写的demo
https://github.com/wenqy/java-study/tree/master/spring-security-study/securing-web
准备好应用和Dockerfile文件后,构建demo镜像
[root@iZ2ze7666pvq2l4otgrbseZ securing-web]# docker build -t wenqy/securing-web:1.0.0 .Sending build context to Docker daemon 20.98MBStep 1/4 : FROM openjdk:8-jdk-alpine8-jdk-alpine: Pulling from library/openjdke7c96db7181b: Pull complete f910a506b6cb: Pull complete c2274a1a0e27: Pull complete Digest: sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f2283343547b3Status: Downloaded newer image for openjdk:8-jdk-alpine ---> a3562aa0b991Step 2/4 : COPY securing-web-0.0.1-SNAPSHOT.jar /securing-web-0.0.1-SNAPSHOT.jar ---> d4b27dd36821Step 3/4 : ENTRYPOINT ["java","-jar","/securing-web-0.0.1-SNAPSHOT.jar"] ---> Running in fbc474735d0bRemoving intermediate container fbc474735d0b ---> 13efd600069cStep 4/4 : EXPOSE 8080 ---> Running in d11d875488b3Removing intermediate container d11d875488b3 ---> ea41dcbbfac0Successfully built ea41dcbbfac0Successfully tagged wenqy/securing-web:1.0.0[root@iZ2ze7666pvq2l4otgrbseZ securing-web]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEwenqy/securing-web 1.0.0 ea41dcbbfac0 9 seconds ago 126MBnginx latest ed21b7a8aee9 3 weeks ago 127MBopenjdk 8-jdk-alpine a3562aa0b991 11 months ago 105MBhello-world latest fce289e99eb9 15 months ago 1.84kB
运行容器应用,测试是否启动成功
[root@iZ2ze7666pvq2l4otgrbseZ securing-web]# docker run -d -p 8080:8080 --name securing-web wenqy/securing-web:1.0.002f8d461e6b9566ccd84d225f8d6d301a057650d2334bda3b5b5174ec80d04cd[root@iZ2ze7666pvq2l4otgrbseZ securing-web]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES02f8d461e6b9 wenqy/securing-web:1.0.0 "java -jar /securing…" 5 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp securing-web3a5f171848e0 nginx "nginx -g 'daemon of…" 8 days ago Up 7 days 0.0.0.0:80->80/tcp nginx-web[root@iZ2ze7666pvq2l4otgrbseZ securing-web]# curl localhost:8080<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3"> <head> <title>Spring Security Example</title> </head> <body> <h1>Welcome!</h1> <p>Click <a href="/hello">here</a> to see a greeting.</p> </body></html>[root@iZ2ze7666pvq2l4otgrbseZ securing-web]#
配置Nginx,将请求转发至应用端口,其中ifconfig 使用docker0的ip
location / { proxy_pass http://172.17.0.1:8080;}
docker restart nginx重启nginx后,查看效果,访问成功
nginx web app access
Docker安装demo应用Agent
1、准备ARMS的licenseKey
在ARMS控制台要接入的应用里获取licenseKey
2、集成已有镜像
## RMS APM DEMO Docker ##### For Java ##### withAgent V0.1 ##### ######################################FROM wenqy/securing-web:1.0.0WORKDIR /root/# 请根据所在地域替换探针的下载地址。RUN wget "http://arms-apm-hangzhou.oss-cn-hangzhou.aliyuncs.com/ArmsAgent.zip" -O ArmsAgent.zipRUN unzip ArmsAgent.zip -d /root/# LicenseKey 在控制台应用监控接入页面查看。# AppName 为用户自定义 ARMS 监控应用名称,用户名暂不支持中文。# 若所有镜像都接入同一个应用监控任务,配置此处的 arms_licenseKey 和 arms_appName 即可。# 若需将镜像接入其他应用监控任务,可在 docker run 中使用 -e 参数指定该应用的 arms_licenseKey 和 arms_appName 参数,以覆盖此处的配置。ENV arms_licenseKey=ARMS控制台分配的KeyENV arms_appName=ARMS控制台接入应用ENV JAVA_TOOL_OPTIONS ${JAVA_TOOL_OPTIONS} '-javaagent:/root/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar -Darms.licenseKey='${arms_licenseKey}' -Darms.appName='${arms_appName}### for check the argsRUN env | grep JAVA_TOOL_OPTIONS### 下面可加入用户 自定义 dockerfile 逻辑。### ......
3、构建并启动新镜像
构建Agent镜像
docker build -t wenqy/arms-springboot:1.0.0 -f Dockerfile .
启动Agent镜像
docker run -d -e “arms_licenseKey=xxxxxx” -e “arms_appName=application” -p 8081:8080 wenqy/arms-springboot:1.0.0
启动成功后,登录ARMS控制台,进行结果验证
编写脚本,对应用进行访问,预热
#!/bin/bashwhile truedocurl localhost:8081sleep 1done
监控信息有一定延迟,一段时间后查看控制台
查看接入应用列表
查看应用metric概览统计分析
查看应用详情监控信息,JVM监控
查看应用详情监控信息,CPU、内存、磁盘等主机监控
应用诊断,线程分析,分析线程栈信息
docker安装探针,参考:
https://help.aliyun.com/document_detail/85906.html?
决定应用上下文id的名称
org.springframework.boot.context.ContextIdApplicationContextInitializer.getApplicationId(ConfigurableEnvironment)
微服务应用测试
准备应用
像单应用测试一样准备多个微服务应用demo
account-demo https://github.com/wenqy/springcloud-study/tree/master/account-demo
order-demo https://github.com/wenqy/springcloud-study/tree/master/order-demo
inventory-demo https://github.com/wenqy/springcloud-study/tree/master/inventory-demo
eureka-server https://github.com/wenqy/springcloud-study/tree/master/eureka-server
涉及数据库的,对RDS数据库表初始化
构建并启动镜像
Docker构建微服务demo镜像
docker build -t weny/account-demo:1.0.0 .docker build -t weny/order-demo:1.0.0 .docker build -t weny/inventory-demo:1.0.0 .docker build -t weny/eureka-server:1.0.0 .
然后像单应用测试一样为每个微服务demo应用安装Agent镜像,最后启动Agent镜像
docker run -d -p 8400:8400 --name order-demo wenqy/agent-order-demo:1.0.0docker run -d -p 8401:8401 --name inventory-demo wenqy/agent-inventory-demo:1.0.0docker run -d -p 8402:8402 --name account-demo wenqy/agent-account-demo:1.0.0docker run -d -p 9000:9000 --name eureka-server wenqy/eureka-server:1.0.0
测试应用链路是否正常
[root@iZ2ze7666pvq2l4otgrbseZ ~]# curl -X POST "http://172.17.0.1:8400/order/orderPay?amount=1&count=1"success[root@iZ2ze7666pvq2l4otgrbseZ ~]# curl -X POST "http://172.17.0.1:8400/order/orderPay?amount=1&count=1"success[root@iZ2ze7666pvq2l4otgrbseZ ~]#
服务调用关系
order-service -> account-service -> inventory-service
成功插入订单,服务调用正常
编写访问请求的脚本,让监控探针采集一段时间
#!/bin/bashwhile truedocurl -X POST "http://172.17.0.1:8400/order/orderPay?amount=1&count=1"sleep 2done
登录控制台,等待一段时间查看结果
ARMS图例
调用链路查询,查询调用链路列表
调用链路详情,查看调用关系和耗时
调用链路方法栈,查看方法栈耗时
应用列表,加入探针的应用列表
应用总览,CPU、内存等系统信息
应用总览,慢调用统计分析信息
应用总览,服务拓扑图
应用详情,SQL分析,SQL调用次数和平均耗时
应用详情,异常分析,异常统计及异常堆栈
应用详情,错误分析
应用详情,接口快照
接口调用,错误分析
接口调用,链路下游
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!