EFK(Elasticsearch、Filebeat、kibana)+SpringBoot日志收集

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/esqabc/article/details/95178056

声明:
如果您有更好的技术与作者分享,或者商业合作;
请访问作者个人网站 http://www.esqabc.com/view/message.html 留言给作者。
如果该案例触犯您的专利,请在这里:http://www.esqabc.com/view/message.html 留言给作者说明原由
作者一经查实,马上删除。
手机留言请访问:http://www.esqabc.com

版本说明:

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
如果有信息返回,就说明成功了

猜你喜欢

转载自blog.csdn.net/esqabc/article/details/95178056