⽆侵⼊链路追踪APM⼯具Pinpoint
应⽤性能管理(Application Performance Management,APM)
是指对企业的关键业务应⽤进⾏监测、优化,提⾼企业应⽤的可靠性和质量,保证⽤户得到良好的服务,降低IT总运维成本,为企业带来更多的商业利益。
Pinpoint是一个APM(应用程序性能管理)工具,适用于用Java / PHP编写的大型分布式系统。在使用上力图简单高效,通过在启动时安装agent,不需要修改哪怕一行代码,最小化性能损失(3%)。
<img src=" http://grstatic.oss-cn-shangha ... ot%3B width="80%">
| 组件 | 组件功能 |
| :-------------: | :-----------------: | ---- |
| Pinpoint-Collector| 收集各种性能数据 |
| Pinpoint-Agent | 探针与应用服务器(例如 tomcat) 关联,部署到同一台服务器上 |
| Abase Storage | 收集到数据存到 HBase 中 |
| Pinpoint-Web | 将收集到的数据层现在 web 展示 |
>基于Rainbond应用市场⼀键安装。
这种部署方式对于像pinpoint这种多组件的复杂应用来说,最大程度的降低了部署难度与工作量
<img src=" http://grstatic.oss-cn-shangha ... ot%3B width="100%">
<img src=" http://grstatic.oss-cn-shangha ... ot%3B width="100%">
<img src=" http://grstatic.oss-cn-shangha ... ot%3B width="100%">
在war启动过程中插⼊agent
1)事先将pinpoint-agent资源打进镜像;
2)插入启动关键代码:
CATALINA_OPTS="$CATALINA_OPTS -javaagent:$PINPOINT_AGENT_PATH/pinpoint-bootstrap-${PINPOINT_AGETN_VERSION}-SNAPSHOT.jar"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=${AGENT_ID}"
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=${APP_NAME}"
if [ "$ENABLE_APM" == "true" ];then
COLLECTOR_TCP_HOST=${COLLECTOR_TCP_HOST:-127.0.0.1}
COLLECTOR_TCP_PORT=${COLLECTOR_TCP_PORT:-9994}
COLLECTOR_UDP_SPAN_LISTEN_HOST=${COLLECTOR_UDP_SPAN_LISTEN_HOST:-127.0.0.1}
COLLECTOR_UDP_SPAN_LISTEN_PORT=$
{COLLECTOR_UDP_SPAN_LISTEN_PORT:-9996}
COLLECTOR_UDP_STAT_LISTEN_HOST=${COLLECTOR_UDP_STAT_LISTEN_HOST:-127.0.0.1}
COLLECTOR_UDP_STAT_LISTEN_PORT=$
{COLLECTOR_UDP_STAT_LISTEN_PORT:-9995}
sed -i "2 a. /usr/local/tomcat/bin/pinpoint-agent.sh" /usr/local/tomcat/bin/catalina.sh
sed -i -r -e "s/(profiler.collector.ip)=.*//1=${COLLECTOR_TCP_HOST}/" /
-e "s/(profiler.collector.tcp.port)=.*//1=${COLLECTOR_TCP_PORT}/" /
-e "s/(profiler.collector.span.port)=.*//1=${COLLECTOR_UDP_SPAN_LISTEN_PORT}/" /
-e "s/(profiler.collector.stat.port)=.*//1=${COLLECTOR_UDP_STAT_LISTEN_PORT}/" /usr/local/pinpoint-agent/pinpoint.config
export APP_NAME=${APP_NAME:-${SERVICE_NAME:-${HOSTNAME}}}
export AGENT_ID=${APP_NAME}-${POD_IP}
fi
在jar启动过程中插⼊agent
1)事先将pinpoint-agent资源放进源码仓库;
2)启动脚本内容:
if [[ $ENABLE_APM == "true" ]];then
AGENT_ID=${SERVICE_ID:0:10}
PINPOINT_AGETN_VERSION=1.7.2
PINPOINT_AGENT_PATH=/app/pinpoint
export JAVA_OPTS="$JAVA_OPTS -javaagent:$
{PINPOINT_AGENT_PATH}/pinpoint-bootstrap-${PINPOINT_AGETN_VERSION}-
SNAPSHOT.jar -Dpinpoint.agentId=${AGENT_ID:-${SERVICE_ID:0:10}} -Dpinpoint.applicationName=${APP_NAME:-${SERVICE_NAME:-
$HOSTNAME}}"
fi
PORT=${PORT:-5000}
sleep ${PAUSE:-0}
exec java -Dserver.port=$PORT $JAVA_OPTS -jar target/*.jar
传统架构下的pinpoint,需要在被监控的对象里附加Agent,并通过修改配置文件使之生效。在云帮平台上,我们将这两个步骤也做了相应的简化。
云帮平台利用设置 环境变量 的方式,代替了配置文件,键值对形式的环境变量非常简单易用。
方法一
下面以todoapi为例,介绍添加被监控对象的方法
<center><img src=" http://grstatic.oss-cn-shangha ... ot%3B style="border:1px solid #eee;max-width:100%"/></center>
<center><img src=" http://grstatic.oss-cn-shangha ... ot%3B style="border:1px solid #eee;max-width:100%"/></center>
<center><img src=" http://grstatic.oss-cn-shangha ... ot%3B style="border:1px solid #eee;max-width:100%"/></center>
<center><img src=" http://grstatic.oss-cn-shangha ... ot%3B style="border:1px solid #eee;max-width:100%"/></center>
方法二
<center><img src=" http://grstatic.oss-cn-shangha ... ot%3B style="border:1px solid #eee;max-width:100%"/></center>
<center><img src=" http://grstatic.oss-cn-shangha ... ot%3B style="border:1px solid #eee;max-width:100%"/></center>
<center><img src=" http://grstatic.oss-cn-shangha ... ot%3B style="border:1px solid #eee;max-width:100%"/></center>
<center><img src=" http://grstatic.oss-cn-shangha ... ot%3B style="border:1px solid #eee;max-width:100%"/></center>
<center><img src=" http://grstatic.oss-cn-shangha ... ot%3B style="border:1px solid #eee;max-width:100%"/></center>