版本说明:
1,Elasticsearch:6.8.0
2,Filebeat:6.8.0
3,kibana:6.8.0
EFK官方下载地址:https://www.elastic.co/cn/downloads/
准备服务器:
1,安装JDK(每台服务器都要安装1.8以上)
请访问:https://blog.csdn.net/esqabc/article/details/94429698
[root@master_t ~]# vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_211
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
[root@master_t ~]# source /etc/profile
[root@master_t ~]# java -version
2,添加防火墙
请访问地址:https://www.cnblogs.com/lemon-flm/p/7608029.html
a,安装
[root@master_t ~]# yum install iptables-services
b,编辑配置文件(iptables)
[root@master_t ~]# vi /etc/sysconfig/iptables
c, 重启
.[root@master_t ~]# systemctl restart iptables.service
d,加入开机启动
[root@master_t ~]# systemctl enable iptables.service
3,下载并安装相关软件:
a,主服务器(master_t):
(1)下载:Elasticsearch
[root@master_t ~]# cd /usr/local/
[root@master_t local]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.0.tar.gz
[root@master_t local]# tar -zxvf elasticsearch-6.8.0.tar.gz
…
(2)下载:Kibana
[root@master_t ~]# cd /usr/local/
[root@master_t local]# cd /home/tools
[root@master_t tools]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.8.0-linux-x86_64.tar.gz
[root@master_t tools]# tar -zxvf kibana-6.8.0-linux-x86_64.tar.gz
[root@master_t tools]# mv /home/tools/kibana-6.8.0-linux-x86_64 /home/tools/kibana-6.8.0
(3)安装Elasticsearch
添加用户组:es
[root@master_t ~]# groupadd es
创建用户:es
[root@master_t ~]# useradd es -g es -p elasticsearch
更改:/usr/local/elasticsearch-6.8.0所属用户
[root@master_t ~]# chown -R es:es /usr/local/elasticsearch-6.8.0
…
创建日志文件夹
[root@master_t ~]# mkdir -p /usr/local/elasticsearch_data
[root@master_t ~]# mkdir -p /usr/local/elasticsearch_data/data
[root@master_t ~]# mkdir -p /usr/local/elasticsearch_data/logs
更改:/usr/local/elasticsearch_data所属用户
[root@master_t ~]# chown -R es:es /usr/local/elasticsearch_data
…
配置:limits.conf,添加下面
[root@master_t ~]# vi /etc/security/limits.conf
* soft nofile 261444
* hard nofile 262144
* soft nproc unlimited
root soft nproc unlimite
配置:90-nproc.conf或20-nproc.conf,添加下面
[root@master_t ~]# vi /etc/security/limits.d/20-nproc.conf
* soft nproc unlimited
root soft nproc unlimited
配置:sysctl.conf,添加下面
[root@master_t ~]# vi /etc/sysctl.conf
vm.max_map_count = 262144
执行命令
[root@master_t ~]# sysctl -p
配置:elasticsearch.yml
[root@master_t ~]# vi /usr/local/elasticsearch-6.8.0/config/elasticsearch.yml
#集群名称
cluster.name: esqabc_efk
#节点名称
node.name: esqabc_master
#是否为master
node.master: true
#是否为数据节点
node.data: true
#数据目录
path.data: /usr/local/elasticsearch_data/data
#日志目录
path.logs: /usr/local/elasticsearch_data/logs
#启动时是否锁定内存:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
#本机IP
network.host: 0.0.0.0
#本机http端口
http.port: 9200
#指定集群中的节点中有几个有master资格的节点
discovery.zen.minimum_master_nodes: 1
#指定集群中其他节点的IP
discovery.zen.ping.unicast.hosts: ["149.28.97.169","45.77.80.64","207.246.66.217"]
#开启密码验证
xpack.security.enabled: true
discovery.type: single-node
http.cors.enabled: true
http.cors.allow-origin: "*"
切换用户
[root@master_t ~]# cd /usr/local/elasticsearch-6.8.0/bin/
[root@master_t ~]# su es
启动:
[es@master_t bin]$ ./elasticsearch -d
重启:
[es@master_t bin]$ sh ./elasticsearch -d
设置 elasticsearch 为后台启动,并指定 PID 文件 :
[es@master_t bin]$ ./elasticsearch -p ./elasticsearch-pid -d
停止:
[root@master_t ]# ps -aux | grep elasticsearch
[root@master_t ]# kill -9 18387
配置密码,默认账户(elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user):
elastic:拥有 superuser 角色,是内置的超级用户
kibana :拥有 kibana_system 角色,用户 kibana 用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求 以访问集群监视 API 和 .kibana 索引。不能访问 index
logstash_system :拥有 logstash_system 角色。用户 Logstash 在 Elasticsearch 中存储监控信息时使用。
[es@master_t bin]$ ./elasticsearch-setup-passwords interactive
下面是设置过程:
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
查询账号列表,在浏览器输入:http://149.28.97.169:9200/_xpack/security/user
查询是否成功,在浏览器输入:http://149.28.97.169:9200,然后输入设置好的账号和密码
出现上面的结果,就说明安装成功了
(4)安装Kibana
a,配置:kibana.yml
[root@master_t ~]# vi /home/tools/kibana-6.8.0/config/kibana.yml
#端口号
server.port: 5601
#服务器ip地址/kibana运行在哪台机器
server.host: "149.28.97.169"
# kibana监控哪台es机器
elasticsearch.hosts: ["http://149.28.97.169:9200"]
#用户名
elasticsearch.username: "elastic"
#密码
elasticsearch.password: "esqabc12345"
#添加中文配置
i18n.locale: "zh-CN"
b,Kibana汉化配置:
详情访问:https://github.com/anbai-inc/Kibana_Hanization
把translations文件夹放到/home/tools/kibana-6.8.0/src/legacy/core_plugins/kibana/
kibana.yml中的配置项:i18n.locale: “zh-CN”
c,启动:
[root@master_t ~]# cd /home/tools/kibana-6.8.0/bin/
[root@master_t bin]# ./kibana &
注意:如果关闭控制台会导致kibana ,执行下面命令确保能后台运行:
[root@master_t bin]# logout
为kibana 添加账号和密码:请访问这里:https://blog.csdn.net/weixin_35688029/article/details/88425136
d,停止:
[root@master_t ]# ps -aux | grep node
[root@master_t ]# kill -9 18387
e,使用kibana
在浏览器输入:http://149.28.97.169:5601/
在菜单:管理(management)–》Kibana–》创建索引(Create an index)–》添加索引
注意:添加的索引必须存在与日志中,即日志文件里面包含索引,可以是filebeat的日志名称:filebeat-2019-09-09
更多功能使用访问:https://blog.csdn.net/wt5690788/article/details/89926689
b,服务器(node_a或node_b)
(1)下载:Filebeat
[root@node_a ~]# cd /usr/local/
[root@node_a local]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.0-linux-x86_64.tar.gz
[root@node_a local]# tar -zxvf filebeat-6.8.0-linux-x86_64.tar.gz
[root@node_a local]# mv /usr/local/filebeat-6.8.0-linux-x86_64 /usr/local/filebeat-6.8.0
(2)配置:filebeat.yml,分为两种收集日志方式(tcp、log)
a,收集日志方式:log
[root@node_a ~]# vi /usr/local/filebeat-6.8.0/filebeat.yml
# 配置输入插件,注意是yml格式
filebeat.prospectors:
# 数据来源是log日志文件
- type: log
enabled: true
# 日志文件路径
paths:
- /home/tools/api/logs/json/*.json
# 额外的标识字段,可以于区分是来自于哪个应用,kibana创建索引的时候可以使用这个
fields:
log_type: logbackjson
output.elasticsearch:
hosts: ["149.28.97.169:9200"]
index: "filebeat-%{+YYYY-MM-dd}"
username: "elastic"
password: "esqabc12345"
其中:/home/tools/api/logs/json 就是应用下面生成日志文件的文件夹
应用项目配置:
添加logstash 依赖-
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.1</version>
</dependency>
修改:logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--设置系统日志目录-->
<property name="log_path" value="/home/tools/api/logs" />
<!-- 本地服务的IP -->
<conversionRule conversionWord="app_ip" converterClass="com.esq.util.LogIpConfig" />
<!-- 本地服务的名称 -->
<property name="app_name" value="jarweb-jen-ans" />
<!-- 日志格式 -->
<property name="Log_format" value="[%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%logger Line:%-3L] - %msg%n"/>
<!-- ERROR日志记录器,日期滚动记录 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log_path}/log_error.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_path}/error/error-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<!-- 除按日志记录之外,还配置了日志文件不能超过20M,若超过20M,日志文件会以索引0开始, 命名日志文件,例如log_error_2020-20-20_0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<MaxHistory>180</MaxHistory>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${Log_format}</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>error</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- WARN日志记录器,日期滚动记录 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log_path}/log_warn.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_path}/warn/warn-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<!-- 除按日志记录之外,还配置了日志文件不能超过20M,若超过20M,日志文件会以索引0开始, 命名日志文件,例如log_error_2020-20-20_0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<MaxHistory>180</MaxHistory>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${Log_format}</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- INFO日志记录器,日期滚动记录 -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log_path}/log_info.log</file>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_path}/info/info-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<!-- 除按日志记录之外,还配置了日志文件不能超过20M,若超过20M,日志文件会以索引0开始, 命名日志文件,例如log_error_2020-20-20_0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<MaxHistory>180</MaxHistory>
</rollingPolicy>
<!-- 追加方式记录日志 -->
<append>true</append>
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${Log_format}</pattern>
<charset>utf-8</charset>
</encoder>
<!-- 此日志文件只记录info级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 控制台日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%logger Line:%-3L] - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
</appender>
<!-- JSON格式日志 -->
<appender name="LOGSTASH" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_path}/log_json.json</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_path}/json/log_json_%d{yyyy-MM-dd}_%i.json</fileNamePattern>
<!-- 除按日志记录之外,还配置了日志文件不能超过20M,若超过20M,日志文件会以索引0开始, 命名日志文件,例如log_json_2020-20-20_0.log -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>20MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<MaxHistory>10</MaxHistory>
</rollingPolicy>
<!-- 追加方式记录日志-->
<append>true</append>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"ip": "%app_ip",
"app": "${app_name}",
"level": "%level",
"time": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
"thread": "%thread",
"class": "%logger{40} Line:%-3L",
"message": "%message",
"stack_trace": "%exception{10}"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<logger name="org.springframework" level="WARN" />
<!-- 生产环境下,将此级别配置为适合的级别,以免日志文件太多或影响程序性能-->
<root level="INFO">
<appender-ref ref="ERROR" />
<appender-ref ref="WARN" />
<appender-ref ref="INFO" />
<appender-ref ref="LOGSTASH" />
<!-- 控制台输出 -->
<appender-ref ref="CONSOLE" />
</root>
</configuration>
b,收集日志方式:tcp
[root@node_a ~]# vi /usr/local/filebeat-6.8.0/filebeat.yml
filebeat.inputs:
- type: tcp
max_message_size: 10MiB
host: "0.0.0.0:9000"
output.elasticsearch:
hosts: ["149.28.97.169:9200"]
index: "filebeat-%{+YYYY-MM-dd}"
username: "elastic"
password: "esqabc12345"
应用项目配置:
添加logstash 依赖-
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.1</version>
</dependency>
修改:logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- JSON格式日志 -->
<appender name="LOGSTASH" class="ch.qos.logback.core.rolling.RollingFileAppender">
<destination>http://149.28.97.169:9000</destination>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"ip": "%app_ip",
"app": "${app_name}",
"level": "%level",
"time": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
"thread": "%thread",
"class": "%logger{40} Line:%-3L",
"message": "%message",
"stack_trace": "%exception{10}"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH" />
</root>
</configuration>
(3)启动:
不产出日志的方式:
[root@node_a ~]# cd /usr/local/filebeat-6.8.0
[root@node_a filebeat-6.8.0]# nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &
…
产出日志的方式:
[root@node_a ~]# cd /usr/local/filebeat-6.8.0
[root@node_a filebeat-6.8.0]# touch nohup.out
[root@node_a filebeat-6.8.0]# nohup ./filebeat -e -c filebeat.yml >nohup.out 2>&1 &
(4)测试:
[root@node_a filebeat-6.8.0]# ./filebeat -e -c filebeat.yml -d "Publish"
在浏览器输入:http://149.28.97.169:9200/_search?pretty
如果有信息返回,就说明成功了