最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot整合ELK實現日志采集與監(jiān)控

 更新時間:2022年06月22日 09:30:18   投稿:mrr  
這篇文章主要介紹了Spring?Boot整合ELK實現日志采集與監(jiān)控,需要的朋友可以參考下

Spring Boot整合ELK實現日志采集與監(jiān)控

前言

在分布式項目中,可以采用ELK來作為日志的收集與分析系統(tǒng),提供一個統(tǒng)一的入口來對日志進行收集,訪問和管理。本文主要演示Spring Boot項目與ELK整合來實現日志的采集與監(jiān)控。

架構圖示

本次測試工程中,采用的架構如下圖所示,微服務通過TCP協(xié)議將日志提供給Logstach,Logstach對日志數據進行采集和轉換之后,將日志數據發(fā)送到Elasticsearch存儲庫,然后再通過Kibana對日志數據進行可視化的呈現。

當然還有很多種不同的實現方案,比如可以通過Beats替代Logstash,或者可以與消息隊列集成,通過生產消費的模式來提升日志數據的可靠性等等,大家有興趣可以自行了解一下,官方也有一些圖示與講解,具體可以參考:https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html

ELK搭建

本次搭建使用的是docker的方式,具體使用的軟件版本如下(本次用于測試,數據目錄未掛載出來):

elasticsearch7.14.2
logstash7.14.2
kibana7.14.2
docker20.10.10
docker-compose1.29.2

在docker中創(chuàng)建一個自定義網絡elk,elasticsearch、logstash、kibana服務都基于該網絡:

docker network create elk # 創(chuàng)建自定義網絡

啟動elasticsearch:

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name elasticsearch --network elk -d elasticsearch:7.14.2

通過http://localhost:9200訪問,可以看到如下信息,說明elasticsearch啟動成功:

啟動kibana,這邊指定了elasticsearch的地址,不指定的話默認是http://elasticsearch:9200:

docker run -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" --name kibana --network elk -d kibana:7.14.2

啟動完成之后,通過http://localhost:5601可以訪問kibana:

啟動logstash:

docker run -it -p 4560:4560 -p 4570:4570 -p 4580:4580 -v /Users/yuanzhihao/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf --name logstash --network elk -d logstash:7.14.2

logstash對外開放了三個端口,這樣可以將不同類型的日志投送到不同的端口,對日志進行分類管理,比如運行日志,安全日志,操作日志等等。同時還需要掛載一個logstash.conf配置文件,具體配置如下:

input {
  tcp {
    mode => "server" # 模式指定為server模式
    host => "0.0.0.0" # server模式時 ip地址是本機
    port => 4560 # 指定監(jiān)聽端口
    codec => json_lines # 指定輸入數據的解碼器 使用json格式
    type => info # 日志的類型
	}
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4570
    codec => json_lines
    type => operation
  }
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4580
    codec => json_lines
    type => security
  }
}

output {
  stdout {
    codec => rubydebug # 可以在logstash控制臺輸出日志 默認就是rubydebug
  }
  
  if [type] == "info" {
    elasticsearch {
      hosts => "elasticsearch:9200"
      index => "info-log-%{+YYYY.MM.dd}"
    }
  }

  if [type] == "operation" {
    elasticsearch {
      hosts => "elasticsearch:9200"
      index => "operation-log-%{+YYYY.MM.dd}"
    }
  }

  if [type] == "security" {
    elasticsearch {
      hosts => "elasticsearch:9200"
      index => "security-log-%{+YYYY.MM.dd}"
    }
  }
} 

這邊的input輸入用到的是Logstash提供的一個TCP的一個插件,我新增了一個type表示日志的類型,有關于TCP插件的具體參數說明可以參考:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-tcp.html

同時,Logstash配置文件中也是支持條件表達式的,參考:https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html#conditionals,這邊是對日志做了一個分類的處理,不同類型的日志對應不同的端口,然后在elasticsearch上面創(chuàng)建不同的索引。

也可以通過docker-compose的方式,啟動elk,docker-compose.yml配置文件如下:

version: '2.2'
services:
  elasticsearch:
    image: elasticsearch:7.14.2
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - elk
  kibana:
    image: kibana:7.14.2
    container_name: kibana
    depends_on:
      - elasticsearch
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:
      - 5601:5601
    networks:
      - elk
  logstash:
    image: logstash:7.14.2
    container_name: logstash
    environment:
      - node.name=es01
    volumes:
      - /Users/yuanzhihao/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    ports:
      - 4560:4560
      - 4570:4570
      - 4580:4580
    networks:
      - elk
networks:
  elk:
    driver: bridge

通過命令啟動,效果和上面docker啟動一樣

docker-compose -f docker-compose.yml up -d

Spring Boot工程配置

Spring Boot項目的maven的pom文件配置如下,需要添加logstash-logback-encoder依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.6</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

在代碼中添加日志打印:

/**
 * @author yuanzhihao
 * @since 2022/6/19
 */
@SpringBootApplication
@RestController
@Slf4j
public class Application {
    private static final Logger operationLog = LoggerFactory.getLogger("operation");
    private static final Logger securityLog = LoggerFactory.getLogger("security");

    @GetMapping("/hello")
    public String hello() {
        log.info("hello info log");
        operationLog.info("hello operation log");
        securityLog.info("hello security log");
        return "Hello elk demo";
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

在resources目錄下添加logback-spring.xml配置文件,根據日志類型輸出到logstash開放出來的對應的端口:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <springProperty scope="context" name="applicationName" source="spring.application.name"/>

    <appender name="infoLogstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>localhost:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <!--添加applicationName字段 -->
            <customFields>{"applicationName":"${applicationName}"}</customFields>
        </encoder>
    </appender>

    <appender name="operationLogstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>localhost:4570</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <customFields>{"applicationName":"${applicationName}"}</customFields>
        </encoder>
    </appender>

    <appender name="securityLogstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>localhost:4580</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <customFields>{"applicationName":"${applicationName}"}</customFields>
        </encoder>
    </appender>

    <logger name="operation" level="info">
        <appender-ref ref="operationLogstash"/>
    </logger>

    <logger name="security" level="info">
        <appender-ref ref="securityLogstash"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="infoLogstash"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

驗證

查看logstash是否接收到日志

啟動Spring Boot項目??梢钥吹絣ogstash控制臺會打印對應的日志,說明logstash已經接收到工程傳過來的日志,logstash驗證ok。

查看索引是否已經生效

訪問http://localhost:9200/_cat/indices,這個可以查出來所有在elasticsearch上面創(chuàng)建的索引,可以看到我們的索引都已經生效了。

日志分析

創(chuàng)建索引模式

訪問http://localhost:5601/app/management/kibana/indexPatterns地址,選擇右上角Create index pattern創(chuàng)建索引模式


輸入索引名稱,這邊輸入operation-log-*

之后在配置中選擇@timestamp,并創(chuàng)建索引

查看日志

轉到http://localhost:5601/app/discover看板頁面,可以看見我們創(chuàng)建的所有的索引,添加Filter可以對字段進行過濾,篩選出我們需要的日志信息。

結語

本次elk的整合的demo就到這邊,這個也差不多是我們項目目前使用的場景了,比較簡單。如果有問題可以留言。

參考地址:https://auth0.com/blog/spring-boot-logs-aggregation-and-monitoring-using-elk-stack

代碼鏈接:https://github.com/yzh19961031/blogDemo/tree/master/elkDemo

相關文章

  • 【spring-boot】快速構建spring-boot微框架的方法

    【spring-boot】快速構建spring-boot微框架的方法

    本篇文章主要介紹了【spring-boot】快速構建spring-boot微框架的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • mybatis Interceptor對UpdateTime自動處理的實現方法

    mybatis Interceptor對UpdateTime自動處理的實現方法

    這篇文章主要給大家介紹了關于使用mybatis Interceptor對UpdateTime自動處理的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-12-12
  • 深入理解Java中包的定義與使用

    深入理解Java中包的定義與使用

    在開發(fā)過程中,會定義很多類,為了避免相同類名稱出現而發(fā)生覆蓋的情況,把所有java程序保存在各自的目錄里面,而該目錄就是包。包的本質實際上就是一個文件夾。本文將給大家詳細的介紹,對大家的學習或工作具有一定的參考借鑒價值
    2021-09-09
  • Java日期時間處理問題(從Date、Calendar到SimpleDateFormat)

    Java日期時間處理問題(從Date、Calendar到SimpleDateFormat)

    這篇文章主要介紹了Java日期時間處理深度解析(從Date、Calendar到SimpleDateFormat),我們詳細討論了Java中的日期和時間處理,包括Date、Calendar和SimpleDateFormat類的使用,以及Java?8引入的新的日期時間API的優(yōu)勢,需要的朋友可以參考下
    2024-08-08
  • Java生成動態(tài)版驗證碼的方法實例

    Java生成動態(tài)版驗證碼的方法實例

    這篇文章主要給大家介紹了利用Java生成動態(tài)版驗證碼的方法實例,本文生成的是GIF格式 + 干擾元素,讓驗證碼破解難度又上了一個層次,文中給出了詳細的示例代碼,并在文末給出了完整的實例代碼供大家下載學習,需要的朋友們下面來一起看看吧。
    2017-04-04
  • maven打包web項目時同時打包為war和jar文件的方法

    maven打包web項目時同時打包為war和jar文件的方法

    本篇文章主要介紹了maven打包web項目時同時打包為war和jar文件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 解決spring boot網關gateway導致的坑,無法下載文件問題

    解決spring boot網關gateway導致的坑,無法下載文件問題

    這篇文章主要介紹了解決spring boot網關gateway導致的坑,無法下載文件的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Swing常用組件之單選按鈕和復選框

    Swing常用組件之單選按鈕和復選框

    Swing是一個用于開發(fā)Java應用程序用戶界面的開發(fā)工具包,這篇文章主要介紹了Swing常用組件之單選按鈕和復選框,感興趣的朋友可以參考一下
    2016-05-05
  • IDEA2022創(chuàng)建SpringBoot項目的圖文教程

    IDEA2022創(chuàng)建SpringBoot項目的圖文教程

    本文主要介紹了IDEA2022創(chuàng)建SpringBoot項目的圖文教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • java反射原理制作對象打印工具

    java反射原理制作對象打印工具

    本文主要給大家介紹了java反射原理制作對象打印工具的方法和代碼,以及一個熱心網友給出的更加簡潔方便的代碼,小伙伴們需要的話可以參考下。
    2015-12-12

最新評論

吉首市| 游戏| 塔城市| 团风县| 秀山| 广水市| 张家港市| 秀山| 广州市| 浦城县| 南郑县| 芦山县| 西林县| 城固县| 馆陶县| 河南省| 共和县| 吴堡县| 舒城县| 和龙市| 鹿泉市| 宁阳县| 隆回县| 鄂托克旗| 九龙坡区| 沂南县| 长丰县| 龙游县| 泰来县| 杭州市| 繁峙县| 堆龙德庆县| 中宁县| 呈贡县| 明光市| 青铜峡市| 延庆县| 承德市| 桓台县| 微博| 庆城县|