prometheus監控k8s


1.Prometheus 是什么

Prometheus(普羅米修斯)是一個最初在SoundCloud上構建的監控系統。自2012年成為社區開源項目,擁 有非常活躍的開發人員和用戶社區。為強調開源及獨立維護,Prometheus於2016年加入雲原生雲計算基金會 (CNCF),成為繼Kubernetes之后的第二個托管項目。

 

官方鏈接:https://prometheus.io/                 托管git地址:  https://github.com/prometheus

 

2.Prometheus組成及架構

image.png

 

  • Prometheus Server:收集指標和存儲時間序列數據,並提供查詢接口
  • ClientLibrary:客戶端庫
  • Push Gateway:短期存儲指標數據。主要用於臨時性的任務
  • Exporters:采集已有的第三方服務監控指標並暴露metrics
  • Alertmanager:告警
  • Web UI:簡單的Web控制台,展示功能較弱一般用來調試監控函數PromSQL,一般用grafana替代展示
  • TSDB:時序數據庫,用來存儲監控數據。

3.數據模型

Prometheus將所有數據存儲為時間序列;具有相同度量名稱以及標簽屬於同一個指標。

每個時間序列都由度量標准名稱和一組鍵值對(也成為標簽)唯一標識。

時間序列格式:

<metric_name>{<lable_name>=<lable_value>, ...}

示例:api_http_requests_total{method="POST", handler="/messages"}

 

4.作業和示例

實例:可以抓取的目標稱為實例(Instances)

作業:具有相同目標的實例集合稱為作業(Job)

 

scrape_configs:  - job_name: 'prometheus'  static_configs:  - targets: ['localhost:9090']  - job_name: 'node'  static_configs:  - targets: ['192.168.1.10:9090']

5.K8S監控指標

Kubernetes本身監控

  • Node資源利用率 
  • Node數量 • Pods數量(Node)
  • 資源對象狀態

Pod監控

  • Pod數量(項目)
  • Pod狀態
  • 容器資源利用率
  • 應用程序

image.png

 

監控指標

具體實現 舉例
Pod性能 cAdvisor 容器CPU,內存利用率
Node性能 node-exporter 節點CPU,內存利用率
K8S資源對象 kube-state-metrics

Pod/Deployment/Service

服務發現: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config

 

6.在K8S中部署Prometheus+Grafana

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus

https://grafana.com/grafana/download

mkdir prometheus && cd prometheus

部署Prometheus

📎prometheus-service.yaml📎prometheus-statefulset.yaml📎prometheus-configmap.yaml📎prometheus-rbac.yaml

📎prometheus-rules.yaml

部署node-exporter

📎node-exporter-service.yaml📎node-exporter-ds.yml

 

image.png

瀏覽器 訪問 nodeIp:30090

image.png

image.png

部署grafana

注意:為了數據的正常采集 務必保證集群間的時間同步

📎grafana.yaml

image.png

 

使用 node1-ip:30007 訪問grafana

默認登錄賬號密碼:admin/admin

登錄后要求更新密碼

 

展示監控數據 以下步驟,install grafana--》add data source---》new dashboard --》add users---》exporter plugin repository

image.png

step1:install grafana 已經完成。

step2:add data source

image.png

url 設置為 http://service_name:service_port,其他都默認然后保存

image.png

image.png

step 3:

推薦模板:

  • 集群資源監控:3119 
  • 資源對象狀態監控 :6417
  • 工作節點監控 :8919

部署 kube-mertric-state

📎kube-state-metrics-rbac.yaml📎kube-state-metrics-service.yaml📎kube-state-metrics-deployment.yaml

 

image.png

image.png

image.png

集群資源監控:3119 

image.png

image.png

image.png

資源對象狀態監控 :6417

image.png

image.png

image.png

image.png

 

工作節點監控

使用自定義json   :📎K8S工作節點監控-20191219.json

image.png

上傳完json之后import

image.png

image.png

 

7.在K8S中部署Alertmanager

image.png

1. 部署Alertmanager

2. 配置Prometheus與Alertmanager通信

3. 配置告警

  • prometheus指定rules目錄
  • configmap存儲告警規則
  • configmap掛載到容器rules目錄
  • 增加alertmanager告警配置

📎alertmanager-pvc.yaml📎alertmanager-service.yaml📎alertmanager-configmap.yaml📎alertmanager-deployment.yaml

其中alertmanager-configmap.yaml 中定義了 發件箱和 收件箱的信息,需要自定義設置一下

image.png

測試告警

修改 prometheus-rules.yaml 定義的磁盤使用率告警規則

image.png

將node節點根分區 使用默認大於80%告警 改為 大於40%

手動check 下 node1 和node 2 的 根分區使用率

node1  47%

image.png

node2  36%

image.png

重新應用配置

kubectl apply -f prometheus-rules.yaml

重建應用prometheus

kubectl delete pod prometheus-0 -n kube-system

 

image.png

打開 俺的 qq郵箱於是乎 收到了 磁盤告警的郵件。

image.png

 

8.Prometheus告警狀態

  • Inactive:這里什么都沒有發生。
  • Pending:已觸發閾值,但未滿足告警持續時間
  • Firing:已觸發閾值且滿足告警持續時間。警報發送給接受者。

image.png

 

9.Prometheus告警收斂

分組(group):將類似性質的警報分類為單個通知

抑制(Inhibition):當警報發出后,停止重復發送由此警報引發的其他警報

靜默(Silences):是一種簡單的特定時間靜音提醒的機制

 

10.Prometheus一條告警怎么觸發的?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM