ELK 日志收集、可视化查询分析系统
# 简介
在使用 JeeSite 集群或 Cloud 微服务平台时,日志收集是必不可少的内容,本文主要介绍如何搭建 ELK 系统
- Elasticsearch:开源分布式搜索引擎,提供存储、分析、搜索功能。目的是存储海量的日志数据
- Logstash:开源日志搜集、过滤系统。目的是收集日志并进行转换过滤,发送给 Elasticsearch
- Kibana:开源可视化数据分析系统,对 Elasticsearch 存储的数据进行分析多维度查询分析
# 安装 Elasticsearch
如果您已经安装了 ES,请确认是否安装了中文分词插件,如果都有,可以忽略本节。
本节使用 Windows 操作系统环境为例介绍安装。
# 下载
环境要求 JDK1.8 以上(建议 JDK 11)、ES 版本 7.6.2,本节使用该版本及 Windows 环境为例如下:
- https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-windows-x86_64.zip (opens new window)
- https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.4-windows-x86_64.zip (opens new window)
注意:Spring Boot 2 下载 Kibana 7.x 版本,Spring Boot 3 请下载 Kibana 8.x 版本
其它版本在这里查找:https://www.elastic.co/cn/downloads/elasticsearch (opens new window)
下载后解压文件到 elasticsearch-7.6.2-windows-x86_64 目录下。
# 配置
打开 elasticsearch-7.6.2-windows-x86_64/config/elasticsearch.yml 文件,根据自己的情况进行配置:
cluster.name: my-application
network.host: 127.0.0.1
http.port: 9200
2
3
# 运行
cd elasticsearch-7.6.2-windows-x86_64/bin
elasticsearch.bat
2
# 安装 Logstash
# 下载
https://artifacts.elastic.co/downloads/logstash/logstash-7.6.2.zip (opens new window)
注意下载版本要和 ES 版本匹配,更多版本:https://www.elastic.co/cn/downloads/logstash (opens new window)
下载后解压文件到 logstash-7.6.2 目录下。
# 配置
在 config 目录下新建文件 logstash.conf 内容如下:
input {
tcp {
# 指定 logback-spring.xml 里设置的地址
host => "localhost"
port => 5055
# 设定服务器模式
mode => "server"
# 日志的默认标签
tags => ["tags"]
# 接受 json 格式
codec => json_lines
}
}
output {
elasticsearch {
# 连接 ES 服务地址
hosts => "127.0.0.1:9200"
# 索引名字,区分不同的项目
index => "js_log_%{[appname]}"
}
stdout { codec => rubydebug }
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 运行
确保 ES 服务已经启动,命令如下:
cd logstash-7.6.2/bin
logstash.bat -f ../config/logstash.conf
2
# 安装 Kibana
# 下载
下载 Kibana 版本要和 ElasticSearch 版本匹配。
- https://artifacts.elastic.co/downloads/kibana/kibana-7.6.2-windows-x86_64.zip (opens new window)
- https://artifacts.elastic.co/downloads/kibana/kibana-8.13.4-windows-x86_64.zip (opens new window)
注意:Spring Boot 2 下载 Kibana 7.x 版本,Spring Boot 3 请下载 Kibana 8.x 版本
其它版本在这里查找:https://www.elastic.co/cn/downloads/kibana/ (opens new window)
下载后解压文件到 kibana-7.6.2-windows-x86_64 目录下。
# 配置
修改 config/kibana.yml 文件的语言参数:
i18n.locale: "zh-CN"
# 运行
确保 ES 服务已经启动,命令如下:
cd kibana-7.6.2-windows-x86_64/bin
kibana.bat
2
- 浏览器访问
地址:http://localhost:5601/ (opens new window)
- 进入界面后,首先需要创建索引
创建索引,菜单:Management -> Kibana -> 索引模式 -> 创建索引模式
索引模式填写 js_log_*
点击 “下一步” 按钮,接着点击 “创建索引模式” 按钮即可。
# 常见问题
如果提示 “Forbidden” 可能是因为磁盘空间不足导致 “索引变成只读状态”。
先保证磁盘使用率 90% 以下,菜单:Dev Tools -> 控制台填写如下内容:
PUT _settings
{
"index": {
"blocks": {
"read_only_allow_delete": "false"
}
}
}
2
3
4
5
6
7
8
然后点击编辑器右侧的 “三角号” 执行发送请求即可。
# 配置 Logback
上述 ELK 环境都已经具备,下面开始配置 JeeSite 中的 Logback 衔接。
v5.3.2+版本可修改 logback-spring-elk.xml 文件中的 destination 设置 Logstash 服务地址。
然后启动参数设置 -Dspring.profiles.active=prod,elk 指定双重配置文件即可。
之前版本,可将如下配置,覆盖到 logback-spring.xml 即可。
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
<!-- Log file path -->
<property name="log.path" value="${logPath:-${java.io.tmpdir:-.}}/logs" />
<springProperty name="appname" source="spring.application.name" />
<!-- Framework level setting -Dspring.profiles.active=elk -->
<include resource="config/logger-core.xml"/>
<!-- Console log output -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS} %clr(%-5p) %clr([%-39logger{39}]){cyan} - %m%n%wEx</pattern>
</encoder>
</appender>
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>localhost:5055</destination> <!-- 注意:替换为您的 Logstash 服务地址 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
<customFields>{"appname":"${appname}"}</customFields>
</encoder>
</appender>
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="WARN">
<appender-ref ref="console" />
<appender-ref ref="logstash" />
</root>
</configuration>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 测试步骤
- 启动 JeeSite,可以在 Logstash 控制台中观察搜集到的日志信息。
- 浏览器进入 Kibana 的 Discover 选择
js_log_*
即可查看到日志。