Prometheus監控

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資源
    • prometheus.io/probe
  • 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

  • 修改默認帳號admin:admin
  • 安裝餅圖插件
grafana-cli plugins install grafana-piechart-panel

AlertMagager

相關文章
相關標籤/搜索