国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SpringBoot 1024行代碼 - 系統監控工具 Actuator簡介

darkerXi / 2979人閱讀

摘要:前言在生產環境中,我們比較關心任意時刻一個的運行情況。調用接口返回結果我們猜測這個應該是表示應用程序正在正常運行。調用接口返回結果似乎什么都沒發生,沒關系,我們繼續進行。我們繼續試了上文列舉的若干接口,發現大部分返回結果都是未授權。

前言

在生產環境中,我們比較關心任意時刻一個JVM的運行情況。SpringBoot為我們提供了一個方便的功能模塊Actuator。只要簡單幾步就可以為我們的應用添加查詢系統各項指標的功能。

準備工作

完成SpringBoot 1024行代碼 - Getting Started(一個簡單的web應用)

代碼羅列
1. 在pom.xml中加入的引用

    org.springframework.boot
    spring-boot-starter-actuator

2. 啟動應用

我們可以發現,SpringBoot在控制臺上輸出了如下幾行內容

2017-10-28 15:07:41.538  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal)
2017-10-28 15:07:41.539  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-10-28 15:07:41.539  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-10-28 15:07:41.540  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-10-28 15:07:41.541  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-10-28 15:07:41.542  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException
2017-10-28 15:07:41.544  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String)
2017-10-28 15:07:41.545  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-10-28 15:07:41.548  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-10-28 15:07:41.552  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String)
2017-10-28 15:07:41.554  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-10-28 15:07:41.555  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String)
2017-10-28 15:07:41.555  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-10-28 15:07:41.558  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String)
2017-10-28 15:07:41.559  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map)
2017-10-28 15:07:41.559  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
2017-10-28 15:07:41.560  INFO 37061 --- [main] o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()

這表示"/health","/info","/configprops"等相對uri被映射到了一些系統自動創建的Bean的成員方法上。

幾個實驗

我們懷著好奇的心情調用了一個接口。

調用接口

curl 127.0.0.1:8080/health

返回結果

{"status":"UP"}

我們猜測這個應該是表示應用程序正在正常運行。我們緊接著又調用了第二個接口。

調用接口

curl 127.0.0.1:8080/info

返回結果

{}

似乎什么都沒發生,沒關系,我們繼續進行。

調用接口

curl 127.0.0.1:8080/configprops

返回結果

{"timestamp":1509176216111,"status":401,"error":"Unauthorized","message":"Full authentication is required to access this resource.","path":"/configprops"}

英語過四級的朋友們已經猜到發生了什么了,我們沒有被授權查看這個資源。我們繼續試了上文列舉的若干接口,發現大部分返回結果都是未授權。

知識點講解 如何訪問未授權接口

為什么大部分接口都是未授權?SpringBoot在設計中廣泛采用了“約定優于配置(convention over configuration)”的設計思想。Actuator中提供的大部分功能都被默認配置成需要授權才可以訪問,主要原因是這些資源大部分都比較敏感,在web應用被部署在直接可以被公網訪問的環境而開發者不是特別清楚Actuator的功能的情況下web應用的一些重要數據就很容易被輕易獲取。為了保護我們的web應用,Actuator的設計者將大部分敏感資源設計成默認需要授權才可以訪問。

接下來我們來看看如何訪問到這些資源。
通常有兩種方式
1 將資源配置成無需授權
2 給用戶授權
本文只介紹第一種

要將configprops配置成無需授權,只需在application.properties(要放到運行時的classpath下)文件中添加

endpoints.configprops.sensitive=false

之后再調用

curl 127.0.0.1:8080/configprops

就可以看到系統的各種配置屬性信息了。

info接口怎么用

info如果開發者想讓應用程序提供一寫元數據查詢功能,就可以使用info接口。
舉例:
在application.properties文件中配置如下信息

info.project.name=SpringBoot-Demo

之后調用

curl 127.0.0.1:8080/info

結果變成了

{"project":{"name":"SpringBoot-Demo"}}

我們可以發現,通過info接口可以直接查詢第一段為info的配置信息。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67957.html

相關文章

  • SpringBoot-Admin的使用

    摘要:端項目依賴添加是為了使應用處于啟動狀態,會自動添加相關依賴。接下來以作為服務發現的示例來進行演示,實際上也可以使用或者。最后是一個用方式監聽的使用連接端 【前情提要】Spring Boot Actuator 提供了對單個 Spring Boot 應用的監控,信息包含應用狀態、內存、線程、堆棧等,比較全面的監控了 Spring Boot 應用的整個生命周期。但是這樣監控也有一些問題:第一...

    vslam 評論0 收藏0
  • Spring Boot應用監控實戰

    摘要:概述之前講過容器的可視化監控,即監控容器的運行情況,包括使用率內存占用網絡狀況以及磁盤空間等等一系列信息。實戰一下中添加依賴啟動應用程序之后,只要在瀏覽器中輸入端點信息就能獲得應用的一些狀態信息。 showImg(https://segmentfault.com/img/remote/1460000014684947); 概述 之前講過Docker容器的可視化監控,即監控容器的運行情...

    mtunique 評論0 收藏0
  • SpringBoot 入門簡介

    摘要:這里使用的是數據庫啟動類上加上注解在啟動類中添加對包掃描掃描多個包下的可以有以下幾種方法掃描會自動加載相關配置,數據源就會自動注入到中,會自動注入到中,可以直接使用。有配置文件下的使用掃描多個包下的可以有以下幾種方法掃描 Spring-Boot 學習筆記 1 Spring-Boot 介紹 1.1 什么是Spring-Boot Spring-Boot是由Pivotal團隊提供的全新框架...

    chuyao 評論0 收藏0
  • 如何優雅關閉 Spring Boot 應用

    摘要:除了,還有十余種,有的是特定操作,比如轉儲內存日志有的是信息展示,比如顯示應用健康狀態。 showImg(http://ww1.sinaimg.cn/large/006tNc79gy1g5qb2coyfoj30u00k0tan.jpg); 前言 隨著線上應用逐步采用 SpringBoot 構建,SpringBoot應用實例越來多,當線上某個應用需要升級部署時,常常簡單粗暴地使用 kil...

    xiyang 評論0 收藏0
  • 《 Kotlin + Spring Boot : 下一代 Java 服務端開發 》

    摘要:下一代服務端開發下一代服務端開發第部門快速開始第章快速開始環境準備,,快速上手實現一個第章企業級服務開發從到語言的缺點發展歷程的缺點為什么是產生的背景解決了哪些問題為什么是的發展歷程容器的配置地獄是什么從到下一代企業級服務開發在移動開發領域 《 Kotlin + Spring Boot : 下一代 Java 服務端開發 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<