在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常底下。
通常,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
核心流程:Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。
在application.properties中添加:
logging.file.path=app_log/log
此时运行该项目在根目录下会生成app_log/log文件夹,下面有spring.log。里面便存储着我们运行时的日志信息。
为了效果演示,添加Controller。
@RestController
@Slf4j
public class TestController {
@GetMapping("/GetTest")
public String GetTest(){
log.info("哈哈哈");
log.error("哦哦哦哦哦");
log.warn("警告");
return "success";
}
}
下面打包成jar包,上传至CenterOS服务器,并启动。
Elasticsearch的安装在我博客中有详细的安装说明及集群的搭建,这部分可参考:
https://blog.csdn.net/qq_43692950/article/details/107689309
Logstash环境要和上面springboot项目部署的在一台主机上。
下载链接:
https://elasticsearch.cn/download/
这里我用的logstash-6.4.3版本。
将logstash-6.4.3上传至服务器:
scp G:\Optimize\Util\elasticserch\logstash-6.4.3.tar.gz [email protected]:/home/bxc/bxc/es
解压:
tar -zxvf logstash-6.4.3.tar.gz
进入bin文件夹创建config文件夹:
cd logstash-6.4.3/bin
mkdir config
创建文件log.conf 写入下面内容:
input {
# 从文件读取日志信息 输送到控制台
file {
path => "/home/bxc/bxc/log/app_log/log/spring.log" ##指向上面springboot项目运行日志生成的路径
codec => "json" ## 以JSON格式读取日志
type => "elasticsearch"
start_position => "beginning"
}
}
# filter {
#
# }
output {
# 标准输出
# stdout {}
# 输出进行格式化,采用Ruby库来解析日志
stdout { codec => rubydebug }
elasticsearch {
hosts => ["192.168.2.125:9200"] ##es的地址
index => "es-%{+YYYY.MM.dd}" ##es 索引的生成方式
}
}
回到bin目录,执行:
./logstash -f /config/log.conf
此时,访问原来springboot项目的Controller,看这边控制台会打印日志信息,证明配置成功。
我这边直接下载的windows环境下的,然后设置远程服务器的es地址即可。
下载链接:
https://elasticsearch.cn/download/
注意:Kibana环境要和你的es的环境版本一致。
修改kibana-6.4.3-windows-x86_64\config\kibana.yml
elasticsearch.url: "http://192.168.2.125:9200"
然后点击bin/kibana.bat运行
最后在浏览器输入下面地址即可看到kibana界面:
http://localhost:5601
找到dev tools开发工具里,这在边就可以对es进行各种操作了。
比如:查看刚才的信息:
GET /es-2020.07.31/_search
反馈结果:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 21,
"max_score": 1,
"hits": [
{
"_index": "es-2020.07.31",
"_type": "doc",
"_id": "KRGeo3MBinEzx9s_9x-s",
"_score": 1,
"_source": {
"host": "localhost.localdomain",
"tags": [
"_jsonparsefailure"
],
"type": "elasticsearch",
"@timestamp": "2020-07-31T06:46:11.271Z",
"@version": "1",
"path": "/home/bxc/bxc/log/app_log/log/spring.log",
"message": "2020-07-31 14:46:10.929 WARN 23932 --- [http-nio-8080-exec-8] c.bxc.testelk.Controller.TestController : 警告"
}
},
{
"_index": "es-2020.07.31",
"_type": "doc",
"_id": "KhGeo3MBinEzx9s_-B8r",
"_score": 1,
"_source": {
"host": "localhost.localdomain",
"tags": [
"_jsonparsefailure"
],
"type": "elasticsearch",
"@timestamp": "2020-07-31T06:46:11.258Z",
"@version": "1",
"path": "/home/bxc/bxc/log/app_log/log/spring.log",
"message": "2020-07-31 14:46:10.489 ERROR 23932 --- [http-nio-8080-exec-5] c.bxc.testelk.Controller.TestController : 哦哦哦哦哦"
}
},
{
"_index": "es-2020.07.31",
"_type": "doc",
"_id": "HxGeo3MBinEzx9s_ah8z",
"_score": 1,
"_source": {
"host": "localhost.localdomain",
"tags": [
"_jsonparsefailure"
],
"type": "elasticsearch",
"@timestamp": "2020-07-31T06:45:33.944Z",
"@version": "1",
"path": "/home/bxc/bxc/log/app_log/log/spring.log",
"message": "2020-07-31 14:45:33.029 INFO 23932 --- [http-nio-8080-exec-1] c.bxc.testelk.Controller.TestController : 哈哈哈"
}
},
]
}
}
至此一个简易的ELK环境就搭建成功了!