ELK(Elasticsearch + Logstash + Kibana)简单实现
- 1. ES的安装
-
- 1.1 安装Elasticsearch-Head插件
- 2. 安装Logstash
- 3. Springboot集成logstash
- 4. Logstash输出数据到ES
- 5. Kibana安装
该ELK框架是自己自学ELK的例子,运行环境为windows,简单的跑通Elasticsearch,Kibana,logstash
Elasticsearch和Kibana版本一定要保持一致,最好不搞高版本的,高版本的需要适配JDK11,我用的版本是6.3.0
1. ES的安装ES是什么?
es是一个高扩展、开源的全文检索和分析引擎,它可以准实时地快速存储、搜索、分析海量的数据。
Elasticsearch在windows环境下的安装,即去官网下载安装包解压到本地的目录即可
官网下载地址:https://www.elastic.co/cn/downloads/elasticsearch
官网地址下载太太太太慢了,国内镜像下载地址:https://learnku.com/articles/33403
-
下载解压zip文件,进入bin目录,点击elasticsearch.bat文件启动
-
接着浏览器访问9200默认端口,返回类似如下数据即为启动成功
1.1 安装Elasticsearch-Head插件
ElasticSearch-head就是一款能连接ElasticSearch搜索引擎,并提供可视化的操作页面对ElasticSearch搜索引擎进行各种设置和数据检索功能的管理插件,如在head插件页面编写RESTful接口风格的请求,就可以对ElasticSearch中的数据进行增删改查、创建或者删除索引等操作。
- 安装node环境
head插件是基于Node的,所以安装head插件首先需要在机器上安装Node环境
网址:https://nodejs.org/en/download/ 下载Windows版msi的,下载完直接安装
安装完成命令行查看: - grunt安装
grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,5.x里之后的head插件就是通过grunt启动的。因此需要安装grunt.
安装命令:
安装完成之后查看版本号npm install -g grunt-cli
grunt -version
- 安装node环境
- 下载Elasticsearch-Head插件
下载地址:
解压,进入head解压的文件夹下,执行安装pathomjs的命令:
或者国内的镜像安装npm install
4 . 安装完成之后,启动head插件npm config set registry https://registry.npm.taobao.org
npm run start 或者 grunt server
访问浏览器head的9100默认端口,出现如下图:head插件启动成功,因为此时该插件还没有寻找到ES,需要修改ES的配置文件
进入es解压目录,找到config目录下的elasticsearch.yml文件
增加两个配置项:
http.cors.enabled: true
http.cors.allow-origin: "*"
该配置作用可以使head插件访问到es
修改完配置重启动ES,访问head启动的页面http://localhost:9100/
出现如上图,则head插件已经和ES集成成功
Logstash是什么?
ogstash 是一个轻量级、开源的服务器端数据处理管道,允许您从各种来源收集数据,进行动态转换,并将数据发送到您希望的目标。它最常用作 Elasticsearch 的数据管道,Elasticsearch 是一个开源分析和搜索引擎。由于它与 Elasticsearch 紧密集成,具备强大的日志处理功能并提供 200 多个预构建的开源插件来帮助您轻松地索引数据,因此 Logstash 是将数据加载到 Elasticsearch 的常用工具。
- 官网下载地址:略(太慢了),这里贴一个国内镜像:https://www.newbe.pro/Mirrors/Mirrors-Logstash/
- 下载后解压zip文件,进入bin目录下创建 logstash.conf 配置文件
3.配置logstash.conf
主要配置logstash的输入源和输出源
input {
stdin{
}
}
input {
tcp {
host => "127.0.0.1"
port => 9600
codec => json_lines
}
}
output {
stdout{
codec => rubydebug
}
}
- 进入bin目录,使用windows命令行启动logstash
logstash -f logstash_conf
如下启动成功并监听到端口号:
ES和logstash服务全都已经开启,接下来开始搭建测试的Java项目,用来测试日志是否能通过logstash输出到ES中
- 创建springboot项目(简单的springboot web模块即可)
springboot项目添加logstash依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.4</version>
</dependency>
- 在resources目录下创建logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_HOME" value="D:/MyELKlog/" />
<!--控制台输出-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!--生成日志文件配置-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/TestEkl.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--输出到logstash中-->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>127.0.0.1:9600</destination>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"severity": "%level",
"service": "${springAppName:-}",
"trace": "%X{X-B3-TraceId:-}",
"span": "%X{X-B3-SpanId:-}",
"exportable": "%X{X-Span-Export:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"rest": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!--日志输出级别-->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
<appender-ref ref="logstash"/>
</root>
</configuration>
- 创建测试controller,生成日志
@RestController
public class ControllerTest {
private static final Logger LOGGER = LoggerFactory.getLogger(ControllerTest.class);
@GetMapping("/loginfo")
public String hello(){
LOGGER.info("进入-----访问到当前接口:");
LOGGER.info("当前时间{}:", System.currentTimeMillis());
LOGGER.info("结束-----访问结束接口:");
return "this is a test controller method";
}
@GetMapping("/loginfo1")
public String hello1(){
LOGGER.info("进入----loginfo1接口");
LOGGER.info("当前时间戳:{}", System.currentTimeMillis());
LOGGER.info("进入----loginfo1接口结束");
return "loginfo1";
}
}
- 启动springboot项目,请求controller接口
查看logstash启动服务窗口,发现logstash通过监听获取到了数据
到这儿,项目中的日志已经可以输入到logstash中,接下来就是将logstash中的日志输出到Elasticsearch中
- 修改logstash的配置文件
重启logstash服务,再次点击项目的测试接口产生日志,然后通过head插件查看ES索引的情况input { stdin{ } } input { tcp { host => "127.0.0.1" port => 9600 codec => json_lines } } output { stdout{ codec => rubydebug } elasticsearch { hosts => ["127.0.0.1:9200"] } }
会发现多一个logstash索引,然后查看数据:
发现索引中多了三个文档,也就是对应着logstash中获取Springboot项目中打印的三条日志数据:
至此,elasticsearch 和 logstash的通道打通,接下里将es中的数据通过可视化Kibana来进行展示
5. Kibana安装什么是Kibana?
Kibana 是一个设计出来用于和 Elasticsearch 一起使用的开源的分析与可视化平台,可以用 kibana 搜索、查看、交互存放在Elasticsearch 索引里的数据,使用各种不同的图表、表格、地图等展示高级数据分析与可视化,基于浏览器的接口使你能快速创建和分享实时展现Elasticsearch查询变化的动态仪表盘,让大量数据变得简单,容易理解。
-
安装注意事项
确保安装JDK
确保安装Elasticsearch
确保安装Node
安装的Kibana和Elasticsearch的版本号要一直,尽量精确到小版本号 -
Kibana下载 官网下载太慢,国内加速下载地址:https://www.newbe.pro/Mirrors/Mirrors-Kibana/
-
配置ES地址
下载后解压,进入config目录,打开kibana.yml配置文件
配置ES的地址
点击bin目录下的kibana.bat 文件启动kibana服务
访问kibana默认地址:可以看到日志已经显示到kibana可视化界面上了
接下来可以查看数据和创建各种可视化图标了
kibana具体的使用请参考Kibana官方文档
以上只是ELK框架的简单搭建,纯纯纯入门的例子,希望能够帮助到大家