1. 程式人生 > 程式設計 >SpringBoot應用整合ELK實現日誌收集的示例程式碼

SpringBoot應用整合ELK實現日誌收集的示例程式碼

ELK即Elasticsearch、Logstash、Kibana,組合起來可以搭建線上日誌系統,本文主要講解使用ELK來收集SpringBoot應用產生的日誌。

ELK中各個服務的作用

  • Elasticsearch:用於儲存收集到的日誌資訊;
  • Logstash:用於收集日誌,SpringBoot應用整合了Logstash以後會把日誌傳送給Logstash,Logstash再把日誌轉發給Elasticsearch;
  • Kibana:通過Web端的視覺化介面來檢視日誌。

使用Docker Compose 搭建ELK環境

需要下載的Docker映象

docker pull elasticsearch:6.4.0
docker pull logstash:6.4.0
docker pull kibana:6.4.0

搭建前準備

elasticsearch啟動成功需要特殊配置

需要設定系統核心引數,否則會因為記憶體不足無法啟動。

# 改變設定
sysctl -w vm.max_map_count=262144
# 使之立即生效
sysctl -p

需要建立/mydata/elasticsearch/data目錄並設定許可權,否則會因為無許可權訪問而啟動失敗。

# 建立目錄
mkdir /mydata/elasticsearch/data/
# 建立並改變該目錄許可權
chmod 777 /mydata/elasticsearch/data

開始搭建

建立一個存放logstash配置的目錄並上傳配置檔案

logstash-springboot.conf檔案內容

input {
 tcp {
  mode => "server"
  host => "0.0.0.0"
  port => 4560
  codec => json_lines
 }
}
output {
 elasticsearch {
  hosts => "es:9200"
  index => "springboot-logstash-%{+YYYY.MM.dd}"
 }
}

建立配置檔案存放目錄並上傳配置檔案到該目錄

mkdir /mydata/logstash

使用docker-compose.yml指令碼啟動ELK服務docker-compose.yml內容

version: '3'
services:
 elasticsearch:
  image: elasticsearch:6.4.0
  container_name: elasticsearch
  environment:
   - "cluster.name=elasticsearch" #設定叢集名稱為elasticsearch
   - "discovery.type=single-node" #以單一節點模式啟動
   - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #設定使用jvm記憶體大小
  volumes:
   - /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #外掛檔案掛載
   - /mydata/elasticsearch/data:/usr/share/elasticsearch/data #資料檔案掛載
  ports:
   - 9200:9200
 kibana:
  image: kibana:6.4.0
  container_name: kibana
  links:
   - elasticsearch:es #可以用es這個域名訪問elasticsearch服務
  depends_on:
   - elasticsearch #kibana在elasticsearch啟動之後再啟動
  environment:
   - "elasticsearch.hosts=http://es:9200" #設定訪問elasticsearch的地址
  ports:
   - 5601:5601
 logstash:
  image: logstash:6.4.0
  container_name: logstash
  volumes:
   - /mydata/logstash/logstash-springboot.conf:/usr/share/logstash/pipeline/logstash.conf #掛載logstash的配置檔案
  depends_on:
   - elasticsearch #kibana在elasticsearch啟動之後再啟動
  links:
   - elasticsearch:es #可以用es這個域名訪問elasticsearch服務
  ports:
   - 4560:4560

上傳到linux伺服器並使用docker-compose命令執行

docker-compose up -d

注意:Elasticsearch啟動可能需要好幾分鐘,要耐心等待。

SpringBoot應用整合ELK實現日誌收集的示例程式碼

在logstash中安裝json_lines外掛

# 進入logstash容器
docker exec -it logstash /bin/bash
# 進入bin目錄
cd /bin/
# 安裝外掛
logstash-plugin install logstash-codec-json_lines
# 退出容器
exit
# 重啟logstash服務
docker restart logstash

開啟防火牆並在kibana中檢視

systemctl stop firewalld

訪問地址:http://192.168.3.101:5601

SpringBoot應用整合ELK實現日誌收集的示例程式碼

SpringBoot應用整合Logstash

在pom.xml中新增logstash-logback-encoder依賴

<!--整合logstash-->
<dependency>
  <groupId>net.logstash.logback</groupId>
  <artifactId>logstash-logback-encoder</artifactId>
  <version>5.3</version>
</dependency>

新增配置檔案logback-spring.xml讓logback的日誌輸出到logstash

注意appender節點下的destination需要改成你自己的logstash服務地址,比如我的是:192.168.3.101:4560 。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
  <!--應用名稱-->
  <property name="APP_NAME" value="mall-admin"/>
  <!--日誌檔案儲存路徑-->
  <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
  <contextName>${APP_NAME}</contextName>
  <!--每天記錄日誌到檔案appender-->
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder>
      <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
  </appender>
  <!--輸出到logstash的appender-->
  <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <!--可以訪問的logstash日誌收集埠-->
    <destination>192.168.3.101:4560</destination>
    <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>
</configuration>

執行Springboot應用

SpringBoot應用整合ELK實現日誌收集的示例程式碼

在kibana中檢視日誌資訊建立index pattern

SpringBoot應用整合ELK實現日誌收集的示例程式碼

SpringBoot應用整合ELK實現日誌收集的示例程式碼

SpringBoot應用整合ELK實現日誌收集的示例程式碼

檢視收集的日誌

SpringBoot應用整合ELK實現日誌收集的示例程式碼

呼叫介面進行測試

SpringBoot應用整合ELK實現日誌收集的示例程式碼

SpringBoot應用整合ELK實現日誌收集的示例程式碼

製造一個異常並檢視修改獲取所有品牌列表介面

SpringBoot應用整合ELK實現日誌收集的示例程式碼

呼叫該介面並檢視日誌

SpringBoot應用整合ELK實現日誌收集的示例程式碼

總結

搭建了ELK日誌收集系統之後,我們如果要檢視SpringBoot應用的日誌資訊,就不需要檢視日誌檔案了,直接在Kibana中檢視即可。

到此這篇關於SpringBoot應用整合ELK實現日誌收集的示例程式碼的文章就介紹到這了,更多相關SpringBoot ELK日誌收集內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!