Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Spring Cloud Sleuth Ö®Greenwich°æ±¾È«¹¥ÂÔ
 
  1379  次浏览      28
 2019-9-29
   
 
±à¼­ÍƼö:

±¾ÎÄÀ´×ÔÓÚcsdn£¬ÎÄÕÂÖ÷Òª½éÉÜÁËSpring Cloud Sleuth£¬ZipkinºÍ°¸Àýʵս£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

΢·þÎñ¼Ü¹¹ÊÇÒ»¸ö·Ö²¼Ê½¼Ü¹¹£¬Î¢·þÎñϵͳ°´ÒµÎñ»®·Ö·þÎñµ¥Ôª£¬Ò»¸ö΢·þÎñϵͳÍùÍùÓкܶà¸ö·þÎñµ¥Ôª¡£ÓÉÓÚ·þÎñµ¥ÔªÊýÁ¿Öڶ࣬ҵÎñµÄ¸´ÔÓÐԽϸߣ¬ Èç¹û³öÏÖÁË´íÎóºÍÒì³££¬ºÜÄÑÈ¥¶¨Î»¡£Ö÷ÒªÌåÏÖÔÚÒ»¸öÇëÇó¿ÉÄÜÐèÒªµ÷Óúܶà¸ö·þÎñ£¬¶øÄÚ²¿·þÎñµÄµ÷Óø´ÔÓÐÔ¾ö¶¨ÁËÎÊÌâÄÑÒÔ¶¨Î»¡£ËùÒÔÔÚ΢·þÎñ¼Ü¹¹ÖУ¬±ØÐëʵÏÖ·Ö²¼Ê½Á´Â·×·×Ù£¬È¥¸ú½øÒ»¸öÇëÇóµ½µ×ÓÐÄÄЩ·þÎñ²ÎÓ룬 ²ÎÓëµÄ˳ÐòÓÖÊÇÔõÑùµÄ£¬´Ó¶ø´ïµ½Ã¿¸öÇëÇóµÄ²½ÖèÇåÎú¿É¼û£¬³öÁËÎÊÌâÄܹ»¿ìËÙ¶¨Î»µÄÄ¿µÄ¡£

ÔÚ΢·þÎñϵͳÖУ¬Ò»¸öÀ´×ÔÓû§µÄÇëÇóÏȵ½´ïǰ¶ËA£¨Èçǰ¶Ë½çÃæ£©£¬È»ºóͨ¹ýÔ¶³Ìµ÷Ó㬵½´ïϵͳµÄÖмä¼þB¡¢C£¨Èç¸ºÔØ¾ùºâ¡¢Íø¹ØµÈ£©£¬ ×îºóµ½´ïºó¶Ë·þÎñD¡¢E£¬ºó¶Ë¾­¹ýһϵÁеÄÒµÎñÂß¼­¼ÆË㣬×îºó½«Êý¾Ý·µ»Ø¸øÓû§¡£¶ÔÓÚÕâÑùÒ»¸öÇëÇ󣬾­ÀúÁËÕâô¶à¸ö·þÎñ£¬ÔõôÑù½«ËüµÄÇëÇó¹ý³ÌÓÃÊý¾Ý¼Ç¼ÏÂÀ´ÄØ£¿Õâ¾ÍÐèÒªÓõ½·þÎñÁ´Â·×·×Ù¡£

Spring Cloud Sleuth

Spring Cloud Sleuth Ϊ·þÎñÖ®¼äµ÷ÓÃÌṩÁ´Â·×·×Ù¡£Í¨¹ý Sleuth ¿ÉÒÔºÜÇå³þµÄÁ˽⵽һ¸ö·þÎñÇëÇó¾­¹ýÁËÄÄЩ·þÎñ£¬ ÿ¸ö·þÎñ´¦Àí»¨·ÑÁ˶೤¡£´Ó¶øÈÃÎÒÃÇ¿ÉÒԺܷ½±ãµÄÀíÇå¸÷΢·þÎñ¼äµÄµ÷ÓùØÏµ¡£´ËÍâ Sleuth ¿ÉÒÔ°ïÖúÎÒÃÇ£º

ºÄʱ·ÖÎö: ͨ¹ý Sleuth ¿ÉÒԺܷ½±ãµÄÁ˽⵽ÿ¸ö²ÉÑùÇëÇóµÄºÄʱ£¬´Ó¶ø·ÖÎö³öÄÄЩ·þÎñµ÷ÓñȽϺÄʱ;

¿ÉÊÓ»¯´íÎó: ¶ÔÓÚ³ÌÐòδ²¶×½µÄÒì³££¬¿ÉÒÔͨ¹ý¼¯³É Zipkin ·þÎñ½çÃæÉÏ¿´µ½;

Á´Â·ÓÅ»¯: ¶ÔÓÚµ÷ÓÃ±È½ÏÆµ·±µÄ·þÎñ£¬¿ÉÒÔÕë¶ÔÕâЩ·þÎñʵʩһЩÓÅ»¯´ëÊ©¡£

Google¿ªÔ´ÁËDapperÁ´Â·×·×Ù×é¼þ£¬²¢ÔÚ2010Äê·¢±íÁËÂÛÎÄ¡¶Dapper, a Large-Scale Distributed Systems Tracing Infrastructure¡·£¬ ÕâÆªÂÛÎÄÊÇÒµÄÚʵÏÖÁ´Â·×·×ٵıê¸ËºÍÀíÂÛ»ù´¡£¬¾ßÓкܸߵIJο¼¼ÛÖµ¡£

Spring Cloud Sleuth²ÉÓÃÁËGoogleµÄ¿ªÔ´ÏîÄ¿DapperµÄרҵÊõÓï¡£

Span£º»ù±¾¹¤×÷µ¥Ôª£¬·¢ËÍÒ»¸öÔ¶³Ìµ÷¶ÈÈÎÎñ¾Í»á²úÉúÒ»¸öSpan£¬SpanÊÇÓÃÒ»¸ö64λIDΨһ±êʶµÄ£¬TraceÊÇÓÃÁíÒ»¸ö64λIDΨһ±êʶµÄ¡£ Span»¹°üº¬ÁËÆäËûµÄÐÅÏ¢£¬ÀýÈçÕªÒª¡¢Ê±¼ä´Áʼþ¡¢SpanµÄIDÒÔ¼°½ø³ÌID¡£

Trace£ºÓÉһϵÁÐSpan×é³ÉµÄ£¬³ÊÊ÷×´½á¹¹¡£ÇëÇóÒ»¸ö΢·þÎñϵͳµÄAPI½Ó¿Ú£¬Õâ¸öAPI½Ó¿ÚÐèÒªµ÷Óöà¸ö΢·þÎñµ¥Ôª£¬ µ÷ÓÃÿ¸ö΢·þÎñµ¥Ôª¶¼»á²úÉúÒ»¸öеÄSpan£¬ËùÓÐÓÉÕâ¸öÇëÇó²úÉúµÄSpan×é³ÉÁËÕâ¸öTrace¡£

Annotation£ºÓÃÓڼǼһ¸öʼþ£¬Ò»Ð©ºËÐÄ×¢½âÓÃÓÚ¶¨ÒåÒ»¸öÇëÇóµÄ¿ªÊ¼ºÍ½áÊø£¬ÕâЩע½âÈçÏ¡£

cs-Client Sent£º¿Í»§¶Ë·¢ËÍÒ»¸öÇëÇó£¬Õâ¸ö×¢½âÃèÊöÁËSpanµÄ¿ªÊ¼¡£

sr-Server Received£º·þÎñ¶Ë»ñµÃÇëÇó²¢×¼±¸¿ªÊ¼´¦ÀíËü£¬Èç¹û½«Æäsr¼õÈ¥csʱ¼ä´Á£¬±ã¿ÉµÃµ½ÍøÂç´«ÊäµÄʱ¼ä¡£

ss-Server Sent£º·þÎñ¶Ë·¢ËÍÏìÓ¦£¬¸Ã×¢½â±íÃ÷ÇëÇó´¦ÀíµÄÍê³É£¨µ±ÇëÇ󷵻ؿͻ§¶Ë£©£¬ÓÃssµÄʱ¼ä´Á¼õÈ¥srʱ¼ä´Á£¬ ±ã¿ÉÒԵõ½·þÎñÆ÷ÇëÇóµÄʱ¼ä¡£

cr-Client Received£º¿Í»§¶Ë½ÓÊÕÏìÓ¦£¬´ËʱSpan½áÊø£¬Èç¹ûcrµÄʱ¼ä´Á¼õÈ¥csʱ¼ä´Á£¬±ã¿ÉÒԵõ½Õû¸öÇëÇóËùÏûºÄµÄʱ¼ä¡£

Spring Cloud Sleuth ҲΪÎÒÃÇÌṩÁËÒ»Ì×ÍêÕûµÄÁ´Â·½â¾ö·½°¸,Spring Cloud Sleuth ¿ÉÒÔ½áºÏ Zipkin£¬½«ÐÅÏ¢·¢Ë͵½ Zipkin£¬ ÀûÓà Zipkin µÄ´æ´¢À´´æ´¢Á´Â·ÐÅÏ¢£¬ÀûÓà Zipkin UI À´Õ¹Ê¾Êý¾Ý¡£

Zipkin

ZipkinÊÇÒ»ÖÖ·Ö²¼Ê½Á´Â·×·×Ùϵͳ¡£ ËüÓÐÖúÓÚÊÕ¼¯½â¾ö΢·þÎñ¼Ü¹¹ÖеÄÑÓ³ÙÎÊÌâËùÐèµÄʱÐòÊý¾Ý¡£ Ëü¹ÜÀíÕâЩÊý¾ÝµÄÊÕ¼¯ºÍ²éÕÒ¡£ ZipkinµÄÉè¼Æ»ùÓÚGoogle DapperÂÛÎÄ¡£

¸ú×ÙÆ÷´æÔÚÓÚÓ¦ÓóÌÐòÖУ¬¼Ç¼ÇëÇóµ÷ÓõÄʱ¼äºÍÔªÊý¾Ý¡£¸ú×ÙÆ÷ʹÓÿ⣬ËüÃǵÄʹÓöÔÓû§ÊÇÎÞ¸ÐÖªµÄ¡£ÀýÈ磬 Web·þÎñÆ÷»áÔÚÊÕµ½ÇëÇóʱºÍ·¢ËÍÏìӦʱ»á¼Ç¼ÏàÓ¦µÄʱ¼äºÍһЩԪÊý¾Ý¡£Ò»´ÎÍêÕûÁ´Â·ÇëÇóËùÊÕ¼¯µÄÊý¾Ý±»³ÆÎªSpan¡£

ÎÒÃÇ¿ÉÒÔʹÓÃËüÀ´ÊÕ¼¯¸÷¸ö·þÎñÆ÷ÉÏÇëÇóÁ´Â·µÄ¸ú×ÙÊý¾Ý£¬²¢Í¨¹ýËüÌṩµÄ REST API ½Ó¿ÚÀ´¸¨ÖúÎÒÃDzéѯ¸ú×ÙÊý¾ÝÒÔʵÏÖ¶Ô·Ö²¼Ê½ÏµÍ³µÄ¼à¿Ø³ÌÐò£¬ ´Ó¶ø¼°Ê±µØ·¢ÏÖϵͳÖгöÏÖµÄÑÓ³ÙÉý¸ßÎÊÌâ²¢ÕÒ³öϵͳÐÔÄÜÆ¿¾±µÄ¸ùÔ´¡£³ýÁËÃæÏò¿ª·¢µÄ API ½Ó¿ÚÖ®Í⣬ËüÒ²ÌṩÁË·½±ãµÄ UI ×é¼þÀ´°ïÖúÎÒÃÇÖ±¹ÛµÄËÑË÷¸ú×ÙÐÅÏ¢ºÍ·ÖÎöÇëÇóÁ´Â·Ã÷ϸ£¬ ±ÈÈ磺¿ÉÒÔ²éѯij¶Îʱ¼äÄÚ¸÷Óû§ÇëÇóµÄ´¦Àíʱ¼äµÈ¡£ Zipkin ÌṩÁ˿ɲå°ÎÊý¾Ý´æ´¢·½Ê½£ºIn-Memory¡¢MySql¡¢Cassandra ÒÔ¼° Elasticsearch¡£½ÓÏÂÀ´µÄ²âÊÔΪ·½±ãÖ±½Ó²ÉÓà In-Memory ·½Ê½½øÐд洢£¬Éú²úÍÆ¼ö Elasticsearch.

ÉÏͼչʾÁË Zipkin µÄ»ù´¡¼Ü¹¹£¬ËüÖ÷ÒªÓÉ 4 ¸öºËÐÄ×é¼þ¹¹³É£º

Collector£ºÊÕ¼¯Æ÷×é¼þ£¬ËüÖ÷ÒªÓÃÓÚ´¦Àí´ÓÍⲿϵͳ·¢Ë͹ýÀ´µÄ¸ú×ÙÐÅÏ¢£¬ ½«ÕâЩÐÅϢת»»Îª Zipkin ÄÚ²¿´¦ÀíµÄ Span ¸ñʽ£¬ÒÔÖ§³ÖºóÐøµÄ´æ´¢¡¢·ÖÎö¡¢Õ¹Ê¾µÈ¹¦ÄÜ¡£

Storage£º´æ´¢×é¼þ£¬ËüÖ÷Òª¶Ô´¦ÀíÊÕ¼¯Æ÷½ÓÊÕµ½µÄ¸ú×ÙÐÅÏ¢£¬Ä¬ÈϻὫÕâЩÐÅÏ¢´æ´¢ÔÚÄÚ´æÖУ¬ ÎÒÃÇÒ²¿ÉÒÔÐ޸Ĵ˴洢²ßÂÔ£¬Í¨¹ýʹÓÃÆäËû´æ´¢×é¼þ½«¸ú×ÙÐÅÏ¢´æ´¢µ½Êý¾Ý¿âÖС£

RESTful API£ºAPI ×é¼þ£¬ËüÖ÷ÒªÓÃÀ´ÌṩÍⲿ·ÃÎʽӿڡ£±ÈÈç¸ø¿Í»§¶Ëչʾ¸ú×ÙÐÅÏ¢£¬ »òÊÇÍâ½Óϵͳ·ÃÎÊÒÔʵÏÖ¼à¿ØµÈ¡£

Web UI£ºUI ×é¼þ£¬»ùÓÚ API ×é¼þʵÏÖµÄÉϲãÓ¦Óá£Í¨¹ý UI ×é¼þÓû§¿ÉÒÔ·½±ã¶øÓÐÖ±¹ÛµØ²éѯºÍ·ÖÎö¸ú×ÙÐÅÏ¢¡£

°¸Àýʵս

ÔÚ±¾°¸ÀýÒ»¹²ÓÐÈý¸öÓ¦Ó㬷ֱðΪע²áÖÐÐÄ£¬eureka-server¡¢eureka-client¡¢eureka-client-feign£¬ Èý¸öÓ¦ÓõĻù±¾ÐÅÏ¢ÈçÏ£º

Ó¦ÓÃÃû ¶Ë¿Ú ×÷ÓÃ
eureka-server 8761 ×¢²áÖÐÐÄ
eureka-client 8763 ·þÎñÌṩÕß
eureka-client-feign 8765 ·þÎñÏû·ÑÕß

ÆäÖÐeureka-server Ó¦ÓÃΪע²áÖÐÐÄ£¬ÆäËûÁ½¸öÓ¦ÓÃÏòËü×¢²á¡£eureka-clientΪ·þÎñÌṩÕߣ¬ÌṩÁËÒ»¸öRESTAPI,eureka-client-feignΪ·þÎñÏû·ÑÕߣ¬ ͨ¹ýFeign ClientÏò·þÎñÌṩÕßÏû·Ñ·þÎñ¡£ ÔÚ֮ǰµÄÎÄÕÂÒѾ­½²ÊöÁËÈçºÎÈçºÎ´î½¨·þÎñ×¢²áÖÐÐÄ£¬ÔÚÕâÀï¾ÍÊ¡ÂÔÕâÒ»²¿·ÖÄÚÈÝ¡£·þÎñÌṩÕßÌṩһ¸öREST½Ó¿Ú£¬·þÎñÏû·ÑÕßͨ¹ýFeignClientÏû·Ñ·þÎñ¡£ ·þÎñÌṩÕß eureka-client·þÎñÌṩÕߣ¬¶ÔÍâÌṩһ¸öRESTAPI£¬²¢Ïò·þÎñ×¢²áÖÐÐÄ×¢²á£¬Õⲿ·ÖÄÚÈÝ£¬²»ÔÙ½²Êö£¬¼ûÔ´Âë¡£ÐèÒªÔÚ¹¤³ÌµÄpomÎļþ¼ÓÉÏsleuthµÄÆð²½ÒÀÀµºÍzipkinµÄÆð²½ÒÀÀµ£¬´úÂëÈçÏ£º

 

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

ÔÚ¹¤³ÌµÄÅäÖÃÎļþapplication.ymlÐèÒª×öÒÔϵÄÅäÖãº

spring:
sleuth:
web:
client:
enabled: true
sampler:
probability: 1.0 # ½«²ÉÑù±ÈÀýÉèÖÃΪ 1.0£¬Ò²¾ÍÊÇÈ«²¿¶¼ÐèÒª¡£Ä¬ÈÏÊÇ 0.1
zipkin:
base-url: http://localhost:9411/ # Ö¸¶¨ÁË Zipkin ·þÎñÆ÷µÄµØÖ·

ÆäÖÐspring.sleuth.web.client.enableΪtrueÉèÖõÄÊÇweb¿ªÆôsleuth¹¦ÄÜ;spring.sleuth.sampler.probability¿ÉÒÔÉèÖÃΪСÊý£¬ ×î´óֵΪ1.0£¬µ±ÉèÖÃΪ1.0ʱ¾ÍÊÇÁ´Â·Êý¾Ý100%ÊÕ¼¯µ½zipkin-server£¬µ±ÉèÖÃΪ0.1ʱ£¬¼´10%¸ÅÂÊÊÕ¼¯Á´Â·Êý¾Ý;spring.zipkin.base-urlÉèÖÃzipkin-serverµÄµØÖ·¡£

¶ÔÍâÌṩһ¸öApi£¬´úÂëÈçÏ£º

@RestController
public class HiController {

@Value("${server.port}")
String port;
@GetMapping("/hi")
public String home(@RequestParam String name) {
return "hi "+name+",i am from port:" +port;
}

}

·þÎñÏû·ÑÕß

·þÎñÏû·ÑÕßͨ¹ýFeignClientÏû·Ñ·þÎñÌṩÕßÌṩµÄ·þÎñ¡£Í¬·þÎñÌṩÕßÒ»Ñù£¬ÐèÒªÔÚ¹¤³ÌµÄpomÎļþ¼ÓÉÏsleuthµÄÆð²½ÒÀÀµºÍzipkinµÄÆð²½ÒÀÀµ£¬ ÁíÍâÒ²ÐèÒªÔÚÅäÖÃÎļþapplication.yml×öÏà¹ØµÄÅäÖ㬾ßÌåͬ·þÎñÌṩÕß¡£

·þÎñÏû·ÑÕßͨ¹ýfeignClient½øÐзþÎñÏû·Ñ£¬feignclient´úÂëÈçÏ£º

@FeignClient(value = "eureka-client",configuration = FeignConfig.class)
public interface EurekaClientFeign {

@GetMapping(value = "/hi")
String sayHiFromClientEureka(@RequestParam(value = "name") String name);
}

servcie²ã´úÂëÈçÏ£º

@Service
public class HiService {

@Autowired
EurekaClientFeign eurekaClientFeign;


public String sayHi(String name){
return eurekaClientFeign.sayHiFromClientEureka(name);
}
}

controller´úÂëÈçÏ£º

@RestController
public class HiController {
@Autowired
HiService hiService;

@GetMapping("/hi")
public String sayHi(@RequestParam( defaultValue = "forezp",required = false)String name){
return hiService.sayHi(name);
}

ÉÏÃæµÄ´úÂë¶ÔÍⱩ¶һ¸öAPI£¬Í¨¹ýFeignClientµÄ·½Ê½µ÷ÓÃeureka-clientµÄ·þÎñ¡£

zipkin-server

ÔÚSpring Cloud D°æ±¾£¬zipkin-serverͨ¹ýÒýÈëÒÀÀµµÄ·½Ê½¹¹½¨¹¤³Ì£¬×Ô´ÓE°æ±¾Ö®ºó£¬ÕâÒ»·½Ê½¸Ä±äÁË£¬²ÉÓùٷ½µÄjarÐÎʽÆô¶¯£¬ ËùÒÔÐèҪͨ¹ýÏÂÔØ¹Ù·½µÄjarÀ´Æô¶¯£¬Ò²Í¨¹ýÒÔÏÂÃüÁîÒ»¼üÆô¶¯£º

curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar
ÉÏÃæµÄµÚÒ»ÐÐÃüÁî»á´Ózipkin¹ÙÍøÏÂÔØ¹Ù·½µÄjar°ü¡£ Èç¹ûÊÇwindowϵͳ£¬½¨ÒéʹÓÃgitbashÖ´ÐÐÉÏÃæµÄÃüÁî¡£ Èç¹ûÓà Docker µÄ»°£¬Ê¹ÓÃÒÔÏÂÃüÁ
docker run -d -p 9411:9411 openzipkin/zipkin

ͨ¹ýjava -jar zipkin.jarµÄ·½Ê½Æô¶¯Ö®ºó£¬ÔÚä¯ÀÀÆ÷ÉÏ·ÃÎÊlcoalhost:9411£¬ÏÔʾµÄ½çÃæÈçÏ£º

Á´Â·Êý¾ÝÑéÖ¤

ÒÀ´ÎÆô¶¯eureka-server£¬eureka-client,eureka-client-feignµÄÈý¸öÓ¦Ó㬵ÈËùÓÐÓ¦ÓÃÆô¶¯Íê³Éºó£¬ÔÚä¯ÀÀÆ÷ÉÏ·ÃÎÊhttp://localhost:8765/hi £¨Èç¹û±¨´í£¬ÊÇ·þÎñÓë·¢ÏÖÐèÒªÒ»¶¨µÄʱ¼ä£¬ÄÍÐĵȴý¼¸Ê®Ã룩£¬·ÃÎʳɹ¦ºó£¬ÔÙ´ÎÔÚä¯ÀÀÆ÷ÉÏ·ÃÎÊzipkin-serverµÄÒ³Ãæ£¬ÏÔʾÈçÏ£º

´ÓÉÏͼ¿ÉÒÔ¿´³öÿ´ÎÇëÇóËùÏûºÄµÄʱ¼ä£¬ÒÔ¼°Ò»Ð©spanµÄÐÅÏ¢¡£

´ÓÉÏͼ¿ÉÒÔ¿´³ö¾ßÌåµÄ·þÎñÒÀÀµ¹ØÏµ£¬eureka-feign-clientÒÀÀµÁËeureka-client¡£

ʹÓÃrabbitmq½øÐÐÁ´Â·Êý¾ÝÊÕ¼¯

ÔÚÉÏÃæµÄ°¸ÀýÖÐʹÓõÄhttpÇëÇóµÄ·½Ê½½«Á´Â·Êý¾Ý·¢Ë͸øzipkin-server£¬Æäʵ»¹¿ÉÒÔʹÓÃrabbitmqµÄ·½Ê½½øÐзþÎñµÄÏû·Ñ¡£ ʹÓÃrabbitmqÐèÒª°²×°rabbitmq³ÌÐò£¬ÏÂÔØµØÖ·http://www.rabbitmq.com/¡£

ÏÂÔØÍê³Éºó£¬ÐèÒªeureka-clientºÍeureka-client-feignµÄÆð²½ÒÀÀµ¼ÓÉÏrabbitmqµÄÒÀÀµ£¬ÒÀÀµÈçÏ£º

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>

ÔÚÅäÖÃÎļþÉÏÐèÒªÅäÖÃrabbitmqµÄÅäÖã¬ÅäÖÃÐÅÏ¢ÈçÏ£º

spring:
rabbitmq:
host: localhost
username: guest
password: guest
port: 5672

ÁíÍâÐèÒª°Ñspring.zipkin.base-urlÈ¥µô¡£

ÔÚÉÏÃæ2¸ö¹¤³ÌÖУ¬rabbitmqͨ¹ý·¢ËÍÁ´Â·Êý¾Ý£¬ÄÇôzipkin-serverÊÇÔõôÑùÖªµÀrabbitmqµÄµØÖ·ÄØ£¬Ôõô¼àÌýÊÕµ½µÄÁ´Â·Êý¾ÝÄØ£¿ ÕâÐèÒªÔÚ³ÌÐòÆô¶¯µÄʱºò£¬Í¨¹ý»·¾³±äÁ¿µÄÐÎʽµ½»·¾³ÖУ¬È»ºózikin-server´Ó»·¾³±äÁ¿ÖжÁÈ¡¡£

¿ÉÅäÖõÄÊôÐÔÈçÏ£º

±ÈÈ磬ͨ¹ýÒÔÏÂÃüÁîÆô¶¯£º

RABBIT_ADDRESSES=localhost java -jar zipkin.jar

ÉÏÃæµÄÃüÁîµÈͬÓÚһϵÄÃüÁ

java -jar zipkin.jar --zipkin.collector.rabbitmq.addressed=localhost

ÓÃÉÏÃæµÄ2ÌõÃüÁîÖеÄÈκÎÒ»ÖÖ·½Ê½ÖØÐÂÆô¶¯zipkin-server³ÌÐò£¬²¢ÖØÐÂÆô¶¯eureka-client¡¢eureka-server¡¢eureka-client-feign£¬ ¶¯Íê³ÉºóÔÚä¯ÀÀÆ÷ÉÏ·ÃÎÊhttp://localhost:8765/hi£¬ÔÙ·ÃÎÊhttp://localhost:9411/zipkin/£¬¾Í¿ÉÒÔ¿´µ½Í¨¹ýHttp·½Ê½·¢ËÍÁ´Â·Êý¾ÝÒ»ÑùµÄ½Ó¿Ú¡£

×Ô¶¨ÒåTag

ÔÚÒ³ÃæÉÏ¿ÉÒԲ鿴ÿ¸öÇëÇóµÄtraceId£¬Ã¿¸ötraceÓÖ°üº¬Èô¸ÉµÄspan£¬Ã¿¸öspanÓÖ°üº¬Á˺ܶàµÄtag£¬×Ô¶¨Òåtag¿ÉÒÔͨ¹ýTracerÕâ¸öÀàÀ´×Ô¶¨Òå¡£

@Autowired
Tracer tracer;

@GetMapping("/hi")
public String home(@RequestParam String name) {
tracer.currentSpan().tag("name","forezp");
return "hi "+name+",i am from port:" +port;
}

½«Á´Â·Êý¾Ý´æ´¢ÔÚMysqlÊý¾Ý¿âÖÐ

ÉÏÃæµÄÀý×ÓÊǽ«Á´Â·Êý¾Ý´æÔÚÄÚ´æÖУ¬Ö»Òªzipkin-serverÖØÆôÖ®ºó£¬Ö®Ç°µÄÁ´Â·Êý¾ÝÈ«²¿²éÕÒ²»µ½ÁË£¬zipkinÊÇÖ§³Ö½«Á´Â·Êý¾Ý´æ´¢ÔÚmysql¡¢cassandra¡¢elasticsearchÖеġ£

ÏÖÔÚ½²½âÈçºÎ½«Á´Â·Êý¾Ý´æ´¢ÔÚMysqlÊý¾Ý¿âÖС£

Ê×ÏÈÐèÒª³õʼ»¯zikin´æ´¢ÔÚMysqlµÄÊý¾ÝµÄscheme£¬¿ÉÒÔÔÚÕâÀï²é¿´

https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql£¬¾ßÌåÈçÏ£º

CREATE TABLE IF NOT EXISTS zipkin_spans (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL,
`id` BIGINT NOT NULL,
`name` VARCHAR(255) NOT NULL,
`parent_id` BIGINT,
`debug` BIT(1),
`start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
`duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`) COMMENT 'ignore insert on duplicate';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`) COMMENT 'for joining with zipkin_annotations';
ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';

CREATE TABLE IF NOT EXISTS zipkin_annotations (
`trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
`trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
`span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
`a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
`a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
`a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
`a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
`endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
`endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
`endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job';

CREATE TABLE IF NOT EXISTS zipkin_dependencies (
`day` DATE NOT NULL,
`parent` VARCHAR(255) NOT NULL,
`child` VARCHAR(255) NOT NULL,
`call_count` BIGINT,
`error_count` BIGINT
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);

ÔÚÊý¾Ý¿âÖгõʼ»¯ÉÏÃæµÄ½Å±¾Ö®ºó£¬ÐèÒª×öµÄ¾ÍÊÇzipkin-serverÈçºÎÁ¬½ÓÊý¾Ý¿â¡£zipkinÈçºÎÁ¬Êý¾Ý¿âͬÁ¬½ÓrabbitmqÒ»Ñù¡£ zipkinÁ¬½ÓÊý¾Ý¿âµÄÊôÐÔËù¶ÔÓ¦µÄ»·¾³±äÁ¿ÈçÏ£º

-

STORAGE_TYPE=mysql MYSQL_HOST=localhost MYSQL_TCP_PORT=3306 MYSQL_USER=root MYSQL_PASS=123456 MYSQL_DB=zipkin java -jar zipkin.jar

µÈͬÓÚÒÔϵÄÃüÁî

java -jar zipkin.jar --zipkin.torage.type=mysql --zipkin.torage.mysql. host=localhost --zipkin.torage.mysql.port=3306 --zipkin.torage.mysql.username=root --zipkin.torage.mysql.password=123456

ʹÓÃÉÏÃæµÄÃüÁîÆô¶¯zipkin.jar¹¤³Ì£¬È»ºóÔÙä¯ÀÀÊýÉÏ·ÃÎÊhttp://localhost:8765/hi£¬ÔÙ·ÃÎÊhttp://localhost:9411/zipkin/£¬¿ÉÒÔ¿´µ½Á´Â·Êý¾Ý¡£ÕâʱȥÊý¾Ý¿â²é¿´Êý¾Ý£¬Ò²ÊÇ¿ÉÒÔ¿´µ½´æ´¢ÔÚÊý¾Ý¿âµÄÁ´Â·Êý¾Ý£¬ÈçÏ£º

ÕâÊ±ÖØÆôÓ¦ÓÃzipkin.jar£¬ÔÙ´ÎÔÚä¯ÀÀÆ÷ÉÏ·ÃÎÊhttp://localhost:9411/zipkin/£¬ÈÔÈ»¿ÉÒԵõ½Ö®Ç°µÄ½á¹û£¬Ö¤Ã÷Á´Â·Êý¾Ý´æ´¢ÔÚÊý¾Ý¿âÖУ¬¶ø²»ÊÇÄÚ´æÖС£

½«Á´Â·Êý¾Ý´æÔÚÔÚElasticsearchÖÐ

zipkin-serverÖ§³Ö½«Á´Â·Êý¾Ý´æ´¢ÔÚElasticSearchÖС£¶ÁÕßÐèÒª×ÔÐа²×°ElasticSearchºÍKibana£¬ÏÂÔØµØÖ·Îª https://www. elastic.co/products/elasticsearch¡£°²×°Íê³ÉºóÆô¶¯£¬ÆäÖÐElasticSearchµÄĬÈ϶˿ںÅΪ9200£¬KibanaµÄĬÈ϶˿ںÅΪ5601¡£

ͬÀí£¬zipkinÁ¬½ÓelasticsearchÒ²ÊÇ´Ó»·¾³±äÁ¿ÖжÁÈ¡µÄ£¬elasticsearchÏà¹ØµÄ»·¾³±äÁ¿ºÍ¶ÔÓ¦µÄÊôÐÔÈçÏ£º

²ÉÓÃÒÔÏÂÃüÁîÆô¶¯zipkin-server:

STORAGE_TYPE=elasticsearch ES_HOSTS=http://localhost:9200 ES_INDEX=zipkin java -jar zipkin.jar
java -jar zipkin.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS= http://localhost:9200 --ES_INDEX=zipkin
java -jar zipkin.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS= http://localhost:9200 --ES_INDEX=zipkin
java -jar zipkin.jar --zipkin.torage.type=elasticsearch --zipkin.torage.elasticsearch.hosts=http://localhost:9200 --zipkin.torage.elasticsearch.index=zipkin

Æô¶¯Íê³Éºó£¬È»ºóÔÚä¯ÀÀÊýÉÏ·ÃÎÊhttp://localhost:8765/hi£¬ÔÙ·ÃÎÊhttp://localhost:9411/zipkin/£¬¿ÉÒÔ¿´µ½Á´Â·Êý¾Ý¡£ÕâʱÁ´Â·Êý¾Ý´æ´¢ÔÚElasticSearch¡£

ÔÚzipkinÉÏչʾÁ´Â·Êý¾Ý

Á´Â·Êý¾Ý´æ´¢ÔÚElasticSearchÖУ¬ElasticSearch¿ÉÒÔºÍKibana½áºÏ£¬½«Á´Â·Êý¾ÝչʾÔÚKibanaÉÏ¡£°²×°Íê³ÉKibanaºóÆô¶¯£¬KibanaĬÈÏ»áÏò±¾µØ¶Ë¿ÚΪ9200µÄElasticSearch¶ÁÈ¡Êý¾Ý¡£KibanaĬÈϵĶ˿ÚΪ5601£¬·ÃÎÊKibanaµÄÖ÷Ò³http://localhost:5601£¬Æä½çÃæÈçÏÂͼËùʾ¡£

ÔÚÉÏͼµÄ½çÃæÖУ¬µ¥»÷¡°Management¡±°´Å¥£¬È»ºóµ¥»÷¡°Add New¡±£¬Ìí¼ÓÒ»¸öindex¡£ÎÒÃǽ«ÔÚÉϽÚElasticSearchÖÐдÈëÁ´Â·Êý¾ÝµÄindexÅäÖÃΪ¡°zipkin¡±£¬ÄÇôÔÚ½çÃæÌîдΪ¡°zipkin-*¡±£¬µ¥»÷¡°Create¡±°´Å¥£¬½çÃæÈçÏÂͼËùʾ£º

´´½¨Íê³Éindexºó£¬µ¥»÷¡°Discover¡±£¬¾Í¿ÉÒÔÔÚ½çÃæÉÏչʾÁ´Â·Êý¾ÝÁË£¬Õ¹Ê¾½çÃæÈçÏÂͼËùʾ¡£

   
1379 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù