Prometheus是基於時間序列數據庫的開源監控告警方案,採用主動拉取模式進行數據採樣,並提供強大的查詢語法。CNCF基金會第二成員,亦是K8S中的主流監控方案。node
架構

優勢
- 外部依賴少,性能優秀,部署方便
- 完善的數據模型,豐富的插件集成
- 提供強大的查詢語言
模塊構成
- Server:核心服務模塊,採樣並存儲時間序列數據(默認管理面板端口9090)
- Retrieval 採樣模塊
- Storage 存儲模塊
- PromQL 查詢模塊
- PushGateway(可選組件):數據網關代理模塊,採樣數據臨時存儲,與server通訊
- Export:數據導出模塊,導出服務監控數據。
- Alertmanager:告警模塊。接受prometheus上出發alertrules的告警,合併去重聚合處理,併發送出去(支持企業微信,郵箱,釘釘,webhook等等)
- Grafna:比Prometheus原生UI更強大的可視化界面(相似於Kibana的可視化分析平臺),更專一於服務器及應用性能的分析,如CPU、內存、流量等等的圖表分析
時間序列
- 若干標籤關聯下的指標採樣值,隨着時間維度的推動,構成一條時間序列
- 命名規範:應用名稱 _ 監測對像 _ 數值類型 _ 單位,好比http_request_total
- 全部指標值採用float64類型存儲
圖表類型
- Counter:計數值,只增不減
- Gauge:常規數值,可增可見
- Histogram:直方圖
- xxx_bucker{le="上邊界"}:時間序列分桶聚合
- xxx_sum:值累計
- xxx_count:次數累計
- Summery:相似於Histogram,支持quantiles(即按百分比取採樣值)
- xxx{quantile="邊界"}:
- xxx_sum:值累計
- xxx_count:次數累計
Exporter
經常使用Exporter
- cAdvisor:K8S默認全部主機部署cAdvisor(高版本再也不默認),用於提供容器相關的性能指標數據
- node_exporter:主機層次的指標數據,cpu、內存、磁盤等
- nginx_exporter:nginx指標輸出
自動監控
已實現採樣接口邏輯的資源,可經過annotation標籤自動將其加入監控nginx
- Pod資源
- prometheus.io/scrape=true
- prometheus.io/path=/metric
- prometheus.io/port=8080
- Service資源
- Endpoint資源
- prometheus.io/scrape
- prometheus.io/path
- prometheus.io/port
配置
主配置
global: #服務端全局配置
scrape_interval: 10s #採集週期
scrape_timeout: 10s
evaluation_interval: 10s #rule計算週期
rule_files: #報警規則設置
- "/etc/prometheus-rules/*.rules"
scrape_configs: #監控資源配置
- job_name: 'prometheus' #server自身監控
static_configs:
- targets: ['localhost:9090'] #默認採集路徑是/metrics上開放的端口服務
- job_name: node #主機資源監控
static_configs:
- targets: ['localhost:9100']
- job_name: 'kubernetes-node-exporter'
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:10255'
target_label: __address__
關於relabel_configs配置git
- 用於在目標被採集以前重寫其標籤集合
- 目標採集前自動追加的標籤
- job:值爲job_name
- _ address _:採集目標的主機端口地址
- relabel期間額外提供了__meta_前綴的標籤(服務發現機制提供的標籤)
- relabel操做結束後自動追加的標籤
- instance:設置爲__address__標籤值(若是relabel期間未配置)
- _ scheme _:採集請求的協議
- _ metrics_path _:採集請求的路徑
- _ param< name >:設置爲採集請求url參數中的name字段值
- relabel操做結束後__前綴的標籤被自動清除
標籤操做github
- replace:針對source_labels正則匹配,賦值target_label爲replacement值(正則匹配失敗則不操做)
- keep:丟棄source_labels正則不匹配的採集目標
- drop:丟棄source_labels正則匹配的採集目標
- labelmap:映射正則匹配標籤的值到replacement指定的標籤上
- labeldrop:剔除掉正則匹配的標籤
- labelkeep:僅保留正則匹配的標籤
相關配置字段web
- action:指定標籤操做類型(默認replace)
- separator:配置分隔符(默認爲;)
- source_labels:指定源標籤(可多個標籤經過分隔符級聯)
- target_label:指定目標標籤用於結果存儲
- regex:指定正則(針對source_labels去匹配,默認爲
(.*)
)
- replacement:replace操做中替換掉正則匹配的部分(默認爲$1)
告警配置
groups:
- name: test-rule
rules:
- alert: KubeCPUOvercommit
expr: sum(kube_resourcequota{job="kube-state-metrics",resource="requests.cpu",type="hard"})
/ sum(node:node_num_cpu:sum) > 1.5
for: 5m
labels:
severity: warning
annotations:
message: Overcommited CPU resource request quota on Namespaces.
查詢語言
http_requests_total{method=」POST」, code="200"} #標籤過濾
count(http_requests_total) #時間序列統計
rate(http_requests_total[1m]) #最近一分鐘每秒請求量
安裝
服務編排方案 採用開源方案:https://github.com/giantswarm/kubernetes-prometheus
數據庫
針對國內具體場景作了調整:https://github.com/maifusha/kubernetes-prometheus
(feature/optimize分支)服務器
- 調整監控儀表盤
- 增長了企業微信通知的支持
- 升級部分服務組件版本,修復
Bug
- 修改各組件服務開放模式爲
ClusterIP
- 各服務組件數據持久化調整至宿主機
/data
目錄
- 其餘等等
Helm編排方案微信
- 變動配置不方便,尤爲是Prometheus系統棧配置較多
- 適合於快速啓動的測試
功能使用
Prometheus
- status->targets:反映監控目標的數據採集健康狀態
- 配置重載: 請求
/-/reload
接口
Grafana
grafana-cli plugins install grafana-piechart-panel
AlertMagager