您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何清理SpringBoot應用無用的metrics指標,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
上周有個網友問springboot程序的metrics越來越多了,有40W的指標,現在想清除一些沒用的metrics,要怎樣做呢?!
當時我看到這個問題覺得挺有意思,因為我的線上程序也有動態metrics,只不過指標沒有達到那么大的量,所以我研究了一下這個問題可以怎么樣處理.
動態創建metrics是直接用的io.micrometer.core.instrument.MeterRegistry
對象,例如:registry.gauge(name,tags,valueObject)
.就可以將一個name的gauge類型的metrics添加到registry里面了,收集metrics時就可以看到這個新增的metrics了.
于是看看這個對象還有什么刪除相關的方法:
首先嘗試的時delete
方法,發現沒有類似的方法:
然后試試remove
,可以發現有兩個remove方法可以用,分別傳入ID對象
和metrics對象
,但如果需要
全部清理呢?有沒有類似List的clear方法呢?
再試試clear
方法,發現是有這個方法的,并且我先測試了一遍,看看clear
方法是否能夠達到預期(清除metrics).
于是我一頓操作:
寫一個API接口,接口內容是執行meterRegistry.clear();
啟動springboot程序
瀏覽器看看/actuator/prometheus
接口返回的內容
調用清理metrics的接口,也就是第一步寫的接口
再次瀏覽器看看/actuator/prometheus
接口返回的內容
清理metrics前的接口內容:
清理了metrics后的接口內容:
可以看到調用接口后metrics清除了信息.
方法有效?, 可以給網友回復了.
網友說沒這個方法? 咋回事?!
點進clear源碼看了一下,方法說明描述得很清楚,1.2.0版本發布的方法,而網友用的版本低于1.2.0,因此沒有這個方法.
/**
* Clear all meters.
* @since 1.2.0
*/
@Incubating(since = "1.2.0")
public void clear() {
meterMap.keySet().forEach(this::remove);
}
當然可以!
metrics-registry-find-tags.png
可以看到每一個metrics的tag列表都可以拿得到,那就好辦了,通過標簽對比篩選出自己想要刪除的metrics,然后用remove
方法刪除就可以了.
當程序有動態新增metrics時就要考慮無用metrics清除的機制,如果metrics數量太多的話就會影響到業務應用.
上述內容就是如何清理SpringBoot應用無用的metrics指標,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。