如何保障系統穩定?Prometheus+Grafana系統監控搭建實戰

如何保障系統穩定?Grafana+Prometheus監控系統搭建

一個好的管理系統可以爲服務的高可用、高併發提供重要的保障。以下我們將爲大家介紹如何通過一套完備的監控系統,幫助我們快速解決問題,保障系統服務的穩定運行:
一、影響系統穩定性的常見問題及排查方案:
• 網絡超時
這種情況有兩種方式可以進行排查。
方式一:
查看反饋的那段時間內外部網絡情況,比如查看運營商網絡的PING監控和出口網絡流量情況,確認是否出現網絡抖動的情況;
繼續查看Nginx網關監控的請求耗時情況與 access log 日誌,確認服務接口是否存在不穩定的情況;
最後查看內部服務執行情況、服務的請求量、線程池隊列大小以及是否存在慢日誌,確定網絡超時是否由業務請求量過大或者服務不夠穩定造成的;
方式二:
通過網絡抓包,分析抓包文件來排查網絡超時原因。具體操作大家可以自行搜索wireshark教程。
• 業務請求失敗
這種情況基本上是由客戶觸發了系統異常的業務邏輯所導致的,具體原因我們可以在日誌監控系統中查看。在一定時間內推送系統中某個異常出現次數超過閾值,會觸發日誌監控系統的告警機制,系統會自動通知其開發人員去查看具體原因,並聯系客戶告知異常原因和解決方案。比如客戶的出口IP發生變化,沒有在我們開發者中心及時更新IP白名單,會導致客戶的請求被系統攔截,返回請求失敗結果。
• 消息下發延遲
這種情況的出現存在多種原因,一般情況下,我們排查的思路是首先通過查看全鏈路監控中哪個服務的耗時特別嚴重,再通過主機監控推送系統查看這個服務所在主機的CPU使用率是否過高,以此判斷是否是某個線程異常引起的。接着,我們查看磁盤讀寫性能是否過低,是否存在主機內存剩餘過低或者磁盤損壞的情況。最後,我們查看服務的old區監控,是否存在頻繁的垃圾回收現象,以及是否存在服務內存溢出或服務線程異常情況,結合服務的dump和jstack文件,進一步分析排查具體的原因。
除了上述提到的內部系統監控,我們也會在第三方機房的環境下模擬客戶行爲,主動調用消息推送API接口,根據返回的結果,來監控推送系統的運行情況是否正常。當出現服務異常反饋時,我們會在第一時間告警並快速響應和處理,確保客戶的業務不受影響。
由此可見,監控系統在保障推送系統的高併發和高可用中發揮了重要的作用。想要了解更多關於監控系統搭建的同學可以看下文的介紹,我們通過開源組件Prometheus、Grafana和docker容器,教大家快速搭建一套完善的監控系統。

二、落地方案
關於監控相關數據,這裏以JMX的Metrics數據展示作爲demo樣例:

  1. 通過JMX Exporter第三方jar,demo以agent運行方式對外展示數據,方便Prometheus採集數據;
  2. 開源系統Prometheus採集並存儲數據;
  3. 開源系統Grafana,以圖表形式展現相關性能指標;

三、落地步驟
• 啓動程序
java -javaagent:./jmx_prometheus_javaagent-0.12.0.jar=8085:config.yaml -jar demo.jar
• 運行Prometheus
1、配置prom-jmx.yml
scrape_configs:

• 運行Grafana
1、配置grafana.ini(以郵件告警爲例)
[smtp]
enabled = true
host = smtp.gmail.com:587
user = [email protected]
password = <郵箱密碼>
skip_verify = true
from_address = [email protected]
from_name = Grafana
2、運行容器
docker run -d --name=grafana -p 3000:3000 
-v $PWD/grafana.ini:/etc/grafana/grafana.ini 
grafana/grafana
瀏覽器輸入:http://localhost:3000,用戶名和密碼初始均爲admin
瀏覽器輸入:http://localhost:3000/alerting/notification/new,驗證郵件告警配置是否正確
3、配置數據源
瀏覽器輸入:http://localhost:3000/datasources
a. 點擊添加數據源按鈕;
b. 選擇Prometheus作爲數據源;
c. 編輯數據源
- 修改數據源名字

四、效果展示
上述步驟完成後,我們就可以在Grafana中查看相關監控信息,效果如下:

五、總結
以上我們介紹瞭如何通過開源組件和docker容器,快速搭建一套完善的監控系統的方法。監控系統不僅需要監控我們所關注的服務性能指標,還需要自主監控系統的各種異常日誌、慢日誌等。多個維度的系統監控,可以爲發現、定位、解決、總結問題等提供幫助,爲後續服務的性能優化、縮擴容以及維持系統的穩定等提供重要依據。
針對重要的監控項,我們需要添加告警信息。監控的指標設置可以包含多方面,但選擇需要告警的監控項時則要謹慎,應保證設置的閾值合理。

重點監控項總結:
結合我們平時系統服務的維護情況,我們將需要重點關注的監控項總結如下:
1、網絡環境:運營商網絡、主機網卡的traffic、Nginx網關總請求耗時、Nginx後端請求耗時;
2、主機性能:CPU使用率、Load最近1分鐘情況、內存使用率、內存剩餘容量、磁盤使用量和剩餘比例、磁盤IO速率;
3、服務性能:業務相關的QPS與TPS、線程空閒比例、線程隊列大小、old區GC情況。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章