最近在弄關於運行中的服務的Jvm監控,經過同事和自己搜索發現目前主要有兩種方案,普羅米修斯和 Spring Boot Admin,由於我們的系統是基於 Spring Cloud 的,所有可能搜索的都與 Spring Cloud 比較容易整合的。
Spring Boot Admin 是比較容易接入的,只要將加上 Spring Boot Admin 依賴簡單配置一下,然後註冊到 Spring Boot 的註冊中心,並且其他應用都是對外有提供監控指標的話,進入 Spring Boot Admin 即可,看到每個應用的 Jvm 和一些配置信息,還可以線上設置每個類的日誌打印級別。不過要注意一下,如果數據庫和 redis 等連接不通的話,可能會打印出大量錯誤日誌,郵件也會被檢測到是否能鏈接通,不過郵件這裏的檢測好像是有問題(我自己能發送郵件,但是 其檢測還是鏈接不同,原因還在找中),最好是禁用掉郵件的檢測。具體要監控的配置 Spring Boot 應用可以參考後面的配置例子。
普羅米修斯 功能也差不多,不過功能會更加強大一些,目前我也還沒接入,待接入後,再來補充,目前瞭解到其除了可以監控Jvm狀態,可以監控每個url的請求時間跟鏈路監控類似。
配置郵件監控(翻譯官方文檔)
其實這個是比較簡單,主要是裏面有些坑主要注意。
- 添加 Spring Boot 的
mail
依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- 配置發送郵件的賬號和密碼,和接受的通知的郵箱
spring:
mail:
host: smtp.qq.com
username: [email protected]
password: 123456
properties:
mail:
smtp:
auth: true
boot:
admin:
notify:
mail:
to: ["[email protected]"]
from: [email protected] # 這個必須要配置,並且和 Spring.mail.username的一樣,否則會報錯,因爲其源碼默認使用的 Spring Boot Admin <noreply@localhost>
注意事項
- Spring Boot Admin 在配置郵件的時候,要注意配置的發件人和spring.mail.user的是一樣的,否則可能 報
553 mailException
。
附錄
要監控的 Spring Boot 應用的對外暴露監控配置(供參考):
management:
health:
db:
enabled: false
mail:
enabled: false # 這個最好必須配置,否則如果有Spring Boot Admin 不斷檢測的話,可能導致郵件不能發送成功
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
Spring Boot Admin 的配置參考(供參考):
spring:
security:
user:
name: 123456
password: 123456
mail:
host: smtp.qq.com
username: [email protected]
password: 123456
default-encoding: UTF-8
properties:
mail:
smtp:
connectiontimeout: 600000
timeout: 600000
writetimeout: 600000
auth: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
port: 25
boot:
admin:
notify:
mail:
to: ["[email protected]"]
from: [email protected] # 這個必須要配置,並且和 Spring.mail.username的一樣
參考
- https://blog.csdn.net/qq_20597149/article/details/78463538
- https://codecentric.github.io/spring-boot-admin/current/#mail-notifications 官方說明如何配置Spring Boot Admin 的郵件監控。 Spring Boot Admin 的版本爲:2.1.6