中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

開發腳手架集成Spring?Boot?Actuator監控的方法

發布時間:2022-05-05 10:40:31 來源:億速云 閱讀:131 作者:iii 欄目:開發技術

今天小編給大家分享一下開發腳手架集成Spring Boot Actuator監控的方法的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

集成

引入依賴

在項目的pom.xml中增加以下依賴

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

配置文件

application.yml

management:
   # 禁用執行器端點的安全檢查
   security:
      enabled: false

訪問驗證

例如,輸入http://localhost:8080/actuator/health,我們可以查看應用程序當前狀態

{
    "status": "UP"
}

這個接口經常用于服務探活或者健康檢查接口。

到這里就集成完成了哈。

端點 Endpoints

Actuator默認把所有訪問點暴露給JMX,但處于安全原因,只有healthinfo會暴露給Web。

Actuator提供的所有訪問點均在官方文檔列出,要暴露更多的訪問點給Web,需要在application.yml中加上配置:

management:
  endpoints:
    web:
      exposure:
        # 包含所有端點使用 "*",注意有引號
        include: info, health, beans, env, metrics

Actuator 提供了以下接口,具體如下表所示。

HTTP 方法路徑描述
GET/auditevents顯示應用暴露的審計事件 (比如認證進入、訂單失敗)
GET/beans描述應用程序上下文里全部的 Bean,以及它們的關系
GET/conditions就是 1.0 的 /autoconfig ,提供一份自動配置生效的條件情況,記錄哪些自動配置條件通過了,哪些沒通過
GET/configprops描述配置屬性(包含默認值)如何注入Bean
GET/env獲取全部環境屬性
GET/env/{name}根據名稱獲取特定的環境屬性值
GET/flyway提供一份 Flyway 數據庫遷移信息
GET/liquidbase顯示Liquibase 數據庫遷移的纖細信息
GET/health報告應用程序的健康指標,這些值由 HealthIndicator 的實現類提供
GET/heapdumpdump 一份應用的 JVM 堆信息
GET/httptrace顯示HTTP足跡,最近100個HTTP request/repsponse
GET/info獲取應用程序的定制信息,這些信息由info打頭的屬性提供
GET/logfile返回log file中的內容(如果 logging.file 或者 logging.path 被設置)
GET/loggers顯示和修改配置的loggers
GET/metrics報告各種應用程序度量信息,比如內存用量和HTTP請求計數
GET/metrics/{name}報告指定名稱的應用程序度量值
GET/scheduledtasks展示應用中的定時任務信息
GET/sessions如果我們使用了 Spring Session 展示應用中的 HTTP sessions 信息
POST/shutdown關閉應用程序,要求endpoints.shutdown.enabled設置為true
GET/mappings描述全部的 URI路徑,以及它們和控制器(包含Actuator端點)的映射關系
GET/threaddump獲取線程活動的快照
GET/prometheus以 Prometheus 服務器可以抓取的格式公開指標。需要依賴micrometer-registry-prometheus.

下面著重講下實際項目用到的。

Health

health 主要用來檢查應用的運行狀態,這是我們使用最高頻的一個監控點。監控實例的運行狀態,以及應用不”健康“的原因,比如數據庫連接、磁盤空間不夠等。

健康信息詳情是否公開可以配置,例如:

management.endpoint.health.show-details=always
  • never 從不顯示細節,默認

  • when-authorized 詳細信息僅向授權用戶顯示。可以使用 配置授權角色management.endpoint.health.roles

  • always 向所有用戶顯示詳細信息。

Spring Boot 會自動配置HealthIndicators下表中列出的內容。您也可以通過配置啟用或禁用選定的指標management.health.key.enabledkey如下表所示:

鑰匙姓名描述
cassandraCassandraDriverHealthIndicator檢查 Cassandra 數據庫是否已啟動。
couchbaseCouchbaseHealthIndicator檢查 Couchbase 集群是否已啟動。
dbDataSourceHealthIndicator檢查是否可以獲得連接DataSource
diskspaceDiskSpaceHealthIndicator檢查磁盤空間不足。
elasticsearchElasticsearchRestHealthIndicator檢查 Elasticsearch 集群是否已啟動。
hazelcastHazelcastHealthIndicator檢查 Hazelcast 服務器是否已啟動。
influxdbInfluxDbHealthIndicator檢查 InfluxDB 服務器是否已啟動。
jmsJmsHealthIndicator檢查 JMS 代理是否已啟動。
ldapLdapHealthIndicator檢查 LDAP 服務器是否已啟動。
mailMailHealthIndicator檢查郵件服務器是否已啟動。
mongoMongoHealthIndicator檢查 Mongo 數據庫是否已啟動。
neo4jNeo4jHealthIndicator檢查 Neo4j 數據庫是否已啟動。
pingPingHealthIndicator始終以 響應UP
rabbitRabbitHealthIndicator檢查 Rabbit 服務器是否已啟動。
redisRedisHealthIndicator檢查 Redis 服務器是否已啟動。
solrSolrHealthIndicator檢查 Solr 服務器是否已啟動。

可以在配置文件中關閉特定的健康檢查指標,比如關閉 redis 的健康檢查:

management.health.redis.enabled=false

Info

info 就是我們自己配置在配置文件中以 info 開頭的配置信息,您可以通過設置Spring 屬性來自定義info端點公開的數據。info.*鍵下的所有Environment屬性都會自動公開。例如,您可以將以下設置添加到application.yaml文件中:

info:
  app:
    name: spring-boot-actuator
    version: 1.0.0
    test: test
    encoding: @project.build.sourceEncoding@
    source: @java.version@
    target: @java.version@

啟動項目,訪問:http://localhost:8080/actuator/info返回部分信息如下:

{
	"app": {
		"name": "spring-boot-actuator",
		"version": "1.0.0",
		"test": "test",
		"encoding": "UTF-8",
		"source": "1.8.0_102",
		"target": "1.8.0_102"
	}
}

安全

要特別注意暴露的URL的安全性,例如,/actuator/env可以獲取當前機器的所有環境變量,不可暴露給公網。

為了保證 actuator 暴露的監控接口的安全性,需要添加安全控制的依賴spring-boot-start-security依賴,訪問應用監控端點時,都需要輸入驗證信息。

則默認情況下使用基于表單的HTTP身份驗證來保護端點。

Security 依賴,可以選擇不加,不進行安全管理,但不建議這么做。

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

代碼如下:

@Configuration
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {

    /*
     * version1:
     * 1. 限制 '/shutdown'端點的訪問,只允許ACTUATOR_ADMIN訪問
     * 2. 允許外部訪問其他的端點
     * 3. 允許外部訪問靜態資源
     * 4. 允許外部訪問 '/'
     * 5. 其他的訪問需要被校驗
     * version2:
     * 1. 限制所有端點的訪問,只允許ACTUATOR_ADMIN訪問
     * 2. 允許外部訪問靜態資源
     * 3. 允許外部訪問 '/'
     * 4. 其他的訪問需要被校驗
     */

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // version1
//        http
//                .authorizeRequests()
//                    .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))
//                        .hasRole("ACTUATOR_ADMIN")
//                .requestMatchers(EndpointRequest.toAnyEndpoint())
//                    .permitAll()
//                .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
//                    .permitAll()
//                .antMatchers("/")
//                    .permitAll()
//                .antMatchers("/**")
//                    .authenticated()
//                .and()
//                .httpBasic();

        // version2
        http
                .authorizeRequests()
                .requestMatchers(EndpointRequest.toAnyEndpoint())
                    .hasRole("ACTUATOR_ADMIN")
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
                    .permitAll()
                .antMatchers("/")
                    .permitAll()
                .antMatchers("/**")
                    .authenticated()
                .and()
                .httpBasic();
    }
}

application.properties的相關配置如下:

# Spring Security Default user name and password
spring.security.user.name=actuator
spring.security.user.password=actuator
spring.security.user.roles=ACTUATOR_ADMIN

高級

自定義健康檢查

要提供自定義健康信息,您可以注冊實現該HealthIndicator接口的 Spring bean。您需要提供該health()方法的實現并返回Health響應。Health響應應包含狀態,并且可以選擇包含要顯示的其他詳細信息。以下代碼顯示了一個示例HealthIndicator實現:

@Component
public class EasyAdminHealthIndicator extends AbstractHealthIndicator {
    @Override
    public void doHealthCheck(Health.Builder builder) throws Exception {
        boolean checkHealth = check();
        if (checkHealth) {
            builder.up();
        } else {
            builder.down();
        }
        builder.withDetail("code", "200")
                .withDetail("msg", "i am ok");
    }
    private boolean check() {
        return true;
    }
}

啟動項目,訪問:http://localhost:8080/actuator/health返回信息如下:

{
	"status": "UP",
	"components": {
		"db": {
			"status": "UP",
			"details": {
				"database": "MySQL",
				"validationQuery": "isValid()"
			}
		},
		"diskSpace": {
			"status": "UP",
			"details": {
				"total": 332861009920,
				"free": 312464228352,
				"threshold": 10485760,
				"exists": true
			}
		},
		"easyAdmin": {         // do do do
			"status": "UP",
			"details": {
				"code": "200",
				"msg": "i am ok"
			}
		},
		"mail": {
			"status": "UP",
			"details": {
				"location": "smtp.qq.com:-1"
			}
		},
		"ping": {
			"status": "UP"
		}
	}
}

自定義metrics指標

兩種常用指標類型(Metric Type)

gauge, counter, summary, timer

gauge: 可增可減計數器,反應某值當前一刻狀態。比如稱重傳感器的當前重量,溫度傳感器的當前溫度。

方式一:

Gauge.builder("gn.temperature.gauge", new AtomicInteger(37), AtomicInteger::get)

方式二:

registry.gauge("gn.temperature.gauge", Tags.of("site", "SiteA", "cab", "cab01"), new AtomicInteger(37));

counter:只增不減計數器,是Gauge的一個特例。適用于只有服務器重啟時候才會重置的計數場景。比如"用戶訪問次數",某接口失敗次數"等等。API 使用方式類似。

Counter counter = Counter.builder("gn.beat.counter")
  .tags("site", "SiteA", "function", "foo")
  .description("for request errors")
  .register(registry);
counter.increment();

融入到系統的方式

方式一: 業務系統埋點

@Component
public class SampleBean {
    private final Counter counter;
    private final List<String> list = new CopyOnWriteArrayList<>();;
    public SampleBean(MeterRegistry registry) {
        this.counter = registry.counter("laker.counter");
         registry.gauge("laker.size", Tags.empty(), this.list.size());
    }
    public void handleMessage(String message) {
        this.counter.increment();
        list.add(message);
    }
    public void handleRemoveMessage(String message) {
        list.remove(message);
    }
}

方式二:MeterBinder

SpringBoot中提供了MeterBinder接口用于申明與注冊meterRegistry。自定義Metrics只需要實現MeterBinder接口,Spring會自動發現并完成后續的雜活。

@Bean
public class MyMetrics implements MeterBinder {
   @Override
   public void bindTo(MeterRegistry meterRegistry) {
    //此處添加相關指標
    meterRegistry.gauge("laker.gauge", Tags.of("site", "SiteA"), new AtomicInteger(37));
   }
}

在瀏覽器訪問http://localhost:8080/actuator/metrics/laker.counter

結果如下

{
    "name": "laker.counter",
    "description": null,
    "baseUnit": null,
    "measurements": [
        {
            "statistic": "COUNT",
            "value": 9.0
        }
    ],
    "availableTags": []
}

其他使用情況可參考:MetricsAutoConfiguration.java

PID PORT過程監控

  • ApplicationPidFileWriter創建一個包含應用程序 PID 的文件(默認情況下,在應用程序目錄中,文件名為application.pid)。

  • WebServerPortFileWriter創建一個文件(或多個文件),其中包含正在運行的 Web 服務器的端口(默認情況下,在應用程序目錄中,文件名為application.port)。

默認情況下,這些編寫器未激活:

@SpringBootApplication
public class LakerMapApplication {
    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(LakerMapApplication.class);
        springApplication.addListeners(new ApplicationPidFileWriter(), new WebServerPortFileWriter("./laker.port"));
        springApplication.run(args);
    }
}

配置文件:

spring: 
  pid:
    # 寫入pid的文件
    file: ./laker.pid
    # 當無法寫入pid文件的時候,是否拋出異常
    fail-on-write-error: false

自定義管理端點路徑

management.endpoints.web.base-path=/manage

將端點從/actuator/{id}更改為/manage/{id}(例如,/manage/info)。

如果要將端點映射到不同的路徑,可以使用該management.endpoints.web.path-mapping屬性。

以下示例重新映射/actuator/health/healthcheck

management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck

自定義管理服務器端口

management.server.port=8081
management.server.address=127.0.0.1

暴露數據給Prometheus

因為暴露內部信息的特性,Actuator 也可以和一些外部的應用監控系統整合(Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等)。這些監控系統提供了出色的儀表板,圖形,分析和警報,可幫助你通過一個統一友好的界面,監視和管理你的應用程序。

添加依賴

為了讓Spring Boot 應用和Prometheus 集成,你需要增加micrometer-registry-prometheus依賴。

<!-- Micrometer Prometheus registry  -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

添加上述依賴項之后,Spring Boot 將會自動配置 PrometheusMeterRegistryCollectorRegistry來以Prometheus 可以抓取的格式收集和導出指標數據。

所有的相關數據,都會在Actuator 的 /prometheus端點暴露出來。Prometheus 可以抓取該端點以定期獲取度量標準數據。

添加micrometer-registry-prometheus依賴后,我們訪問http://localhost:8080/actuator/prometheus地址。

以上就是“開發腳手架集成Spring Boot Actuator監控的方法”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿克| 建湖县| 镇坪县| 寿宁县| 沙坪坝区| 烟台市| 杭州市| 天水市| 彭泽县| 青海省| 句容市| 绥宁县| 陵水| 会昌县| 海口市| 通河县| 含山县| 玛沁县| 芷江| 潞城市| 拜泉县| 双峰县| 清流县| 开化县| 乐亭县| 共和县| 龙川县| 湖口县| 呼图壁县| 错那县| 微山县| 梅河口市| 洱源县| 通化县| 富平县| 大丰市| 高平市| 驻马店市| 英吉沙县| 临泉县| 沂源县|