前言
在生产环境中,有多台服务器,如果需要通过日志定位项目的bug的话,需要在每台服务器上使用传统的命令方式查询,例如
tail -n 300 my-application.log | grep 'node-1' 关键字搜
tail 100f my-application.log 实时搜
等,这样的效率非常低下。如果服务器很多的话,每台进行查询是非常麻烦的。所以就需要对日志进行集中化的管理,与此同时日志的集中,也会导致统计和检索的难度飙升。ELK就是为了解决这些问题。
E
elasticsearch,存放日志,可以快速查询。
L
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用,如搜索等;logstash带有一个web界面,搜索和展示所有日志;一般工作为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各个节点日志进行过滤、修改等操作并发送elasticsearch上。
核心流程:Logstash事件处理有三个阶段:inputs-->filters-->outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,包括所有可以抛出来的日志类型。
下载地址
https://www.elastic.co/cn/downloads/past-releases#logstash
我是下载的6.4.2的tar版本
下载好之后复制到linux服务器解压
tar -zxvf logstash-6.4.2.tar.gz
在config配置文件夹里新建配置文件test.conf
input {
# 从文件读取日志信息 输送到控制台
file {
path => "/usr/local/elasticsearch-6.4.2/logs/my-application.log"
codec => "json" ## 以JSON格式读取日志
type => "elasticsearch" #这里只是一个命名,我们读取的是es日志文件,所以命名为elasticsearch
start_position => "beginning"
}
}
# filter {
#
# }
output {
# 标准输出
# stdout {}
# 输出进行格式化,采用Ruby库来解析日志
stdout { codec => rubydebug }
}
这个配置文件的作用是指定读取日志文件,配置输出方式;这里我们是读取es的日志文件,然后直接格式化后输出。
启动logstash
./bin/logstash -f ./config/test.conf
启动成功之后再启动一下es,可以发现es打印的日志,在logstash中也以json的形式打印了。
可以发现打印的日志是有时间戳的,之后设置logstash将日志存在es里,用es模糊查询是可以很快很方便的查询到日志的。
将日志输出到es,需要修改配置文件test.conf
input {
# 从文件读取日志信息 输送到控制台
file {
path => "/usr/local/elasticsearch-6.4.2/logs/my-application.log"
codec => "json" ## 以JSON格式读取日志
type => "elasticsearch"
start_position => "beginning"
}
}
# filter {
#
# }
output {
# 标准输出
# stdout {}
# 输出进行格式化,采用Ruby库来解析日志
stdout { codec => rubydebug }
#输出到es
elasticsearch {
hosts => ["192.168.0.108:9200"] #es地址
index => "es-%{+YYYY.MM.dd}" #自动创建索引,默认是doc类型,索引名称为es-年月日
}
}
重新启动logstash
可以看到有create_mapping这些字眼,说明成功了。
K
使用kibana图形界面展示es日志信息。
根据日期索引查看全部日志
模糊搜索日志
使用kibana的discover分析数据
总结