锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏄竴涓疄鏃剁洃鎺у伐鍏鳳紝浣跨敤浜?
java agent
鍜?
jvm attach
鎶鏈紝鍙互鍦ㄤ笉鍋滄満鐨勬儏鍐典笅瀹炴椂鐩戞帶綰夸笂紼嬪簭鐨勮繍琛屾儏鍐碉紝鍙﹀錛屽
btrace
鑴氭湰錛堝疄闄呬笂灝辨槸
java
紼嬪簭錛夊仛浜嗛潪甯鎬弗鏍肩殑瀹夊叏闄愬埗錛屽畨鍏ㄦу緢楂橈紝瀵瑰簲鐢ㄧ▼搴忓熀鏈病鏈夊獎鍝嶃傚湪鎬ц兘鏂歸潰錛?
cobar
榪涜榪囨祴璇曪紝瀵規柟娉曡繘琛岃皟鐢ㄨ楁椂緇熻鐨勬椂鍊欙紝鍩烘湰娑堣垂鍦ㄥ井縐掔駭鍒紝鍙互璇村井涓嶈凍閬撱?
銆愯儗鏅?/span>
鍦ㄤ腑鏂囩珯
napoli
涓婄嚎榪囩▼鍚庯紝鍙戠幇浜嗕竴涓鎬殑鐜拌薄錛屽敖綆?宸茬煡"鐨?
offer
鍙戦佺閮藉凡緇忚縼縐誨埌
napoli
緋葷粺涓紝浣嗘槸鑰佺殑
mq
緋葷粺浠嶇劧鏈夋柊鐨?
offer
娑堟伅榪涙潵錛屽洜涓鴻繛鎺?
mq
鐨勬湇鍔″櫒闈炲父澶氾紝瀹氫綅娑堟伅鏉ユ簮鎴愪簡涓涓潪甯稿ぇ鐨勯棶棰樸傝繖縐嶆儏鍐碉紝鎯沖埌浜嗕嬌鐢?
BTrace
鍦ㄦ煇涓鍙版湇鍔″櫒榪涜綰夸笂鐩戞帶榪涜屾湡鏈涘彂鐜拌繖涓菇鐏點?
銆愯繃紼嬨?/span>
棣栧厛錛屾垜浠渶瑕佺煡閬撲袱涓熀鏈俊鎭細娑堟伅綾誨瀷鍜屾潵婧?
ip
錛岃繖鏍鋒墠鍙互瀹氫綅
offer
娑堟伅鐨勬潵婧愩?
瑕佺煡閬撴潵婧?
ip
錛岄渶瑕佹壘鍒版湇鍔″櫒绔?
綆$悊鐨勭被錛屽彧鏈夊湪寤虹珛
socket
鐨勫湴鏂癸紝鎵嶅彲浠ユ姄鍒板叿浣?
ip
錛岀粡榪囧垎鏋?
amq
浠g爜錛屽彂鐜?
tcp
榪炴帴鍩烘湰鏄敱涓嬮潰榪欎釜綾繪潵鏈嶅姟鎵鏈夋秷鎭殑鎺ユ敹鐨勶細
public class TcpTransport extends TransportThreadSupport implements Transport, Service, Runnable { private static final Log LOG = LogFactory.getLog(TcpTransport.class); private static final ThreadPoolExecutor SOCKET_CLOSE; protected final URI remoteLocation; protected final URI localLocation; protected final WireFormat wireFormat; protected int connectionTimeout = 30000; protected int soTimeout; protected int socketBufferSize = 64 * 1024; protected int ioBufferSize = 8 * 1024; protected boolean closeAsync=true;
protected Socket socket;
|
榪欎釜綾諱腑鍖呭惈涓涓?
socket
瀵硅薄鐨勬垚鍛樺彉閲忥紝鎵鏈夋垜浠彧瑕佺洃鎺?
readCommand
鏂規硶錛岃繖涓柟娉曠殑榪斿洖鍊煎疄闄呬笂灝辨槸涓涓?
ActivemqObjectMessage
瀵硅薄錛岃繖鏍峰氨鍙互鍦ㄤ竴涓柟娉曚笂鍔犳嫤鎴櫒灝卞彲浠ュ悓鏃舵崟鑾峰埌
ip
鍜屾秷鎭璞★紝涓ゅ叏鍏剁編錛侊紒錛?
protected Object readCommand() throws IOException { return wireFormat.unmarshal(dataIn); } |
鍥犱負鍘熸湁
ESB
娑堟伅閫氶亾閮芥槸涓涓槦鍒?
ESBQueue
錛屾墍浠ユ棤娉曢氳繃闃熷垪鍚嶇О鏉ョ‘瀹氭秷鎭被鍨嬶紝蹇呴』閫氳繃
ESBTransferObject
瀵硅薄鏉ュ彇寰楁秷鎭被鍨嬶細
destType
錛?
offer
鐨勫尯闂存槸
1000-1008
public class ESBTransferObject implements Serializable {
private static final long serialVersionUID = -5975115234845303878L; /** * 娑堟伅浣擄紝鍘熷垯涓婂璞″簭鍒楀寲鍚庣殑XML鏁版嵁(String) 娉ㄦ剰浣跨敤XML1.1瑙勮寖銆?/p> */ private Object content; /** * 鐢ㄦ埛鑷畾涔夋暟鎹?/p> */ private Object userDefineData; /** * 鐩殑娑堟伅綾誨瀷 */
private int destType = -1;
|
浣嗘槸錛屽湪鏈嶅姟鍣ㄧ騫舵病鏈?
ESBTransferObject
瀵硅薄錛屾棤娉曞弽搴忓垪鍖栵紙
BTrace
涔熶笉鏀寔鍙嶅簭鍒楀寲鎿嶄綔錛夛紝鎵浠ユ病鏈夋柟娉曠畝鍗曞彇寰楁秷鎭被鍨嬩俊鎭紒錛侊紒
OK
錛屾垜涓嶅弽搴忓垪鍖栵紝鐩存帴鎷夸簩榪涘埗
byte[]
錛岀被鍨嬩俊鎭簲璇ユ槸鍦ㄥ浐瀹氫綅緗殑鍚э紵浣嗘槸鍙戠幇榪欎釜瀵硅薄
content
鍙橀暱瀛楃涓插畾涔夊湪綾誨瀷涔嬪墠錛岀被鍨嬩綅緗笉紜畾浜嗭紝鏅曞掑晩
涓嶆蹇冿紝杈撳嚭浜岃繘鍒舵暟鎹紝鏌蟲殫鑺辨槑鍟婏紝鍘熸潵瀵硅薄搴忓垪鍖栫殑鏃跺欙紝
primitive
鐨?
field
閮芥槸绱ф帴鐫綾誨瀷淇℃伅鍐欏叆鐨勶紝鎵浠ワ紝綾誨瀷淇℃伅鏄湪鍥哄畾浣嶇疆鐨?
錛岀被鍨嬩俊鎭緇堟槸
255
錛?
256
涓や釜瀛楄妭錛堝疄闄呬笂鏄?
4
涓瓧鑺傦紝浣嗘槸鐩墠鎴戜滑鍙崰鏈?
2
涓級
Ok
錛岀紪鍐欎唬鐮侊紝嫻嬭瘯鐜榪愯涓涓嬶紝鏅曞掞紝绔熺劧鏈夋暟緇勬孩鍑猴紒
浣跨敤
BTrace
錛屾妸榪欎釜鏁扮粍鎵撳嵃涓嬫潵錛堣繖涓渶瑕佺偣鎶宸э紝
btrace
榪?
for
閮戒笉鍏佽錛夛紝绔熺劧鍙戠幇
浣嶇疆鍋忕Щ鍒?/span>
205
錛?
206
浣嶇疆
錛岃繖涓湡鐨勪笉鐭ラ亾浠涔堝師鍥狅紝浼拌鏄鎴風鍙戦佺殑鏃跺欏帇緙╀簡錛岀畝鍗曚慨鏀瑰亸縐婚噺錛屾祴璇曡繍琛岋紝
ok
錛屾墍鏈夌殑娑堟伅綾誨瀷鍜?
ip
鐨勫鐓ц〃鎵撳嵃鍑烘潵浜嗐?
package com.alibaba.btrace.script;
import static com.sun.btrace.BTraceUtils.*;
import com.sun.btrace.annotations.*;
@BTrace
public class AMQQueue2IP {
@OnMethod(clazz = "org.apache.activemq.transport.tcp.TcpTransport", //闇瑕佹嫤鎴殑綾誨悕
method = "readCommand", //闇瑕佹嫤鎴殑鏂規硶鍚?/p>
location = @Location(Kind.RETURN)) //鎷︽埅浣嶇疆錛屾柟娉曡繑鍥炴椂
public static void onTransportCommandExit(@Self Object transport, @Return Object command) { //鎹曡幏璋冪敤瀵硅薄鍜岃繑鍥炲?/p>
String commandName = str(command);
boolean isObjectMessage = (indexOf(commandName, "org.apache.activemq.command.ActiveMQObjectMessage") >= 0);
if (isObjectMessage) {
Object msg = command;
Object content = get(field(getSuperclass(getSuperclass(classOf(msg))), "content", false), msg);//鎹曡幏娑堟伅鍐呭byte[]
byte[] bs = (byte[]) get(field(classOf(content), "data", false), content);
if (bs.length >= 206) {
int off = getInt(field(classOf(content), "offset", false), content);
int code = (0xff00&bs[205]<<8)+(0xff&bs[206]); //杞崲205,206瀛楄妭涓烘秷鎭被鍨?/p>
//println(str(code));
Object socket = get(field(classOf(transport), "socket"), transport);
String address = str(socket); //鎴彇ip鍦板潃
int s = indexOf(address, "/");
int e = indexOf(address, ",");
int len = e - s;
String ip = substr(address, s + 1, e);
print(strcat(timestamp(),"---"));
println(strcat(strcat("ip: ", ip), strcat(" queueName: ", str(code))));
}
}
}
}
鎵撳嵃緇撴灉錛?/span>
2/3/10 12:38 PM---ip: 172.22.2.34 queueName: 2001
2/3/10 12:38 PM---ip: 172.22.2.41 queueName: 5001
2/3/10 12:38 PM---ip: 172.22.2.22 queueName: 5001
2/3/10 12:38 PM---ip: 172.22.2.47 queueName: 2001
2/3/10 12:38 PM---ip: 172.22.2.31 queueName: 2001
2/3/10 12:38 PM---ip: 172.22.2.13 queueName: 5001
2/3/10 12:38 PM---ip: 172.22.2.6 queueName: 5001
2/3/10 12:38 PM---ip: 172.22.2.48 queueName: 2001
2/3/10 12:38 PM---ip: 172.22.2.39 queueName: 2001
銆愯ˉ鍏呫?/span>
BTrace 鏄竴涓己澶х殑宸ュ叿錛屼絾鏄紝鍦ㄧ嚎涓婃嫻嬬殑鏃跺欒冭檻鏃舵晥鎬у拰瀹夊叏鎬э紝蹇呴』鏈変竴涓粡榪囨楠岀殑鑴氭湰搴撴墠鍙互瀹夊叏鍙婃椂鐨勫畾浣嶇郴緇熼棶棰?