<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # ELK 堆棧示例教程 > 原文: [https://howtodoinjava.com/microservices/elk-stack-tutorial-example/](https://howtodoinjava.com/microservices/elk-stack-tutorial-example/) 通過使用[微服務](https://howtodoinjava.com/microservices/microservices-definition-principles-benefits/),我們已經能夠克服許多遺留問題,它使我們能夠創建穩定的分布式應用程序,并對代碼,團隊規模,維護,發布周期,云計算等切面進行所需的控制。 在其他領域也帶來了一些挑戰,例如 **分布式日志管理**并具有查看通常分布在許多服務之間的完整事務日志和分布式調試的功能。 實際上,挑戰在于微服務之間是相互隔離的,它們不共享通用的數據庫和日志文件。 隨著微服務數量的增加以及我們使用自動連續集成工具啟用云部署,當我們遇到任何問題時,非常有必要提供調試組件的準備。 感謝開源運動。 我們已經擁有捆綁在一起的工具,如果一起使用,它們可以起到神奇的作用。 這樣的一組流行工具是 [**ElasticSearch**](https://www.elastic.co/), [Logstash](https://www.elastic.co/products/logstash) 和 [Kibana](https://en.wikipedia.org/wiki/Kibana) – 一起稱為 **ELK 堆棧**。 它們用于實時搜索,分析和可視化日志數據。 在本 **ELK 堆棧教程**中,學習**將 ELK 堆棧集成到微服務**生態系統中。 ## 1\. 什么是 ELK 堆棧 1. **Elasticsearch** 是基于 JSON 的分布式搜索和分析引擎,旨在實現水平可伸縮性,最大的可靠性和易于管理的功能。 2. **Logstash** 是動態數據收集管道,具有可擴展的插件生態系統和強大的 Elasticsearch 協同作用。 3. **Kibana** 通過 UI 提供了數據的可視化。 #### 1.1. ELK 堆棧架構 Logstash 根據我們設置的過濾條件處理應用程序日志文件,并將這些日志發送到 Elasticsearch。 通過 Kibana,我們可以在需要時查看和分析這些日志。 ![](https://img.kancloud.cn/3e/d1/3ed152210f8c3f82a4b808ea1b38bccc_1280x720.jpg) ELK 實戰 ## 2\. ELK 堆棧配置 所有這三個工具均基于 JVM,在開始安裝它們之前,請驗證是否已正確配置 JDK。 檢查是否已完成標準 JDK 1.8 安裝,`JAVA_HOME`和`PATH`的設置。 #### 2.1. 彈性搜索 * 從此[下載頁面](https://www.elastic.co/downloads/elasticsearch)下載 Elasticsearch 的最新版本,并將其解壓縮到任何文件夾。 * 在命令提示符下運行`bin\elasticsearch.bat`。 * 默認情況下,它將從`http://localhost:9200`開始 #### 2.2. Kibana * 從[下載頁面](https://www.elastic.co/downloads/kibana)下載最新發行版,并將其解壓縮到任何文件夾中。 * 在編輯器中打開`config/kibana.yml`,并將`elasticsearch.url`設置為指向您的 Elasticsearch 實例。 在我們的例子中,我們將使用本地實例,只是取消注解`elasticsearch.url: "http://localhost:9200"` * 在命令提示符下運行`bin\kibana.bat`。 * 成功啟動后,Kibana 將在默認端口`5601`上啟動,并且 Kibana UI 將位于`http://localhost:5601` #### 2.3. Logstash * 從[下載頁面](https://www.elastic.co/downloads/logstash)下載最新發行版,并將其解壓縮到任何文件夾中。 * 根據[配置說明](https://www.elastic.co/guide/zh/logstash/current/configuration.html)創建一個文件`logstash.conf`。 在實際演示期間,我們將再次進行精確配置。 現在運行`bin/logstash -f logstash.conf`以啟動 logstash ELK 堆棧未啟動并正在運行。 現在,我們需要創建一些微服務,并將 logstash 指向 API 日志路徑。 ## 3\. ELK 堆棧示例 – 創建微服務 #### 3.1. 創建 Spring Boot 項目 讓我們[使用 Spring Boot](https://howtodoinjava.com/spring/spring-boot/spring-boot-tutorial-with-hello-world-example/) 創建一個應用程序,以縮短開發時間。 請按照以下步驟啟動此服務。 #### 3.2. 添加 REST 端點 添加一個`RestController`類,它將暴露一些端點,例如`/elk`,`/elkdemo`和`/exception`。 實際上,我們將僅測試少量日志語句,因此可以根據您的選擇隨意添加/修改日志。 ```java package com.example.howtodoinjava.elkexamplespringboot; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Date; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpMethod; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @SpringBootApplication public class ElkExampleSpringBootApplication { public static void main(String[] args) { SpringApplication.run(ElkExampleSpringBootApplication.class, args); } } @RestController class ELKController { private static final Logger LOG = Logger.getLogger(ELKController.class.getName()); @Autowired RestTemplate restTemplete; @Bean RestTemplate restTemplate() { return new RestTemplate(); } @RequestMapping(value = "/elkdemo") public String helloWorld() { String response = "Hello user ! " + new Date(); LOG.log(Level.INFO, "/elkdemo - > " + response); return response; } @RequestMapping(value = "/elk") public String helloWorld1() { String response = restTemplete.exchange("http://localhost:8080/elkdemo", HttpMethod.GET, null, new ParameterizedTypeReference() { }).getBody(); LOG.log(Level.INFO, "/elk - > " + response); try { String exceptionrsp = restTemplete.exchange("http://localhost:8080/exception", HttpMethod.GET, null, new ParameterizedTypeReference() { }).getBody(); LOG.log(Level.INFO, "/elk trying to print exception - > " + exceptionrsp); response = response + " === " + exceptionrsp; } catch (Exception e) { // exception should not reach here. Really bad practice :) } return response; } @RequestMapping(value = "/exception") public String exception() { String rsp = ""; try { int i = 1 / 0; // should get exception } catch (Exception e) { e.printStackTrace(); LOG.error(e); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); String sStackTrace = sw.toString(); // stack trace as a string LOG.error("Exception As String :: - > "+sStackTrace); rsp = sStackTrace; } return rsp; } } ``` #### 3.3. 配置 Spring Boot 日志記錄 打開`resources`文件夾下的`application.properties`并添加以下配置條目。 ```java logging.file=elk-example.log spring.application.name = elk-example ``` > 閱讀更多: [Spring Boot 日志記錄示例](https://howtodoinjava.com/spring/spring-boot/logging-application-properties/) #### 3.4. 驗證微服務生成的日志 使用`mvn clean install`進行最終的 Maven 構建,并使用`java -jar target\elk-example-spring-boot-0.0.1-SNAPSHOT.jar`命令啟動應用程序,然后通過瀏覽 [http://localhost:8080/elk](http://localhost:8080/elk) 進行測試。 不必擔心在屏幕上看到大堆棧痕跡,因為它是故意做的,以了解 ELK 如何處理異常消息。 轉到應用程序根目錄,并驗證是否已創建日志文件(即`elk-example.log`),并多次訪問端點,并驗證日志已添加到日志文件中。 ## 4\. Logstash 配置 我們需要創建一個 logstash 配置文件,以便它監聽日志文件并將日志消息推送到彈性搜索中。 這是示例中使用的 logstash [配置](https://www.elastic.co/guide/en/logstash/current/configuration.html),請根據您的設置更改日志路徑。 ```java input { file { type => "java" path => "F:/Study/eclipse_workspace_mars/elk-example-spring-boot/elk-example.log" codec => multiline { pattern => "^%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}.*" negate => "true" what => "previous" } } } filter { #If log line contains tab character followed by 'at' then we will tag that entry as stacktrace if [message] =~ "\tat" { grok { match => ["message", "^(\tat)"] add_tag => ["stacktrace"] } } grok { match => [ "message", "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}) %{LOGLEVEL:level} %{NUMBER:pid} --- \[(?<thread>[A-Za-z0-9-]+)\] [A-Za-z0-9.]*\.(?<class>[A-Za-z0-9#_]+)\s*:\s+(?<logmessage>.*)", "message", "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}) %{LOGLEVEL:level} %{NUMBER:pid} --- .+? :\s+(?<logmessage>.*)" ] } date { match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss.SSS" ] } } output { stdout { codec => rubydebug } # Sending properly parsed log events to elasticsearch elasticsearch { hosts => ["localhost:9200"] } } ``` ## 5\. Kibana 配置 在 Kibana 中查看日志之前,我們需要配置索引模式。 我們可以將`logstash-*`配置為默認配置。 我們總是可以在 logstash 端更改此索引模式,并在 Kibana 中進行配置。 為簡單起見,我們將使用默認配置。 索引模式管理頁面如下所示。 通過這種配置,我們將 Kibana 指向您選擇的 Elasticsearch 索引。 Logstash 用`logstash-YYYY.MM.DD`的名稱模式創建索引。我們可以在 Kibana 控制臺`http://localhost:5601/app/kibana`中進行所有這些配置,然后轉到左側面板中的“管理”鏈接。 ![](https://img.kancloud.cn/d3/d0/d3d095dd6c96528d8ca3e75f59e9099c_1357x700.jpg) Kibana 中的 Logstash 配置 ## 6\. 驗證 ELK 堆棧 現在,當所有組件都啟動并運行后,讓我們驗證整個生態系統。 轉到應用程序并測試端點幾次,以便生成日志,然后轉到 Kibana 控制臺,查看日志已正確堆疊在 Kibana 中,并具有許多額外功能,例如我們可以過濾,查看不同的圖形等。 這是在 Kibana 中生成的日志的視圖。 ![](https://img.kancloud.cn/0b/44/0b449dfcf7a8c53b3f91abc4759addff_1349x695.jpg) Kibana 日志概述 ![](https://img.kancloud.cn/45/7d/457db36a70e1012c8dbc186a9124a032_1345x693.jpg) Kibana 日志細節截圖 ## 7\. ELK 堆棧教程 – 總結 在此 **ELK 示例**中,我們學習了**配置 ELK 堆棧**,并看到了如何將應用程序日志文件指向 ELK 并查看和分析 Kibana 中的日志。 我建議您使用配置并與我們分享您的經驗。 例如 * 取而代之的是用 logstash 聽我們的日志,我們可以使用 logback 配置來使用 TCP 附加程序通過 TCP 協議將日志發送到遠程 Logstash 實例。 * 我們可以使用 Logstash 指向多個日志文件。 * 我們可以在 logstash 配置文件中使用更復雜的過濾器,根據需要執行更多操作。 * 當所有應用程序都將部署在云中時,基本上可以使用遠程 ELK 群集來指向我們的日志文件或將日志推送到其中。 * 在 logstash 中創建不同的索引模式。 ELK 堆棧要求正確配置 Java 1.8。 由于系統路徑中的 JDK 較舊,我在啟動這些工具時遇到了困難。 [下載源碼](https://howtodoinjava.com/wp-content/uploads/2017/08/elk-example-spring-boot.zip) 將我的問題放在評論部分。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看