原文地址:https://www.cnblogs.com/zys2019/p/14816634.html
一、概述
1.1 定义
对于大规模的日志,需要集中化的管理。而ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。ELK是三种技术产品的简称,包括Elasticsearch、Logstash、Kibana,可在项目中作为日志框架使用。
1.2 功能说明
- Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。
- Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。
- Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
简单来说,应用服务生产日志,通过Logger产生日志并输出;Logstash通过http接收应用服务产生的日志;Elasticsearch为日志提供全文检索功能;kibana为Elasticsearch提供图形化界面。
二、部署ELK
部署环境
- CentOS Linux release 7.9.2009 (Core)
- Docker Version: 20.10.12
- Docker Compose version v2.3.4
2.1 创建目录及配置文件
1) 创建elasticsearch数据目录及插件目录
2) 创建kibana目录,以便后续汉化操作
配置kibana汉化
3) 创建logstash.conf配置文件
编辑配置logstash.conf,其内容如下
在这里指定了输入的日志的端口是4560,那么下面对外暴露的端口也必须是4560。
4) 创建docker-compose.yml文件
2.2 配置docker-compose并启动
配置内容如下:
这里使用privileged设置为true是赋予这个容器root权限。然后启动
5) docker-compose启动elk
完整目录结构如下图
若启动报错,需要先关闭并删除容器后再重新启动。关闭删除命令:
2.3 打开kibana
输入http://192.168.1.104:5601/app/home,访问Kibana web界面。点击左侧设置,进入Management界面
三、日志收集
本文通过SpringBoot架构把日志信息记录到logstash。
3.1 环境准备
- IntelliJ IDEA 2019.3.5
- Spring-boot
3.1.1 创建springboot项目
1) 打开IDEA,新建File -> New -> Project -> Spring Initializr
2) 创建springelk测试项目
3) 新建一个springboot的项目,在 pom.xml 下导入以下web的依赖
3.1.2 使用logback记录日志
logback是SpringBoot自带的日志,只要导入了web的依赖即可使用。
1) 在测试包下新建一个测试类和测试方法
2)在resources目录新建logback-spring.xml
写入以下内容
3) 然后启动测试方法,查看控制台日志。
4) 返回kibana页面,创建索引,已自动搜索展示出来
5) 选择Discover,可以看到刚才打印的日志已经反馈到kibana中
查看信息时,建议在左侧Available fields中筛选出"message"信息,"host"字段可选。筛选的字段在左侧也可以看到,右侧看到的信息就比较清晰。
需要注意的是,在这些日志中,时间是logstash收集日志时的创建时间,并不是原始日志的记录时间。
3.1.3 使用log4j2记录日志
要使用log4j2,则必须排除SpringBoot自带的日志。
1) pom.xml中排除logback并导入log4j2依赖
在资源目录下新建log4j2.xml
注意需要指定logstash服务的ip和记录日志的端口。
3) 新建测试类及方法
4) 启动测试方法
查看kibana的日志信息
查看信息时,建议在左侧Available fields中筛选出"message"信息,"thread_name","host"字段可选。筛选的字段在左侧也可以看到,右侧看到的信息就比较清晰,包含了日志本身的时间,这是是配置日志配置的。