前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot ELK 整体介绍 及使用

Spring Boot ELK 整体介绍 及使用

作者头像
Freedom123
发布2024-03-29 09:31:21
800
发布2024-03-29 09:31:21
举报
文章被收录于专栏:DevOpsDevOps

1. ELK应用场景 在复杂的企业应用服务群中,记录日志方式多种多样,并且不易归档以及提供日志监控的机制。无论是开发人员还是运维人员都无法准确的定位服务、服务器上面出现的种种问题,也没有高效搜索日志内容从而快速定位问题的方式。因此需要一个集中式、独立的、搜集管理各个服务和服务器上的日志信息,集中管理,并提供良好的UI界面进行数据展示,处理分析。 因此:ELK提供一套开源的解决方案,能高效、简便的满足以上场景。

2. ELK 简介 Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。 Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

Logstash部署至服务主机,对各个服务的日志进行采集、过滤、推送。 Elasticsearch 存储Logstash传送的结构化数据,提供给Kibana。 Kibana提供用户UIweb页面进行,数据展示和分析形成图表等,Kibana一般与 Elasticsearch 部署在同一台服务器上,方便对日志进行数据传输与分析。

日志采集新增Logback直接发送日志到Logstash的形式。如果采用此方式,web服务可减少部分生成log文件配置,提高实时性和日志推送效率

3. ELK 日志系统常用的集中框架     (1) ELK经典框架 LogStash + ElasticSearch + Kibana 

    (2) ELK改进框架 Filebeat + LogStash + ElasticSearch + Kibana         由于Logstash消耗资源大,而服务器资源相当宝贵,所以引进另一个轻量级日志采集框架Beats,其中包含以下6种         Packetbeat    用于搜集网络流量数据         Heartbeat    用于运行时间监控         Filebeat    用于搜集文件数据         Winlogbeat    用于搜集winodws事件数据         Metricbeat    用于指标         Auditbeat    用于审计数据

    (3) ELK框架与Logback的整合  Logback + LogStash + ElasticSearch + Kibana         传统web项目中,经常使用log4j以及logback(性能更高)等成熟日志插件进行日志的记录,是否提供更好的解决方案。         日志采集新增Logback直接发送日志到Logstash的形式。如果采用此方式,web服务可减少部分生成log文件配置,提高实时性和日志推送效率        

    (4) ELK高并发框架 Logback + Kafka/Redis+ LogStash + ElasticSearch + Kibana          由于logstash消耗性能,所以高并发场景容易遇到流量上的瓶颈,及时使用logstash集群也是如此,所以可以添加中间件进行日志缓存处理。由于logstash数据源具有多种方式,所有中间件也可以很多选择,常见的有kafka,redis。

4. ELK 部署     部署环境:centos 7.4 (1) LogStash 下载及安装         下面介绍三种日志采集方式,日志文件+filebeat_logstash,log4j 和 logback三种方式.         1. logstash+filebeat 模式收集日志: filebeat 配置文件设置: filebeat.inputs:

代码语言:javascript
复制
- type: log
  enabled: true
  paths:
    - /var/log/service-hi.log
output.logstash:
  hosts: ["192.168.1.4:5044"]

filebeat 启动:

代码语言:javascript
复制
sudo chown root filebeat.yml
sudo ./filebeat -e >filebeat.log 2>&1 &

logstash 配置文件设置:logstash-sample.conf    

代码语言:javascript
复制
input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["http://10.0.0.5:9200", "http://10.0.0.13:9200", "http://10.0.0.17:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

logstash 启动:

代码语言:javascript
复制
./bin/logstash -f config/logstash-sample.conf >logstash.log  2>&1 &

 2. log4j 模式采集日志: log4j 配置文件 log4j_to_es.conf

代码语言:javascript
复制
input {
  log4j {
    mode => "server"
    host => "localhost"
    port => 4560
  }
}
filter {
  #Only matched data are send to output.
}
output {
    elasticsearch {
    action => "index"          #The operation on ES
    hosts  => "localhost:9200"   #ElasticSearch host, can be array.
    index  => "applog"         #The index to write data to.
  }
}

运行: ./bin/logstash -f config/log4j_to_es.conf 

3. logback 采集日志: logback 配置文件设置 : logback-es.conf

代码语言:javascript
复制
input {
    tcp {  
        port => 9601  
        codec => json_lines         
    }
}
output {
        elasticsearch {
                hosts => "localhost:9200"
        }
        stdout { codec => rubydebug}
}

logback 运行:

代码语言:javascript
复制
./bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf         ##命令窗形式
nohup ./bin/logstash -f /home/logstash-6.3.0/config/logback-es.conf &  ##后台线程形式

logback 浏览器查看: localhost:9600

    (2) ElasticSearch 下载及安装 elasticsearch 配置文件设置: elasticsearch.yml

代码语言:javascript
复制
network.host=localhost
network.port=9200

elasticsearch  启动:

代码语言:javascript
复制
./bin/elasticsearch
./bin/elasticsearch  -d  #后台线程运行

浏览器查看: localhost:9200    

    (3) Kibana 下载及安装 Kibana 配置文件设置 kibana.yml

代码语言:javascript
复制
server.port: 5601       ##服务端口
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://10.0.0.5:9200","http://10.0.13:9200","http://10.0.0.17:9200"]        ##elasticsearch服务地址 与elasticsearch对应

Kibana  运行:

代码语言:javascript
复制
/home/kibana-6.3.0-linux-x86_64/bin/kibana       #命令窗启动
nohup ./kibana-6.3.0-linux-x86_64/bin/kibana &   #后台线程启动

sudo systemctl stop kibana.service
sudo systemctl start kibana.service

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
sudo systemctl start kibana.service

浏览器访问: localhost:5601

    注意:ElasticSearch ,Kibana,LogStash 下载缓慢,需要配置加速器及repo文件

5. 测试工程创建及配置     Spring Boot 工程创建,选择依赖 devops,web,lombok     这里以logback日志框架进行测试,其他俩种方式后面有时间进行补充。

    pom.xml 添加依赖:

代码语言:javascript
复制
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.11</version>
</dependency>

   主工程编写代码:

代码语言:javascript
复制
@SpringBootApplication
public class SpringbootLogbackApplication {
    private final static Logger logger = LoggerFactory.getLogger(SpringbootLogbackApplication.class);
 
    public static void main(String[] args) {
        new Thread(()->{
            for (int i=0;i<100;i++){
                logger.info("---test---"+i);
            }
        }).start();
        SpringApplication.run(SpringbootLogbackApplication.class, args);
    }
}

    resources 目录下新建logback.xml 文件,配置logback.xml 文件    

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!--这个名字将反应到每一条日志的开头-->
  <contextName>car-trace-logging</contextName>
  <!--设置变量,下面有用到。含义是日志保存路径-->
  <property name="log.path" value="D:/log/CarTrace" />

  <!--输出到控制台-->
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <!-- 级别过滤 -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>INFO</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
    <!--日志输出格式-->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <!--输出到文件-->
  <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!--日志名,用到了上面配置的路径-->
    <file>${log.path}/car-trace.log</file>
    <!--根据yyyy-MM-dd所以是每天新建文件,也可以设置其它格式,如每月或每分-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${log.path}/car-trace.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
    </rollingPolicy>
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>192.168.253.6:9601</destination>     <!--指定logstash ip:监听端口 tcpAppender  可自己实现如kafka传输等-->
    <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
  </appender>

  <!--设置日志隔离级别-->
  <root level="info">
    <appender-ref ref="console"/>
    <appender-ref ref="file" />
    <appender-ref ref="LOGSTASH" />
  </root>

  <!--设置具体包的隔离级别-->
  <logger name="cn.theUnit4.Mapper" level="debug"/>

</configuration>    

6. 工程启动测试,日志顺利打印

参考:https://blog.csdn.net/forezp/article/details/71189836           https://blog.csdn.net/forezp/article/details/98322521

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档