![6f6fb14a8463129c0a309171d4367151.png](https://img-blog.csdnimg.cn/img_convert/6f6fb14a8463129c0a309171d4367151.png)
1、前情提要:
PP作为一款优秀的全链路监控工具,在性能定位上便捷、高效!但在实际公司环境中,我们的性能环境时刻在变动中(资产有限),故在重新创建服务器后,需要手动配置介入PP的操作,比较繁琐。故设计以下自动化处理脚本,极大的减少工作量。
2、适用场景:
1、公司的项目应用发布规范、服务命名规范、路径规范 ;
2、PP server端以及部署完成;
3、尤其适用用docker环境,以下脚本可以做成docker启动时自操作初始化脚本:docker创建-服务部署-运行脚本(注入pp agent相关配置),完全做到自动化;
4、当然在其他服务器上也可以操作,一般情况如果发布没什么规范而言,脚本化的效率不高,最多是吧PP agent 包作为镜像打到服务器上,部署应用后再手动配置应用了。
3、PP agent配置:熟悉pp的话,知道以下三个配置是最重要的,这也是需要我们参数化的对象。
IP地址为参数:10.2.35.68
appID 为参数:100001141
applicationName为参数:68-payment-route-api
4、手动操作思路:不熟悉shell的请自行学习,具体操作请根据实际情况修改!
![2d773ef84fdd8291440e85764c74b4c8.png](https://img-blog.csdnimg.cn/img_convert/2d773ef84fdd8291440e85764c74b4c8.png)
5、脚本实现:
*****************************************
#!/usr/bin/expect
#By Fresh.Qin
set ip [lindex $argv 0]
set appid [lindex $argv 1]
set appname [lindex $argv 2]
set timeout 3
spawn scp 195pinpoint-agent-1.5.2.tar.gz tester@$ip:/home/tester/
expect "password:"
send "你的密码r"
interact
set timeout 3
spawn ssh tester@$ip
expect "password:"
send "你的密码r"
expect "tester"
send "sudo sur"
expect "root"
send "cp 195pinpoint-agent-1.5.2.tar.gz /opt/ctrip/r"
expect "root"
send "chown deploy:deploy /opt/ctrip/195pinpoint-agent-1.5.2.tar.gzr"
expect "root"
send "su deployr"
expect "deploy"
send "cd /opt/ctrip/r"
expect "deploy"
send "tar -xzf 195pinpoint-agent-1.5.2.tar.gzr"
expect "deploy"
send "cd /opt/tars/apps/$appid/tomcat/binr"
expect "deploy"
send "sed -i '/Execute The Requested Command/iJAVA_OPTS="$JAVA_OPTS -javaagent:/opt/ctrip/pinpoint-agent-1.5.2/pinpoint-bootstrap-1.5.2.jar -Dpinpoint.agentId=$appid -Dpinpoint.applicationName=$appname"' catalina.shr"
expect "deploy"
send "sed -i '/Execute The Requested Command/iJAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=$ip -Dcom.sun.management.jmxremote.port=22222 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"' catalina.shr"
expect "deploy"
send "cd /opt/tars/apps/$appid/binr"
expect "deploy"
send "./shutdown.shr"
expect "deploy"
send "./startup.shr"
expect "deploy"
send "exitr"
expect "root"
send "exitr"
expect "tester"
send "exitr"
interact
************************************************
操作原理:
1、宿主机(195),将本地的pinpoint agen包远程发送(scp)至目标服务机器;
2、从宿主机远程控制(ssh)目标服务器,完成用户切换、加压agent包、赋予权限等动作(都是没有deploy用户密码惹的祸);
3、使用查找+插入的方式,完成两个JAVA_OPTS参数注入到catalina.sh中(所以说如果重复操作脚本,此处会重复插入);
4、重启tomcat服务,退出远程服务机,返回宿主机,完成自动化配置。
附上完整执行过程:(到最后一步表示完全执行成功)
![3607378549ed8faa2bd727c8e891229b.png](https://img-blog.csdnimg.cn/img_convert/3607378549ed8faa2bd727c8e891229b.png)
![d214b92ded51e0a82230608222c28dbb.png](https://img-blog.csdnimg.cn/img_convert/d214b92ded51e0a82230608222c28dbb.png)
最后顺便附上手动配置JMX远程端口(JvisualVM监控使用)和PP agent的配置:
-Xms2048m -Xmx2048m -Djava.rmi.server.hostname=10.190.37.53 -Dcom.sun.management.jmxremote.port=22222 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -javaagent:/home/pinpoint-agent-1.8.3/pinpoint-bootstrap-1.8.3.jar -Dpinpoint.agentId=fh222 -Dpinpoint.applicationName=fh222