溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

發(fā)布時(shí)間:2022-01-05 11:26:24 來源:億速云 閱讀:406 作者:iii 欄目:云計(jì)算

本篇內(nèi)容介紹了“JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一. ?侵?鏈路追蹤APM?具

應(yīng)?性能管理(Application Performance Management,APM) 是指對(duì)企業(yè)的關(guān)鍵業(yè)務(wù)應(yīng)?進(jìn)?監(jiān)測(cè)、優(yōu)化,提?企業(yè)應(yīng)?的可靠性和質(zhì)量,保證?戶得到良好的服務(wù),降低IT總運(yùn)維成本,為企業(yè)帶來更多的商業(yè)利益。

Pinpoint簡(jiǎn)介

Pinpoint是一個(gè)APM(應(yīng)用程序性能管理)工具,適用于用Java / PHP編寫的大型分布式系統(tǒng)。在使用上力圖簡(jiǎn)單高效,通過在啟動(dòng)時(shí)安裝agent,不需要修改哪怕一行代碼,最小化性能損失(3%)。

  • 優(yōu)勢(shì):

    1)分布式事務(wù)跟蹤,跟蹤跨分布式應(yīng)用的消息;
    2)自動(dòng)檢測(cè)應(yīng)用拓?fù)?,幫助你搞清楚?yīng)用的架構(gòu);
    3)水平擴(kuò)展以便支持大規(guī)模服務(wù)器集群;
    4)提供代碼級(jí)別的可見性以便輕松定位失敗點(diǎn)和瓶頸;
    5)使用字節(jié)碼增強(qiáng)技術(shù),添加新功能而無需修改代碼。

  • 主要組件

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

組件組件功能
Pinpoint-Collector收集各種性能數(shù)據(jù)
Pinpoint-Agent探針與應(yīng)用服務(wù)器(例如 tomcat) 關(guān)聯(lián),部署到同一臺(tái)服務(wù)器上
Abase Storage收集到數(shù)據(jù)存到 HBase 中
Pinpoint-Web將收集到的數(shù)據(jù)層現(xiàn)在 web 展示

二. 快速在Rainbond部署 pinpoint

基于Rainbond應(yīng)用市場(chǎng)?鍵安裝。

這種部署方式對(duì)于像pinpoint這種多組件的復(fù)雜應(yīng)用來說,最大程度的降低了部署難度與工作量

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

  • 通過pinpoint-web應(yīng)用進(jìn)入到pinpoint的UI界面

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

  • 在默認(rèn)設(shè)置中,pinpoint應(yīng)用 已經(jīng)監(jiān)控了它自身的 collector 、web組件。在進(jìn)入U(xiǎn)I界面后,就可以發(fā)現(xiàn)二者已經(jīng)存在于應(yīng)用列表中了

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

三. 添加被監(jiān)控的對(duì)象

  • 在war啟動(dòng)過程中插?agent

1)事先將pinpoint-agent資源打進(jìn)鏡像;
2)插入啟動(dòng)關(guān)鍵代碼:

#pinpoint-agent.sh
#指定pinpoint-agent資源
CATALINA_OPTS="$CATALINA_OPTS -javaagent:$PINPOINT_AGENT_PATH/pinpoint-bootstrap-${PINPOINT_AGETN_VERSION}-SNAPSHOT.jar"  
#指定pinpoint-agent ID
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId=${AGENT_ID}" 
#指定應(yīng)用名字
CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName=${APP_NAME}"
#docker-entrypoint.sh  
#判斷是否開啟pinpoint-agent
if [ "$ENABLE_APM" == "true" ];then  
#collector地址
 COLLECTOR_TCP_HOST=${COLLECTOR_TCP_HOST:-127.0.0.1} 
#TCP端口 
 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=$
#UDP端口
{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=$
#UDP端口
 {COLLECTOR_UDP_STAT_LISTEN_PORT:-9995} 
#啟動(dòng)時(shí)加載agent
 sed -i "2 a. /usr/local/tomcat/bin/pinpoint-agent.sh" /usr/local/tomcat/bin/catalina.sh  
#導(dǎo)入到pinpoint-agent配置文件
  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
#默認(rèn)值,在平臺(tái)的每一個(gè)應(yīng)用都會(huì)生成
export APP_NAME=${APP_NAME:-${SERVICE_NAME:-${HOSTNAME}}}
#通過APP_NAME,POD_IP區(qū)分一個(gè)服務(wù)下每一個(gè)實(shí)例的Agent-ID
export AGENT_ID=${APP_NAME}-${POD_IP} 
fi
  • 在jar啟動(dòng)過程中插?agent

    1)事先將pinpoint-agent資源放進(jìn)源碼倉庫;

    2)啟動(dòng)腳本內(nèi)容:

#!/bin/bash
#通過特定環(huán)境變量判斷是否啟動(dòng) pinpoint agent
if [[ $ENABLE_APM == "true" ]];then 
 AGENT_ID=${SERVICE_ID:0:10}
 PINPOINT_AGETN_VERSION=1.7.2
 PINPOINT_AGENT_PATH=/app/pinpoint
#將 pinpoint agent 啟動(dòng)參數(shù)加?到 $JAVA_OPTS 中 
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}
#最終啟動(dòng)命令
exec java -Dserver.port=$PORT $JAVA_OPTS -jar target/*.jar

傳統(tǒng)架構(gòu)下的pinpoint,需要在被監(jiān)控的對(duì)象里附加Agent,并通過修改配置文件使之生效。在云幫平臺(tái)上,我們將這兩個(gè)步驟也做了相應(yīng)的簡(jiǎn)化。

云幫平臺(tái)利用設(shè)置 環(huán)境變量 的方式,代替了配置文件,鍵值對(duì)形式的環(huán)境變量非常簡(jiǎn)單易用。

添加Pinpoint監(jiān)控對(duì)象實(shí)踐

方法一

下面以todoapi為例,介紹添加被監(jiān)控對(duì)象的方法


    1. 關(guān)聯(lián)Pinpoint-Collector

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)


    1. 查看 連接信息

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)


    1. 訪問 Pinpoint-Web查看:

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

  • 對(duì)于已部署的應(yīng)用,也可以通過 應(yīng)用管理界面 中的 依賴 、設(shè)置 選項(xiàng)卡,來配置相應(yīng)的服務(wù)依賴和環(huán)境變量。

方法二


    1. 開啟Pinpoint-Collector對(duì)外服務(wù)后,平臺(tái)網(wǎng)關(guān)會(huì)定義一層端口映射關(guān)系

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)


    1. 查看todoshow變量值,檢查端口號(hào)是否正確,激活agent的開關(guān)

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)


    1. 訪問 Pinpoint-Web查看,todoshow已經(jīng)出現(xiàn)在界面上

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

  • 在Pinpoint-Web中實(shí)時(shí)推送使用的是Websocket協(xié)議,但我們?cè)谠L問Pinpoint-Web應(yīng)用時(shí)使用的是http協(xié)議;所以不能實(shí)時(shí)接收推送,需在平臺(tái)中 應(yīng)用網(wǎng)關(guān)-->訪問控制中找到Pinpoint-Web應(yīng)用,點(diǎn)擊參數(shù)配置 打開Websocket協(xié)議支持。

JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)

“JAVA無侵入鏈路追蹤怎么實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI