Spring Boot中如何使用Ostara監控應用?

banq發表於2024-03-04

在本部落格中,您將瞭解如何使用 Ostara 監控 Spring Boot 應用程式。Ostara 是一個桌面應用程式,用於監視和管理您的應用程式。

通常使用Spring Actuator、Prometheus 和 Grafana 來監控您的應用程式,在這篇文章中,您將瞭解使用 Spring Actuator 與Ostara結合的替代方法。Ostara 的設定要容易一些,因此它看起來是一個有效的替代方案。

先決條件是:

  • Spring Boot 3基礎知識;
  • 基本的Linux知識;
  • 使用Java 17。

建立被測應用程式
首先,您需要建立一個可以監控的應用程式:加入Spring Web 和 Spring Boot Actuator兩個元件:

  1. Spring Web 將用於建立兩個虛擬 Rest 端點
  2. Spring Boot Actuator 將用於啟用監控端點。

在 pom 檔案中新增 git-commit-id-plugin 以生成構建資訊。此外,在 Spring-boot-maven-plugin 的執行中新增 build-info 目標,以便在構建過程中自動生成資訊。

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <executions>
        <execution>
          <goals>
            <goal>build-info</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>pl.project13.maven</groupId>
      <artifactId>git-commit-id-plugin</artifactId>
      <version>4.9.10</version>
      <executions>
        <execution>
          <id>get-the-git-infos</id>
          <goals>
            <goal>revision</goal>
          </goals>
        </execution>
      </executions>
 
      <configuration>
        <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
        <prefix>git</prefix>
        <verbose>false</verbose>
        <generateGitPropertiesFile>true</generateGitPropertiesFile>
        <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
        <format>properties</format>
        <gitDescribe>
          <skip>false</skip>
          <always>false</always>
          <dirty>-dirty</dirty>
        </gitDescribe>
      </configuration>
 
    </plugin>
  </plugins>
</build>

在 application.properties 中為執行器端點啟用完整的 git 資訊。

management.info.git.mode=full

新增一個帶有兩個虛擬端點的 Rest 控制器:

@RestController
public class MetricsController {
  
    @GetMapping(<font>"/endPoint1")
    public String endPoint1() {
        return
"Metrics for endPoint1";
    }
  
    @GetMapping(
"/endPoint2")
    public String endPoint2() {
        return
"Metrics for endPoint2";
    }
      
}

構建執行

$ mvn clean verify
$ java -jar target/myostaraplanet-0.0.1-SNAPSHOT.jar

驗證端點:
$ curl http://localhost:8080/endPoint1
Metrics for endPoint1
$ curl http://localhost:8080/endPoint2
Metrics for endPoint2

驗證 actuato端點:

$ curl http:<font>//localhost:8080/actuator | python3 -mjson.tool<i>
 ...
{
   
"_links": {
       
"self": {
           
"href": "http://localhost:8080/actuator",
           
"templated": false
        },
       
"health": {
           
"href": "http://localhost:8080/actuator/health",
           
"templated": false
        },
       
"health-path": {
           
"href": "http://localhost:8080/actuator/health/{*path}",
           
"templated": true
        }
    }
}

新增安全性
基本的安全措施已經到位。不過,還不是很安全。讓我們為執行器端點新增授權。請注意,本段中的設定不適合生產使用。

在 pom 中新增 Spring Security 依賴關係。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

在 application.properties 檔案中新增憑證和角色。同樣,請勿將其用於生產目的。
spring.security.user.name=admin
spring.security.user.password=admin123
spring.security.user.roles=ADMIN

新增一個 WebSecurity 類,為執行器端點新增安全層。

@Configuration
@EnableWebSecurity
public class WebSecurity {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(authz -> authz
                .requestMatchers(<font>"/actuator/**").hasRole("ADMIN")
                .anyRequest().permitAll())
                .httpBasic(Customizer.withDefaults());
        return http.build();
 
    }
}

構建並啟動應用程式。驗證是否可以使用指定的憑據訪問執行器端點。

$ curl http:<font>//localhost:8080/actuator -u "admin:admin123" | python3 -mjson.tool<i>
 ...
{
   
"_links": {
       
"self": {
           
"href": "http://localhost:8080/actuator",
           
"templated": false
        },
       
"health": {
           
"href": "http://localhost:8080/actuator/health",
           
"templated": false
        },
       
"health-path": {
           
"href": "http://localhost:8080/actuator/health/{*path}",
           
"templated": true
        }
    }
}

安裝 Ostara
訪問 Ostara 網站Ostara website,點選 "下載 Ostara "按鈕。選擇你使用的平臺(我使用的是 Linux 64 位),然後下載 Ostara-0.12.0.AppImage 檔案。雙擊該檔案,Ostara 就啟動了。就這樣!

監控應用程式
預設情況下,只啟用有限的一組執行器端點。Ostara 將透過這有限的一組端點執行,但因此可見的資訊較少。要檢視 Ostara 的全部功能,必須啟用所有執行器端點。再次提醒,在生產過程中要注意資訊的公開程度。

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

在繼續使用 Ostara 之前,建議禁用傳送使用統計資訊和錯誤資訊的功能。
導航至 "設定"(右上角),選擇 "隱私",然後禁用跟蹤選項。

在左側選單中選擇 "建立例項",然後填寫以下欄位:

  • Actuator URL: http://localhost:8080/actuator
  • Alias: MyFirstInstance
  • Application Name: MyFirstApp
  • Disable SSL Verification: Yes (for this demo, no SSL connection is used)
  • Authentication Type: Basic
  • Username and Password: the admin credentials

單擊 " Test Connection"按鈕。這會返回一個未經授權的錯誤,這似乎是 Ostara 的一個錯誤,因為憑證資訊是正確的。
忽略錯誤,點選儲存按鈕。

Ostara 可以連線到應用程式,儀表板會顯示一些基本狀態資訊。

Info 
資訊頁面顯示您在 git-commit-id-plugin 幫助下獲得的資訊。

App Properties
應用程式屬性頁面顯示應用程式屬性。不過,從下面的截圖中可以看到,所有值都被遮蔽了。這是 Spring Boot 3 的預設行為。

這種行為可以在 Spring Boot 應用程式的 application.properties 中更改。您可以選擇 "always "(不推薦)、"when-authorized "或 "never"。

management.endpoint.configprops.show-values=when-authorized
management.endpoint.env.show-values=when-authorized

重新構建並啟動應用程式。數值可見。

Metrics
透過 "Metrics"頁面,您可以啟用預定義或自定義度量的通知。

開啟 http.server.requests 指標,然後單擊 Add Metric Notification.。

填寫以下內容,以便在 EndPoint1 被呼叫超過 10 次時建立通知,然後單擊儲存按鈕:

  • Name: EndPoint 1 invoked > 10 times
  • Type: Simple
  • Tags: /endPoint1
  • Operation: Greater Than
  • Value: 10

Loggers
記錄儀頁面會顯示可用的記錄儀,您可以更改所需的記錄級別。當您需要分析錯誤時,這是一項非常有趣的功能。

單擊 com.mydeveloperplanet.myostaraplanet.MetricsController 的 DEBUG 按鈕。系統將顯示禁止此操作的訊息。

解決辦法是禁用執行器端點的 csrf 保護。

在 WebSecurity 類中新增以下一行。

public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests(authz -> authz
            .requestMatchers(<font>"/actuator/**").hasRole("ADMIN")
            .anyRequest().permitAll())
            .csrf(csrf -> csrf
                    .ignoringRequestMatchers(
"/actuator/**")
            )
            .httpBasic(Customizer.withDefaults());
    return http.build();
}

或者
在 EndPoint1 程式碼中新增一些日誌語句,以驗證結果。

@RequestMapping(<font>"/endPoint1")
public String endPoint1() {
    logger.debug(
"This is DEBUG message");
    logger.trace(
"This is a TRACE message");
    return
"Metrics for endPoint1";
}

構建並重新啟動應用程式。

再次為 MetricsController 啟用 DEBUG 日誌並呼叫 EndPoint1。日誌中將顯示 DEBUG 語句。

結論
Ostara 是監控 Spring Boot 應用程式的不錯選擇。安裝時只需下載一個檔案並啟動即可。Ostara 能為你提供清晰的視覺化檢視,並在出現問題時發出通知。它還能在例項上啟動執行緒剖析並下載堆轉儲。與 Grafana 相比,Grafana 的圖表比 Ostara 更花哨。不過,Ostara 不僅是一款視覺化工具,還能與應用程式進行互動,並在出現問題時接收通知。

相關文章