spring cloud sleuth zipkin kafka收集
应用:服务端将日志发送到消息中间件中,zipkin从消息中间件中获取日志数据,实现日志数据的异步获取
********************************
zipkin 创建
#zookeeper
docker run -it -d --net fixed3 --ip 192.168.57.2 --name zoo zookeeper
#kafka
docker run -it -d --net fixed3 --ip 192.168.57.3 \
-v /usr/kafka/single/conf/server.properties:/usr/kafka/config/server.properties \
--name kafka kafka bash bin/kafka-server-start.sh config/server.properties
#zipkin
docker run -it -d --net fixed3 --ip 192.168.57.4 -e "QUERY_PORT=8080" \
-e "COLLECTOR_KAFKA_ENABLED=true" -e "KAFKA_BOOTSTRAP_SERVERS=192.168.57.3:9092" \
--name zipkin openzipkin/zipkin
********************************
导入 jar 包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
********************************
服务1:hello-service
*******************
配置文件
spring:
application:
name: hello-service
cloud:
consul:
host: 192.168.57.21
port: 8500
zipkin:
sender:
type: kafka
kafka:
bootstrap-servers: 192.168.57.3:9092
ZipkinSenderProperties.SenderType:收集类型
@ConfigurationProperties("spring.zipkin.sender")
public class ZipkinSenderProperties {
private ZipkinSenderProperties.SenderType type;
public ZipkinSenderProperties() {
}
public ZipkinSenderProperties.SenderType getType() {
return this.type;
}
public void setType(ZipkinSenderProperties.SenderType type) {
this.type = type;
}
public static enum SenderType {
ACTIVEMQ, //使用消息中间件activemq收集
RABBIT, //使用消息中间件rabbitmq收集
KAFKA, //使用消息中间件kafka收集
WEB; //使用http收集
private SenderType() {
}
}
}
*******************
controller 层
HelloController
@RestController
public class HelloController {
private Logger logger= LoggerFactory.getLogger(HelloController.class);
@RequestMapping("/hello")
public String hello(){
logger.info("hello controller: {}","hello world");
return "hello world";
}
}
********************************
服务2:hello-consumer
*******************
配置文件
spring:
application:
name: hello-conusmer
cloud:
consul:
host: 192.168.57.21
port: 8500
zipkin:
sender:
type: kafka
kafka:
bootstrap-servers: 192.168.57.3:9092
*******************
service 层
HelloService
@FeignClient(name = "hello-service",fallback = HelloServiceImpl.class)
public interface HelloService {
@RequestMapping("/hello")
String hello();
}
*******************
serviceImpl 层
HelloServiceImpl
@Service
public class HelloServiceImpl implements HelloService {
@Override
public String hello() {
return "本地调用输出: "+"hello world";
}
}
*******************
controller 层
HelloConsumerController
@RestController
public class HelloConsumerController {
private Logger logger= LoggerFactory.getLogger(HelloConsumerController.class);
@Resource
private HelloService helloService;
@RequestMapping("/consume")
public String consume(){
logger.info("远程调用hello-service:{}",helloService.hello());
logger.info("本地调用hello-consumer:{}","hello consumer");
return "hello consumer";
}
}
**************************
使用测试
调用接口/consume
多次调用/consume