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

資訊專欄INFORMATION COLUMN

SpringBoot 1024行代碼 - 系統(tǒng)監(jiān)控工具 Actuator簡(jiǎn)介

darkerXi / 2988人閱讀

摘要:前言在生產(chǎn)環(huán)境中,我們比較關(guān)心任意時(shí)刻一個(gè)的運(yùn)行情況。調(diào)用接口返回結(jié)果我們猜測(cè)這個(gè)應(yīng)該是表示應(yīng)用程序正在正常運(yùn)行。調(diào)用接口返回結(jié)果似乎什么都沒(méi)發(fā)生,沒(méi)關(guān)系,我們繼續(xù)進(jìn)行。我們繼續(xù)試了上文列舉的若干接口,發(fā)現(xiàn)大部分返回結(jié)果都是未授權(quán)。

前言

在生產(chǎn)環(huán)境中,我們比較關(guān)心任意時(shí)刻一個(gè)JVM的運(yùn)行情況。SpringBoot為我們提供了一個(gè)方便的功能模塊Actuator。只要簡(jiǎn)單幾步就可以為我們的應(yīng)用添加查詢系統(tǒng)各項(xiàng)指標(biāo)的功能。

準(zhǔn)備工作

完成SpringBoot 1024行代碼 - Getting Started(一個(gè)簡(jiǎn)單的web應(yīng)用)

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

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

2. 啟動(dòng)應(yīng)用

我們可以發(fā)現(xiàn),SpringBoot在控制臺(tái)上輸出了如下幾行內(nèi)容

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"等相對(duì)uri被映射到了一些系統(tǒng)自動(dòng)創(chuàng)建的Bean的成員方法上。

幾個(gè)實(shí)驗(yàn)

我們懷著好奇的心情調(diào)用了一個(gè)接口。

調(diào)用接口

curl 127.0.0.1:8080/health

返回結(jié)果

{"status":"UP"}

我們猜測(cè)這個(gè)應(yīng)該是表示應(yīng)用程序正在正常運(yùn)行。我們緊接著又調(diào)用了第二個(gè)接口。

調(diào)用接口

curl 127.0.0.1:8080/info

返回結(jié)果

{}

似乎什么都沒(méi)發(fā)生,沒(méi)關(guān)系,我們繼續(xù)進(jìn)行。

調(diào)用接口

curl 127.0.0.1:8080/configprops

返回結(jié)果

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

英語(yǔ)過(guò)四級(jí)的朋友們已經(jīng)猜到發(fā)生了什么了,我們沒(méi)有被授權(quán)查看這個(gè)資源。我們繼續(xù)試了上文列舉的若干接口,發(fā)現(xiàn)大部分返回結(jié)果都是未授權(quán)。

知識(shí)點(diǎn)講解 如何訪問(wèn)未授權(quán)接口

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

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

要將configprops配置成無(wú)需授權(quán),只需在application.properties(要放到運(yùn)行時(shí)的classpath下)文件中添加

endpoints.configprops.sensitive=false

之后再調(diào)用

curl 127.0.0.1:8080/configprops

就可以看到系統(tǒng)的各種配置屬性信息了。

info接口怎么用

info如果開(kāi)發(fā)者想讓?xiě)?yīng)用程序提供一寫(xiě)元數(shù)據(jù)查詢功能,就可以使用info接口。
舉例:
在application.properties文件中配置如下信息

info.project.name=SpringBoot-Demo

之后調(diào)用

curl 127.0.0.1:8080/info

結(jié)果變成了

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

我們可以發(fā)現(xiàn),通過(guò)info接口可以直接查詢第一段為info的配置信息。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/67957.html

相關(guān)文章

  • SpringBoot-Admin的使用

    摘要:端項(xiàng)目依賴添加是為了使應(yīng)用處于啟動(dòng)狀態(tài),會(huì)自動(dòng)添加相關(guān)依賴。接下來(lái)以作為服務(wù)發(fā)現(xiàn)的示例來(lái)進(jìn)行演示,實(shí)際上也可以使用或者。最后是一個(gè)用方式監(jiān)聽(tīng)的使用連接端 【前情提要】Spring Boot Actuator 提供了對(duì)單個(gè) Spring Boot 應(yīng)用的監(jiān)控,信息包含應(yīng)用狀態(tài)、內(nèi)存、線程、堆棧等,比較全面的監(jiān)控了 Spring Boot 應(yīng)用的整個(gè)生命周期。但是這樣監(jiān)控也有一些問(wèn)題:第一...

    vslam 評(píng)論0 收藏0
  • Spring Boot應(yīng)用監(jiān)控實(shí)戰(zhàn)

    摘要:概述之前講過(guò)容器的可視化監(jiān)控,即監(jiān)控容器的運(yùn)行情況,包括使用率內(nèi)存占用網(wǎng)絡(luò)狀況以及磁盤(pán)空間等等一系列信息。實(shí)戰(zhàn)一下中添加依賴啟動(dòng)應(yīng)用程序之后,只要在瀏覽器中輸入端點(diǎn)信息就能獲得應(yīng)用的一些狀態(tài)信息。 showImg(https://segmentfault.com/img/remote/1460000014684947); 概述 之前講過(guò)Docker容器的可視化監(jiān)控,即監(jiān)控容器的運(yùn)行情...

    mtunique 評(píng)論0 收藏0
  • SpringBoot 入門(mén)簡(jiǎn)介

    摘要:這里使用的是數(shù)據(jù)庫(kù)啟動(dòng)類上加上注解在啟動(dòng)類中添加對(duì)包掃描掃描多個(gè)包下的可以有以下幾種方法掃描會(huì)自動(dòng)加載相關(guān)配置,數(shù)據(jù)源就會(huì)自動(dòng)注入到中,會(huì)自動(dòng)注入到中,可以直接使用。有配置文件下的使用掃描多個(gè)包下的可以有以下幾種方法掃描 Spring-Boot 學(xué)習(xí)筆記 1 Spring-Boot 介紹 1.1 什么是Spring-Boot Spring-Boot是由Pivotal團(tuán)隊(duì)提供的全新框架...

    chuyao 評(píng)論0 收藏0
  • 如何優(yōu)雅關(guān)閉 Spring Boot 應(yīng)用

    摘要:除了,還有十余種,有的是特定操作,比如轉(zhuǎn)儲(chǔ)內(nèi)存日志有的是信息展示,比如顯示應(yīng)用健康狀態(tài)。 showImg(http://ww1.sinaimg.cn/large/006tNc79gy1g5qb2coyfoj30u00k0tan.jpg); 前言 隨著線上應(yīng)用逐步采用 SpringBoot 構(gòu)建,SpringBoot應(yīng)用實(shí)例越來(lái)多,當(dāng)線上某個(gè)應(yīng)用需要升級(jí)部署時(shí),常常簡(jiǎn)單粗暴地使用 kil...

    xiyang 評(píng)論0 收藏0
  • 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開(kāi)發(fā) 》

    摘要:下一代服務(wù)端開(kāi)發(fā)下一代服務(wù)端開(kāi)發(fā)第部門(mén)快速開(kāi)始第章快速開(kāi)始環(huán)境準(zhǔn)備,,快速上手實(shí)現(xiàn)一個(gè)第章企業(yè)級(jí)服務(wù)開(kāi)發(fā)從到語(yǔ)言的缺點(diǎn)發(fā)展歷程的缺點(diǎn)為什么是產(chǎn)生的背景解決了哪些問(wèn)題為什么是的發(fā)展歷程容器的配置地獄是什么從到下一代企業(yè)級(jí)服務(wù)開(kāi)發(fā)在移動(dòng)開(kāi)發(fā)領(lǐng)域 《 Kotlin + Spring Boot : 下一代 Java 服務(wù)端開(kāi)發(fā) 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<