功能很简单:在工程中使用logback记录日志,通过logstash的tcp传入es。
ElasticSearch LogStash Kibana 都是7.3
EurekaServer:提供注册中心
ServiceProvider:启动9002,9003两个端口作为服务提供者
FeignClient:使用Feign进行消费
ServiceProvider服务中提供Restful接口,http://localhost:9002/provider/getSomthing 返回当前服务的端口号
FeignClient消费者通过Feignhttp://localhost/9004/feign/getPort调用ServiceProvider服务,获取服务的端口号
日志记录在·ServiceProvider工程中
首先在pom中引入依赖
net.logstash.logback
logstash-logback-encoder
6.1
在/src/main/resources/路径下新建logback.xml
ProviderLog
127.0.0.1:5044
UTC
{
"app": "${springAppName}_${serverPort}",
"level": "%level",
"thread": "%thread",
"class": "%logger{40}",
"message": "%message"
}
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
${LOG_HOME}/system.log.%d{yyyy-MM-dd}.log
30
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
10MB
Controller如下
package com.zzj.cloud.serviceprovider.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/provider")
public class ProviderController {
Logger logger = LoggerFactory.getLogger("ProviderController");
@Value("${server.port}")
private String port;
@GetMapping("/getSomething")
public String getPort(){
//此处记录日志,会在console打印出来,同时会发送至5044被logstash记录,转存至es
logger.info("There comes a request,the response is:" + port);
return port;
}
}
在访问接口之后,可以在kibana看到如下记录。
然后添加索引,Management -> Index management -> Kibana -> Index Patterns 点击Create index pattern,在输入框输入刚才的索引名字logstash-2019.08.05-000001,点击Next Step
选择时间戳 @timestamp,选择Create index pattern完成。
创建完毕后,会展示出所有的关键字
然后回到Discover页面
选择logstash-2019.08.05-000001,选择不同的fields字段进行筛选和展示
_source是默认全部字段,其中自定义的app,class是在logback.xml中配置的关键字,会在此处展示。app显示的是服务名,如果是其他工程,则会显示对应的工程名,class是对应的类名,等等。都可以在详情中看到。
至此,简单的ELK环境就搭建完毕,并且可以将系统日志通过logstash传入es中,进行查询展示。
ELK的功能不止于此,可以做日志处理,也可以做类似solr的实时查询。