准备环境
jdk 1.8
elasticsearch-6.4.3
kibana-6.4.3
logstash-6.4.3
1.安装JDK
Elasticsearch是基于Java开发是一个Java程序,运行在Jvm中。要求jdk 1.8或1.8以上版本
yum install -y java-1.8.0-openjdk-devel
确认jdbk安装成功
java -version
2、安装Elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
下载完成解压: tar -zxvf elasticsearch-6.4.3.tar.gz
修改 elasticsearch.yml
path.data: /home/logs/elasticsearch/data # 数据的默认存放路径
path.logs: /home/logs/elasticsearch/log # 日志的默认存放路径
network.host: 0.0.0.0 #解决外网访问问题
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
JVM配置
vim /etc/elasticsearch/jvm.options
创建elsearch用户组及elsearch用户
由于安全的考虑,elasticsearch不允许使用root用户来启动,所以需要创建一个新的用户,并为这个账户赋予相应的权限来启动elasticsearch集群。
# 创建用户组
groupadd es
# 创建用户并添加至用户组
useradd es -g es
# 更改用户密码(输入 123123)
passwd es
创建完成之后,切换到elasticsearch-6.4.2的父路径下,赋予es用户操作权限
chown -R es:es elasticsearch-6.4.2
chown -R es:es /home/logs/elasticsearch/
切换到es用户再启动
su es
cd elasticsearch-6.4.2/bin
sh elasticsearch &
启动报错 ERROR: [2] bootstrap checks failed
ERROR: [2] bootstrap checks failed
[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2021-08-18T19:43:22,711][INFO ][o.e.n.Node ] [4ugqM-5] stopping ...
[2021-08-18T19:43:22,738][INFO ][o.e.n.Node ] [4ugqM-5] stopped
[2021-08-18T19:43:22,738][INFO ][o.e.n.Node ] [4ugqM-5] closing ...
[2021-08-18T19:43:22,753][INFO ][o.e.n.Node ] [4ugqM-5] closed
这里提示两个错误:
1、[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
问题翻译过来就是:elasticsearch用户拥有的可创建文件描述的权限太低,至少需要65536;
解决:
vim /etc/security/limits.conf
*** hard nofile 65536
*** soft nofile 65536
2、[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
问题翻译是:最大虚拟内存区域 vm.max_map_count [65530] 太低,增加到至少 [262144]
解决:
vi /etc/sysctl.conf
//添加以下配置
vm.max_map_count=655360
修改完之后执行
1、su root 切换到root用户
2、sysctl -p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
后台启动,这样当我们退出时,应用仍在后台运行
./bin/elasticsearch -d
停止后台服务
jps
kill -9
切回原来es用户,再次重启es,检查ES是否启动成功
2、kibana 搭建
去官网下载对应的历史版本,每一个版本的es都有一个对应的Kibana版本。我使用的是6.4.3版本
https://www.elastic.co/downloads/past-releases
下载安装包,rz命令上传到服务器,并解压
tar -zxvf kibana-6.4.3-linux-x86_64.tar.gz
切换到bin目录下面
cd kibana-6.4.3-linux-x86_64/config
vi kibana.yml 修改配置文件
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
kibana.index: ".kibana"
启动Kibana
切换到bin目录下面
cd /kibana-6.4.3-linux-x86_64/bin
执行
nohup ./kibana &
4、安装部署 Logstash
选择合适版本的安装包(和 Elasticsearch 保持一致)。
wget https://mirrors.huaweicloud.com/logstash/7.8.0/logstash-6.4.3.tar.gz
2、解压安装包文件
tar -xf logstash-6.4.3.tar.gz
3、进入logstash-6.4.3 的bin文件,修改配置文件vim logstash.conf
#输入插件
input { # input输入源配置
tcp { # 使用tcp输入源
port => 9600 # 服务器监听端口9061接收日志,默认ip localhost
codec => json_lines # 使用json解析日志 需要安装json解析插件
}
}
#过滤匹配插件
filter {
}
#输出插件
output { # output 数据输出配置
elasticsearch { # 使用elasticsearch接收
hosts => ["http://localhost:9200"] # 集群地址 多个用,隔开
index => ["%{[appname]}-%{+YYYY-MM-dd}"] #创建以appname的值为索引,这个参数要和springboot 配置参数对应
}
stdout {
codec => rubydebug # 输出到命令窗口
}
}
4、安装插件
由于国内无法访问默认的gem source,需要将gem source改为国内的源。
# 修改Gemfile
[root@localhost logstash-7.8.0]# vim Gemfile
# 将source这一行改成如下所示:
source "https://ruby.taobao.org"
./bin/logstash-plugin install logstash-codec-json_lines
5、 后台启动Logstash
nohup sh logstash -f logstash.conf > /opt/elk/logs/logstash/logs.log 2>&1 &
6、springboot 整合 logstash
新建logback-spring.xml文件
注意:{“appname”:“maitong-order”}调用fields 中appname字段变量的值为索引。赋予logstash.conf创建以appname的值.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProperty scope="context" name="springAppName"
source="spring.application.name"/>
<springProperty scope="context" name="serverPort"
source="server.port"/>
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!--1. 输出到控制台-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 为logstash输出的JSON格式的Appender -->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>IP:9600</destination>
<!-- 日志输出编码 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 调用fields 中appname字段变量的值为索引。-->
<customFields>{"appname":"maitong-order"}</customFields>
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"severity": "%level",
"service": "${springAppName:-}",
"port": "${serverPort:-}",
"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="CONSOLE"/>
<appender-ref ref="logstash"/>
</root>
</configuration>
# 关注博主动态
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/39ac0c80dfbe4f83a46951fa3f2f6a55.jpeg)