1. 资源准备
1.1 版本兼容性
官网地址:https://www.elastic.co/cn/support/matrix#matrix_compatibility
我使用的都是6.8.3版本
1.2 镜像资源
由于资源下载是外网会比较慢,推荐使用华为云提供的镜像:https://mirrors.huaweicloud.com/
elasticsearch-6.8.3.tar、kibana-6.8.3-linux-x86_64.tar、logstash-6.8.3.tar
1.3 资源规划
系统 | 主机ip | 部署内容 |
---|---|---|
centso 7.9 | 192.168.40.131 | elasticsearch+kibana+logstash |
centso 7.9 | 192.168.40.133 | 微服务 |
2. 架构设计
2.1 监听日志
logstash和微服务部署在一起,监听服务日志的输出目录:
优点:性能高;缺点:占用资源高(logstash非常耗资源)
2.2 推送日志
logstash独立部署,微服务节点通过TCP向logstash发送日志:
优点:节省资源;缺点:性能受限于网络
本篇要实践也是基于这种架构搭建。
3. 安装elasticsearch
4. 安装Kibana
4.1 上传资源
将之前下载Kibana压缩包上传到服务器上,并解压:
tar -zxvf kibana-6.8.3-linux-x86_64.tar.gz
4.2 编辑kibana.yml
vim /home/kibana-6.8.3-linux-x86_64/config/kibana.yml
------------------------------------------------------
#开放默认端口号
server.port: 5601
#在服务器中,0.0.0.0指的是本机上的所有IPV4地址
server.host: 0.0.0.0
#elasticsearch地址
elasticsearch.hosts: ["http://192.168.40.131:9200"]
#设置为中文
i18n.locale: "zh-CN"
4.3 开放端口号
#开放5601端口号
firewall-cmd --zone=public --add-port=5601/tcp --permanent
-------------错误信息------------
FirewallD is not running
-------------重启防火墙----------
systemctl start firewalld
--------------重新执行-----------
firewall-cmd --zone=public --add-port=5601/tcp --permanent
#刷新防火墙,使之生效
firewall-cmd --reload
#查看开放端口号
firewall-cmd --list-ports
--------------------------
9200/tcp 5601/tcp
4.4 启动Kibana
#切换到安装目录的bin文件下
./kibana
--------------------------------------------
log [09:01:19.969] [warning][reporting] Generating a random key for xpack.reporting.encryptionKey. To prevent pending reports from failing on restart, please set xpack.reporting.encryptionKey in kibana.yml
log [09:01:19.998] [info][status][plugin:reporting@6.8.3] Status changed from uninitialized to green - Ready
log [09:01:20.089] [info][task_manager] Installing .kibana_task_manager index template version: 6080399.
log [09:01:20.146] [info][task_manager] Installed .kibana_task_manager index template: version 6080399 (API version 1)
log [09:01:21.247] [info][migrations] Creating index .kibana_1.
log [09:01:21.468] [info][migrations] Pointing alias .kibana to .kibana_1.
log [09:01:21.507] [info][migrations] Finished in 260ms.
log [09:01:21.508] [info][listening] Server running at http://0.0.0.0:5601
log [09:01:22.435] [info][status][plugin:spaces@6.8.3] Status changed from yellow to green - Ready
-----------------表示成功-----------------------
#推荐用后台运行方式启动
nohup sh kibana &
在浏览器上输入地址:http://192.168.40.131:5601
则表示安装部署成功!
5. 安装logstash
5.1 上传资源
tar -zxvf logstash-6.8.3.tar.gz
5.2 创建logstash.conf
vim /home/logstash-6.8.3/bin/logstash.conf
-----------------增加输入、输出规则---------------------
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4567
codec => json{
charset => "UTF-8"
}
}
}
output {
elasticsearch {
hosts => "http://192.168.40.131:9200"
index => "%{[appName]}-%{+YYYY.MM.dd}"
document_type => access
#关闭模板管理,使用es通过API创建的模板
manage_template => false
#es中模板的名称
template_name => "message"
}
}
5.3 开放端口号
#开放4567端口号
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=9600/tcp --permanent
#刷新防火墙,使之生效
firewall-cmd --reload
#查看开放端口号
firewall-cmd --list-ports
--------------------------
9200/tcp 5601/tcp 4567/tcp 9600/tcp
5.3 启动logstash
# 切换到bin目录下 后台运行方式启动
nohup logstash -f logstash.conf &
查看logstash是否启动成功:
ps aux | grep 'logstash'
则说明logstash启动成功 ,至此单机版ELK搭建成功
6. 创建springboot项目
6.1 创建一个简单springboot项目
创建一个简单springboot的web项目,在启动类加上简单日志:
@SpringBootApplication
@Slf4j
public class DemoApplication {
# 在启动类加上一些简单的日志
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
log.info("demo启动成功.....");
log.info("demo输出日志.....");
log.info("demo输出日志2.....");
log.info("demo输出日志3.....");
log.info("demo输出日志4.....");
log.info("demo输出日志5.....");
log.info("demo输出日志6.....");
}
}
6.2 追加logback的依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.2</version> #版本号看你spring-boot版本
</dependency>
6.3 创建服务yml文件
为了方便测试,创建一个非常简单的配置文件,内容如下:
server:
port: 8090
spring:
application:
name: winter-test
profiles:
active: dev
6.4 创建logback-spring.xml
创建一个简单logback.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="false">
<springProperty scop="context" name="appName" source="spring.application.name" defaultValue=""/>
<--LOGSTASH 的日志输出格式 -->
<appender name = "LOGSTASH" class ="net.logstash.logback.appender.LogstashAccessTcpSocketAppender">
<-- LOGSTASH 服务ip和监听的端口号 -->
<destination>192.168.40.131:4567</destination>
<encoder charset ="UTF-8" class ="net.logstash.logback.encoder.LogstashEncoder">
<customFields>
{
"appName": "${appName}",
"pid": "-"
}
</customFields>
</encoder>
</appender>
<-- 控制台的日志输出格式 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder charset="UTF-8">
<!-- 输出日志记录格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<-- 加上logback默认的base.xml -->
<include resource = "org/springframework/boot/logging/logback/base.xml"/>
<root level="INFO">
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
springboot启动时默认读取logback-spring.xml文件 ,则推荐logback文件名为logback-spring.xml
6.5 启动服务
7. Kibana可视化
7.1 创建索引
7.2 查询日志
至此ELK收集微服务的日志实践成功!