简介
搭建日志系统的目的主要为了在生产环境下能够方便的查看多个项目的实时日记,增加开发效率。特别是在线上多台服务器部署时候,不用在登录服务器进入项目目录,通过 tail -f 等命令来查看日记了。
目标
- 使用 ELK (Elasticsearch、Logstash、Kibana) 构建日记系统。
- 实现多台服务器收集 Laravel 应用日记与 Nginx 日记。
- Kibana 报表的展示日记信息。
架构
Filebeat + Redis + ELK ( Elasticsearch、Logstash、Kibana )
- Filebeat 从服务器取日志文件并存储到 Redis 中。
- Logstash 从 Redis 中取出日志记录,解析处理后并转发到 Elasticsearch 中。
- Kibana 从 Elasticsearch 中读取数据并展示。
配置
elasticsearch安装
1.安装
1 | brew install elasticsearch |
安装目录:/usr/local/Cellar/elasticsearch/{elasticsearch-version}/
日志目录:/usr/local/var/log/elasticsearch/
插件目录:/usr/local/var/elasticsearch/plugins/
配置目录:/usr/local/etc/elasticsearch/
2.启动
1 | brew services start elasticsearch |
首次启动,默认的端口号是9200,用户名是elastic,密码changeme
kibana
1.安装
1 | brew install kibana |
安装目录:/usr/local/Cellar/kibana/{kibana-version}/
配置目录:/usr/local/etc/kibana/
2.修改配置文件
1 | vi /usr/local/etc/kibana/kibana.yml |
3.启动
1 | brew services start kibana |
首次启动,默认端口号是5601,打开浏览器访问http://localhost:5601
访问kibana管理页面,会弹框要求输入用户名密码,输入elastic和123456即可。
logstash
1.安装
1 | brew install logstash |
安装目录:/usr/local/Cellar/logstash/{logstash-version}/
2.安装插件
1 | cd /usr/local/Cellar/logstash/{logstash-version}/ |
3.编辑配置文件
1 | vi jdbc.conf |
4.执行脚本
1 | ./logstash -f jdbc.conf |
filebeat
安装
1 | brew install filebeat |
安装目录:/usr/local/Cellar/filebeat/{filebeat-version}/
配置目录:/usr/local/etc/filebeat/
缓存目录:/usr/local/var/lib/filebeat/
logstash安装
Logstash的安装脚本如下:
1 | # 下载logstash的压缩包 |
stash第一个事件
Logstash管道有两个必需元素,输入和输出,以及一个可选元素filter。 输入插件使用来自源的数据,过滤器插件在您指定时修改数据,输出插件将数据写入目标。
如下如
1 | datasource -> [logstash pipeline](inputs-filter-outputs) -> elasticsearch |
要测试Logstash安装成功,运行最基本的Logstash管道。 执行以下的命令
1 | bin/logstash -e 'input { stdin { } } output { stdout {} }' |
-e标志使您可以直接从命令行指定配置。 通过在命令行指定配置,可以快速测试配置,而无需在迭代之间编辑文件。 示例中的管道从标准输入stdin获取输入,并以结构化格式将输入移动到标准输出stdout。
启动Logstash后,等到看到“Pipeline main started”,然后在命令提示符下输入hello world,显示的如下:
1 | hello world |
配置logstash输出到elasticsearch
修改logstash的安装目录的config目录下的logstash-sample.conf文件,配置如下:
1 | input { |
在上面的配置中,输入数据源为filebeat,关于filebeat见下一小节,输出源为elasticsearch。更多的输入和输出源的配置见官网https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html
用下面的命令从后台启动logstash:
1 | ./bin/logstash -f config/logstash-sample.conf >logstash.log 2>&1 & |
logstash结合filebeat
在分布式系统中,一台主机可能有多个应用,应用将日志输出到主机的指定目录,这时由logstash来搬运日志并解析日志,然后输出到elasticsearch上。由于于
logstash是java应用,解析日志是非的消耗cpu和内存,logstash安装在应用部署的机器上显得非常的笨重。最常见的做法是用filebeat部署在应用的机器上,logstash单独部署,然后由
filebeat将日志输出给logstash解析,解析完由logstash再传给elasticsearch。
下载filebeat,下载命令如下:
1 | wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.2.0-linux-x86_64.tar.gz |
vim filebeat.yml修改配置:
1 | filebeat.inputs: |
主要配置的是日志的搜集目录为/var/log/service-hi.log,这个目录是应用service-hi输出日志的文件。输出到logstsh的地址为192.168.1.4
启动filebeat,执行一下命令:
1 | sudo chown root filebeat.yml |
Spring Boot整合ELK+Filebear构建日志系统
在SpringBoot应用service-hi,定时输出日志如下:
1 |
|
然后在部署了filebeat的机器上部署该应用,应用的输出文件为/var/log/service-hi.log,应用启动命令如下:
1 | nohup java -jar elk-test-0.0.1-SNAPSHOT.jar > /var/log/service-hi.log 2>&1 & |
应用启动成功后日志输出如下:
1 | 2019-07-02 17:13:13.530 INFO 31579 --- [pool-1-thread-1] com.example.elktest.ElkTestApplication : seed:562779 |
这时的日志数据的传输路径如下图:
1.png
在kibana组件上查看,可以看到创建了一个filebeat开头的数据索引,如下图:
微信截图_20190702170554.png
在日志搜索界面,可以看到service-hi应用输出的日志,如图所示: