欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合ELK使用教程

 更新時(shí)間:2024年11月18日 09:42:29   作者:逆風(fēng)飛翔的小叔  
對(duì)于一個(gè)運(yùn)行中的應(yīng)用來(lái)說(shuō),線上排查問(wèn)題是一件很頭疼的問(wèn)題,不管是springboot單應(yīng)用,還是springcloud微服務(wù)應(yīng)用,一旦在生產(chǎn)環(huán)境出了問(wèn)題,大多數(shù)人第一反應(yīng)就是趕緊去看日志查問(wèn)題,本文給大家介紹了SpringBoot整合ELK使用教程,需要的朋友可以參考下

一、前言

對(duì)于一個(gè)運(yùn)行中的應(yīng)用來(lái)說(shuō),線上排查問(wèn)題是一件很頭疼的問(wèn)題。不管是springboot單應(yīng)用,還是springcloud微服務(wù)應(yīng)用,一旦在生產(chǎn)環(huán)境出了問(wèn)題,大多數(shù)人第一反應(yīng)就是趕緊去看日志查問(wèn)題。如何查呢?如果是管理不那么嚴(yán)格的項(xiàng)目,允許你登錄生產(chǎn)服務(wù)器通過(guò)命令去查,或者將生產(chǎn)的日志down下來(lái)去查。但為了服務(wù)器安全,一般來(lái)說(shuō)是不允許研發(fā)人員隨便接觸服務(wù)器,會(huì)有運(yùn)維人員去操作日志,這樣以來(lái)就極大的影響了排查的效率,這時(shí)候會(huì)有人說(shuō),如果有可視化的操作,能可視化檢索日志的界面就好了。

二、為什么需要ELK

一般我們需要進(jìn)行日志分析場(chǎng)景:直接在日志文件中 grep、awk 就可以獲得自己想要的信息。但在規(guī)模較大的場(chǎng)景中,此方法效率低下,面臨問(wèn)題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。需要集中化的日志管理,所有服務(wù)器上的日志收集匯總。常見(jiàn)解決思路是建立集中式日志收集系統(tǒng),將所有節(jié)點(diǎn)上的日志統(tǒng)一收集,管理,訪問(wèn)。

一般大型系統(tǒng)是一個(gè)分布式部署的架構(gòu),不同的服務(wù)模塊部署在不同的服務(wù)器上,問(wèn)題出現(xiàn)時(shí),大部分情況需要根據(jù)問(wèn)題暴露的關(guān)鍵信息,定位到具體的服務(wù)器和服務(wù)模塊,構(gòu)建一套集中式日志系統(tǒng),可以提高定位問(wèn)題的效率。一個(gè)完整的集中式日志系統(tǒng),需要包含以下幾個(gè)主要特點(diǎn):

  • 收集-能夠采集多種來(lái)源的;
  • 傳輸-能夠穩(wěn)定的把日志數(shù)據(jù)傳輸?shù)街醒胂到y(tǒng);
  • 存儲(chǔ)-如何存儲(chǔ)日志數(shù)據(jù);
  • 分析-可以支持 UI 分析;
  • 警告-能夠提供錯(cuò)誤報(bào)告,監(jiān)控機(jī)制;

基于上述的需求,業(yè)界很多公司在不斷探索過(guò)程中,經(jīng)過(guò)多年的實(shí)踐經(jīng)驗(yàn),最終形成了以ELK為主流的一整套解決方案,并且都是開(kāi)源軟件,之間互相配合使用,完美銜接,高效的滿足了很多場(chǎng)合的應(yīng)用,是目前主流的一種日志系統(tǒng)。

三、ELK介紹

3.1 什么是elk

ELK其實(shí)并不是某一款軟件,而是一套完整的解決方案,是三個(gè)產(chǎn)品的首字母縮寫,即

  • Elasticsearch;
  • Logstash ;
  • Kibana;

這三個(gè)軟件都是開(kāi)源軟件,通常配合使用,而且又先后歸于 Elastic.co 公司名下,故被簡(jiǎn)稱為ELK協(xié)議棧,具體來(lái)說(shuō):

Elasticsearch

是一個(gè)分布式的搜索和分析引擎,可以用于全文檢索、結(jié)構(gòu)化檢索和分析,并能將這三者結(jié)合起來(lái)。Elasticsearch 基于 Lucene 開(kāi)發(fā),現(xiàn)在是使用最廣的開(kāi)源搜索引擎之一。

Logstash

簡(jiǎn)單來(lái)說(shuō)就是一根具備實(shí)時(shí)數(shù)據(jù)傳輸能力的管道,負(fù)責(zé)將數(shù)據(jù)信息從管道的輸入端傳輸?shù)焦艿赖妮敵龆耍c此同時(shí)這根管道還可以讓你根據(jù)自己的需求在中間加上濾網(wǎng),Logstash提供了很多功能強(qiáng)大的濾網(wǎng)以滿足你的各種應(yīng)用場(chǎng)景。

Kibana

是一個(gè)開(kāi)源的分析與可視化平臺(tái),設(shè)計(jì)出來(lái)用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的數(shù)據(jù),使用各種不同的圖標(biāo)、表格、地圖等,kibana能夠很輕易的展示高級(jí)數(shù)據(jù)分析與可視化。

3.2 elk工作原理

如下是elk實(shí)際工作時(shí)的原理圖,還是很容易理解的

四、ELK搭建

下面演示如何搭建elk,網(wǎng)上的參考資料比較豐富,本文采用docker快速搭建起elk的演示環(huán)境,參考下面的步驟。

4.1 搭建es環(huán)境

4.1.1 獲取es鏡像

版本可以根據(jù)自身的情況選擇

docker pull elasticsearch:7.6.2

4.1.2 啟動(dòng)es容器

使用下面的命令啟動(dòng)es容器,注意這個(gè)配置,ES_JAVA_OPTS="-Xms512m -Xmx512m",這個(gè)配置參數(shù)值根據(jù)你的服務(wù)器配置決定,一般最好不要低于512m即可;

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" --name es76 -d elasticsearch:7.6.2

4.1.3 配置es參數(shù)

進(jìn)入到es容器內(nèi)部,然后找到下面的這個(gè)文件

然后將下面的配置參數(shù)配置進(jìn)去

cluster.name: "docker-cluster"
http.cors.enabled: true
network.host: 0.0.0.0
http.port: 9200
http.cors.allow-origin: "*"

4.1.4 重啟es容器并訪問(wèn)

配置完成后重啟docker容器,重啟成功后,開(kāi)放9200的端口,然后瀏覽器訪問(wèn),IP:9200,看到如下信息,說(shuō)明es可以正常使用。

4.2 搭建kibana

4.2.1 拉取kibana鏡像

為了減少后面的配置麻煩和一些問(wèn)題,建議kibana版本與es版本一致

docker pull kibana:7.6.2

4.2.2 啟動(dòng)kibana容器

這里的IP,如果是云服務(wù)器,注意使用內(nèi)網(wǎng)的IP地址

docker run --name kibana -e ELASTICSEARCH_HOSTS=http://es服務(wù)IP:9200 -p 5601:5601 -d kibana:7.6.2

4.2.3 修改配置文件

進(jìn)入到kibana容器中,進(jìn)入到下面的目錄中

cd /usr/share/kibana/config
vi kibana.yml 

將如下的配置信息配置進(jìn)去(es的IP地址如果是云服務(wù)器建議使用內(nèi)網(wǎng)IP)

server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://es服務(wù)IP:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: zh-CN

4.2.4 重啟容器并訪問(wèn)

上述配置信息配置完成后,重啟容器,開(kāi)放5601端口,瀏覽器就可以直接訪問(wèn),IP:5601,看到下面的效果說(shuō)明kibana可以正常使用了

4.3 搭建logstash

4.3.1 下載安裝包

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.1.0.tar.gz

4.3.2 解壓安裝包

4.3.3 新增配置logstash文件

進(jìn)入logstash-7.1.0目錄下的config中

cd logstash-7.1.0/config

新增文件

vi logstash.conf

添加下面的配置信息

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

使用下面的命令進(jìn)行啟動(dòng)

./bin/logstash -f ./log-conf/logstash.conf

看到下面的輸出日志,說(shuō)明當(dāng)前l(fā)ogstash服務(wù)已經(jīng)開(kāi)始工作,準(zhǔn)備接收輸入日志了

五、springboot集成elk

5.1 集成過(guò)程演示

參考下面的過(guò)程在springboot中快速集成elk

5.1.1 創(chuàng)建springboot工程

項(xiàng)目結(jié)構(gòu)如下

5.1.2 導(dǎo)入依賴

根據(jù)需要引入依賴,如果是集成elk,還需要引入下面這個(gè)

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

5.1.3 配置logback日志

springboot集成elk最關(guān)鍵的就是配置logback日志文件,需要按照一定的格式規(guī)范進(jìn)行配置,才能將運(yùn)行過(guò)程中產(chǎn)生的日志上報(bào)到logstash,然后經(jīng)過(guò)轉(zhuǎn)換輸送到es,最后展現(xiàn)在kibana中,參考下面的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <springProperty scope="context" name="springApplicationName" source="spring.application.name" />
    <property name="LOG_HOME" value="logs/demo.log" />
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
 
    <!--DEBUG日志輸出到LogStash-->
    <appender name="LOG_STASH_INFO" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <destination>101.34.251.135:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>Asia/Shanghai</timeZone>
                </timestamp>
                <!--自定義日志輸出格式-->
                <pattern>
                    <pattern>
                        {
                        "project": "elk",
                        "level": "%level",
                        "service": "${springApplicationName:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger",
                        "message": "%message",
                        "stack_trace": "%exception"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>
 
    <root >
        <appender-ref ref="STDOUT" />
        <appender-ref ref="LOG_STASH_INFO" />
    </root>
 
</configuration>

5.1.4 增加測(cè)試接口

為了后續(xù)方便觀察效果,增加兩個(gè)測(cè)試接口,一個(gè)模擬正常的調(diào)用,另一個(gè)模擬異常調(diào)用

 
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
 
    @Autowired
    private UserService userService;
 
    //http://localhost:8088/user/get?userId=001
    @GetMapping("/get")
    public Object getUserInfo(String userId){
        log.info("getUserInfo userId:【{}】",userId);
        Map userInfo = userService.getUserInfo(userId);
        return userInfo;
    }
 
    //http://localhost:8088/user/error?userId=001
    @GetMapping("/error")
    public Object error(String userId){
        log.info("error userId:【{}】",userId);
        Map userInfo = userService.getUserInfo(userId);
        int e = 1/0;
        return userInfo;
    }
}

5.1.5 配置索引模式

為了讓程序中的日志能夠正常展現(xiàn)到es中,由于es是通過(guò)接收l(shuí)ogstash傳輸過(guò)來(lái)的數(shù)據(jù),存儲(chǔ)到索引中才能通過(guò)kibana展現(xiàn),所以索引的存儲(chǔ)格式就很重要,需要提前在kibana上面配置一下索引的展現(xiàn)格式

最后進(jìn)入到索引查看的欄目就可以看到展示的索引中的日志信息了

5.1.6 接口調(diào)用

依次調(diào)用上面的兩個(gè)測(cè)試接口,然后查看kibana中日志的變化

調(diào)用正常響應(yīng)的接口

接口能夠正常響應(yīng),由于我們?cè)诮涌诜椒ㄖ刑砑恿艘恍休敵鋈罩拘畔?,通過(guò)上面的搜索框,能夠在es的日志信息中搜索出來(lái);

調(diào)用異常響應(yīng)的接口

接口調(diào)用異常后,也能通過(guò)kibana快速發(fā)現(xiàn)異常信息輸出

通過(guò)上面的實(shí)驗(yàn)和操作體驗(yàn),可以感受到在springboot中集成elk之后帶來(lái)的便利,有了可視化的日志展現(xiàn),提升問(wèn)題排查效率的同時(shí),也能更好的統(tǒng)一管理日志,并充分發(fā)揮日志的作用。

六、寫在文末

本文通過(guò)實(shí)際操作詳細(xì)介紹了ELK環(huán)境的搭建,并通過(guò)springboot工程演示了如何接入ELK的詳細(xì)過(guò)程,希望對(duì)看到的同學(xué)有用哦,本篇到此結(jié)束,感謝觀看。

以上就是SpringBoot整合ELK使用教程的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot ELK使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java集合中的Collection接口總結(jié)

    Java集合中的Collection接口總結(jié)

    這篇文章主要介紹了Java集合中的Collection接口總結(jié),Collection 接口是 List和Set接口的父接口,該接口里定義的方法既可用于操作 Set 集合,也可用于操作 List 集合,需要的朋友可以參考下
    2023-11-11
  • SpringBoot解析自定義yml文件的流程步驟

    SpringBoot解析自定義yml文件的流程步驟

    這篇文章主要介紹了SpringBoot解析自定義yml文件的流程步驟,文章通過(guò)代碼示例和圖文結(jié)合的方式給大家介紹的非常詳細(xì), 對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • IDEA中request.getParameter爆紅問(wèn)題及解決

    IDEA中request.getParameter爆紅問(wèn)題及解決

    這篇文章主要介紹了IDEA中request.getParameter爆紅問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Springboot在IDEA熱部署的配置方法

    Springboot在IDEA熱部署的配置方法

    這篇文章主要介紹了Springboot在IDEA熱部署的配置方法,給大家補(bǔ)充介紹了Intellij IDEA 4種配置熱部署的方法,需要的朋友可以參考下
    2018-04-04
  • 最新評(píng)論