ELK是一款非常流行的日志分析系统,在微服务架构中,我们可以使用ELK来跟踪分析各个微服务的日志,从而来了解服务的运行情况。

ELK是由三个开源工具搭建而成一个系统,分别是:

  • ElasticSearch: ES是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

  • Logstash:一个完全开源的工具,可以对日志进行收集、分析、并将其存储供以后使用。

  • Kibana:一个开源和免费的工具,他Kibana可以为Logstash和ES提供的日志分析友好的Web界面,可以帮助您汇总、分析和搜索重要数据日志。

环境

  • Window 10
  • jdk 1.8
  • ElasticSearch-6.4
  • logstash-6.4
  • kibana-6.4-windows-x86_64

ELK安装

需要先安装jdk 1.8,其实只需要java运行环境即可,具体安装与环境变量配置过程这时不记录了

ElasticSearch

Window下的安装比较简单。在官网下载对应平台的安装包即可。

官网:https://www.elastic.co/downloads/elasticsearch

下载下来后是一个zip的压缩文件,直接解压到安装目录即可。

ES的启动也非常简单,打开/bin 目录双击 elasticsearch.bat 即可。

当然我们也可以选择作为服务启动,在命令行模式下切换到ES的/bin执行 Service install 再通过/bin目录下的 elasticsearch-service-mgr.exe来管理与启动服务。这里我选的第一种,使用的时候直接打开就行了。

启动后直接访问:http://localhost:9200/ 若出现如下页面表示ES已经启动成功了。

ES启动成功

Logstash

官网下载:https://www.elastic.co/downloads/logstash

我下载的是ZIP格式的,将压缩包解压到安装目录即可。

配置

在其/config目录可以看到已有一些配置文件,我们可以按自己的要求来新建一个配置文件,在此目录新建一个logstach-test.conf内容如下 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
input { 
tcp {
port => 5044
type => "test"
codec => json_lines
}
}

output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-%{type}"
}
stdout { codec => rubydebug }
}

这里的配置比较简单,logstash主要是收集日志给ElasticSearch。因此 input{}中主要是配置logstash监听的端口,后面我们在项目中配置日志向这个端口传输,logstash就会收集。

output{}则配置ElasticSearch的地址,logstash将收集的日志向ES的地址进行输出,index 可以指定索引名, stdout是标准输出,会将收集到的日志进行输出,方便我们调试。


inputcodec => json_lines是一个json解析器,接收json的数据。这个要装logstash-codec-json_lines 插件。在命令行中切换到Logstash的 /bin目录下,执行以下命令:

1
logstash-plugin install logstash-codec-json_lines

####启动

命令行中切换到Logstash的 /bin目录下,执行以下命令,使用我们上面的配置文件启动Logstash

1
logstash -f ../config/logstash-test.conf

命令窗口中打印如下内容无报错并处于监听状态则启动成功:

1
[2018-09-18T16:29:03,364][INFO ][logstash.agent] Successfully started Logstash API endpoint {:port=>9600}

Kibana

官网下载:https://www.elastic.co/downloads/kibana

这里下载的是Window版本,下载下来是一个压缩包,直接解压到指定的安装目录即可。

启动则直接在/bin目录双击kibana.bat

新建Spring Boot项目

这里使用之前写的项目作测试,项目的构建请看:微服务简单实例–电影购票 这里使用用户微服务(服务提供者)。需要稍微作修改为我们整合Logstash

添加依赖

1
2
3
4
5
6
<!--添加logstas-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.7</version>
</dependency>

修改Controller

为了方便测试我们在findId方法中添加一条日志:

1
2
3
4
5
6
@GetMapping("/{id}")
public User findById(@PathVariable Long id){
User findOne = this.userRepository.getOne(id);
logger.info("找到用户 : {}",findOne);
return findOne;
}

新建bootstrap.yml

在application.yml同目录下新建bootstrap.yml,并将application.yml中的 以下内容移动到bootstrap.yml中

1
2
3
spring:
application:
name: microservice-simple-provider-user-trace-elk

配置logback-spring.xml

resources目录下新建logback-spring.xml文件添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty scope="context" name="springAppName" source="spring.application.name" />
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:5044</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<root level="INFO">
<appender-ref ref="LOGSTASH" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>

在上面的XML配置中添加了 <destination>localhost:5044</destination>指定了我们上面配置logstash的监听地址,这样项目的日志才能被收集。

配置完成后可以启动项目,观察logstash窗口会有日志打印出来。

可视化查看

分别启动Es,Logstash,用户微服务,Kibana。打开kibana的地址:http://localhost:5601 默认是没有密码可以直接登陆的。

Kibana启动界面

创建索引模式

我这里使用了汉化,默认为英文。点击发现添加索引。索引名为Logstash配置方案中指定的index。所以可以看到Kibana为我们列出了可用或使用过的索引名。在索引模式的输入框中填入 logstash-test下一步即可。

索引名称可以使用匹配规则,可以匹配多个索引。

创建索引

下一步需要选择过滤字段,这里我们先选择时间戳,并点击创建索引模式。创建完成后出现如下系统管理>索引模式界面界面即创建成功,这里列出了可用的过滤字段,并可以在些删除该索引模式。

索引创建成功

查看数据

点击发现这里我们可以看到刚刚新建的索引模式的数据。为了测试效果我们访问项目:http://localhost:8000/1多刷新几次再次返回`发现`界面查看,可以看到项目的日志已经过来了。下方可以看到日志内容,柱形图可以看到时间点上日志统计,左边为可显示的字段。可以把左边的字段加到下方进入展示。

查看数据

添加筛选器

我们可以添加筛选器message筛选出我们打印的日志

添加筛选器

查找message

可视化分析

在可视化界面中,我们添加一些视图。

可视化

通过一些条件定制,最后把视图放到仪表盘查看

仪表盘

总结

以上只是简单的记录了下ELK的搭建与基本使用,对于生产部署还需要做一些配置。在学习过程中找到一些资料分享: