溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

發(fā)布時(shí)間:2020-10-30 19:52:34 來源:億速云 閱讀:471 作者:Leah 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

ELK即Elasticsearch、Logstash、Kibana,組合起來可以搭建線上日志系統(tǒng),本文主要講解使用ELK來收集SpringBoot應(yīng)用產(chǎn)生的日志。

ELK中各個(gè)服務(wù)的作用

  • Elasticsearch:用于存儲收集到的日志信息;
  • Logstash:用于收集日志,SpringBoot應(yīng)用整合了Logstash以后會把日志發(fā)送給Logstash,Logstash再把日志轉(zhuǎn)發(fā)給Elasticsearch;
  • Kibana:通過Web端的可視化界面來查看日志。

使用Docker Compose 搭建ELK環(huán)境

需要下載的Docker鏡像

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

搭建前準(zhǔn)備

elasticsearch啟動(dòng)成功需要特殊配置

需要設(shè)置系統(tǒng)內(nèi)核參數(shù),否則會因?yàn)閮?nèi)存不足無法啟動(dòng)。

# 改變設(shè)置
sysctl -w vm.max_map_count=262144
# 使之立即生效
sysctl -p

需要?jiǎng)?chuàng)建/mydata/elasticsearch/data目錄并設(shè)置權(quán)限,否則會因?yàn)闊o權(quán)限訪問而啟動(dòng)失敗。

# 創(chuàng)建目錄
mkdir /mydata/elasticsearch/data/
# 創(chuàng)建并改變該目錄權(quán)限
chmod 777 /mydata/elasticsearch/data

開始搭建

創(chuàng)建一個(gè)存放logstash配置的目錄并上傳配置文件

logstash-springboot.conf文件內(nèi)容

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}"
 }
}

創(chuàng)建配置文件存放目錄并上傳配置文件到該目錄

mkdir /mydata/logstash

使用docker-compose.yml腳本啟動(dòng)ELK服務(wù)docker-compose.yml內(nèi)容

version: '3'
services:
 elasticsearch:
  image: elasticsearch:6.4.0
  container_name: elasticsearch
  environment:
   - "cluster.name=elasticsearch" #設(shè)置集群名稱為elasticsearch
   - "discovery.type=single-node" #以單一節(jié)點(diǎn)模式啟動(dòng)
   - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #設(shè)置使用jvm內(nèi)存大小
  volumes:
   - /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件掛載
   - /mydata/elasticsearch/data:/usr/share/elasticsearch/data #數(shù)據(jù)文件掛載
  ports:
   - 9200:9200
 kibana:
  image: kibana:6.4.0
  container_name: kibana
  links:
   - elasticsearch:es #可以用es這個(gè)域名訪問elasticsearch服務(wù)
  depends_on:
   - elasticsearch #kibana在elasticsearch啟動(dòng)之后再啟動(dòng)
  environment:
   - "elasticsearch.hosts=http://es:9200" #設(shè)置訪問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啟動(dòng)之后再啟動(dòng)
  links:
   - elasticsearch:es #可以用es這個(gè)域名訪問elasticsearch服務(wù)
  ports:
   - 4560:4560

上傳到linux服務(wù)器并使用docker-compose命令運(yùn)行

docker-compose up -d

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

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

在logstash中安裝json_lines插件

# 進(jìn)入logstash容器
docker exec -it logstash /bin/bash
# 進(jìn)入bin目錄
cd /bin/
# 安裝插件
logstash-plugin install logstash-codec-json_lines
# 退出容器
exit
# 重啟logstash服務(wù)
docker restart logstash

開啟防火墻并在kibana中查看

systemctl stop firewalld

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

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

SpringBoot應(yīng)用集成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節(jié)點(diǎn)下的destination需要改成你自己的logstash服務(wù)地址,比如我的是:192.168.3.101:4560 。

<&#63;xml version="1.0" encoding="UTF-8"&#63;>
<!DOCTYPE configuration>
<configuration>
  <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
  <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
  <!--應(yīng)用名稱-->
  <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>

運(yùn)行Springboot應(yīng)用

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

在kibana中查看日志信息創(chuàng)建index pattern

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

查看收集的日志

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

調(diào)用接口進(jìn)行測試

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

制造一個(gè)異常并查看修改獲取所有品牌列表接口

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

調(diào)用該接口并查看日志

SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例

關(guān)于SpringBoot整合ELK實(shí)現(xiàn)日志收集的示例就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI