1.Prometheus 是什么
Prometheus(普羅米修斯)是一個最初在SoundCloud上構建的監控系統。自2012年成為社區開源項目,擁 有非常活躍的開發人員和用戶社區。為強調開源及獨立維護,Prometheus於2016年加入雲原生雲計算基金會 (CNCF),成為繼Kubernetes之后的第二個托管項目。
官方鏈接:https://prometheus.io/ 托管git地址: https://github.com/prometheus
2.Prometheus組成及架構
- 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
5.K8S監控指標
Kubernetes本身監控
- Node資源利用率
- Node數量 • Pods數量(Node)
- 資源對象狀態
Pod監控
- Pod數量(項目)
- Pod狀態
- 容器資源利用率
- 應用程序
監控指標 |
具體實現 | 舉例 |
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
部署node-exporter
📎node-exporter-service.yaml📎node-exporter-ds.yml
瀏覽器 訪問 nodeIp:30090
部署grafana
注意:為了數據的正常采集 務必保證集群間的時間同步
使用 node1-ip:30007 訪問grafana
默認登錄賬號密碼:admin/admin
登錄后要求更新密碼
展示監控數據 以下步驟,install grafana--》add data source---》new dashboard --》add users---》exporter plugin repository
step1:install grafana 已經完成。
step2:add data source
url 設置為 http://service_name:service_port,其他都默認然后保存
step 3:
推薦模板:
- 集群資源監控:3119
- 資源對象狀態監控 :6417
- 工作節點監控 :8919
部署 kube-mertric-state
📎kube-state-metrics-rbac.yaml📎kube-state-metrics-service.yaml📎kube-state-metrics-deployment.yaml
集群資源監控:3119
資源對象狀態監控 :6417
工作節點監控
使用自定義json :📎K8S工作節點監控-20191219.json
上傳完json之后import
7.在K8S中部署Alertmanager
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 中定義了 發件箱和 收件箱的信息,需要自定義設置一下
測試告警
修改 prometheus-rules.yaml 定義的磁盤使用率告警規則
將node節點根分區 使用默認大於80%告警 改為 大於40%
手動check 下 node1 和node 2 的 根分區使用率
node1 47%
node2 36%
重新應用配置
kubectl apply -f prometheus-rules.yaml
重建應用prometheus
kubectl delete pod prometheus-0 -n kube-system
打開 俺的 qq郵箱於是乎 收到了 磁盤告警的郵件。
8.Prometheus告警狀態
- Inactive:這里什么都沒有發生。
- Pending:已觸發閾值,但未滿足告警持續時間
- Firing:已觸發閾值且滿足告警持續時間。警報發送給接受者。
9.Prometheus告警收斂
分組(group):將類似性質的警報分類為單個通知
抑制(Inhibition):當警報發出后,停止重復發送由此警報引發的其他警報
靜默(Silences):是一種簡單的特定時間靜音提醒的機制
10.Prometheus一條告警怎么觸發的?