k8s與監控--從kubernetes監控談prometheus的federation機制
阿新 • • 發佈:2019-02-19
前言
有時候對於一個公司,k8s叢集或是所謂的caas只是整個技術體系的一部分,往往這個時候監控系統不僅僅要k8s叢集以及k8s中部署的應用,而且要監控傳統部署的專案。也就是說整個監控系統不是部署在k8s cluster中。非in-cluster的prometheus怎麼監控k8s是今天需要討論的問題。
在上一篇文章解讀了prometheus提供的監控k8s的配置檔案,我們知道主要是採集node,cadvisor,service,endpoint,ingress和pod 6個方面。叢集外部署,我們通過更改配置檔案,
kubernetes_sd_configs:
- role: node
api_server: https://10.xx.xx.231:6443
bearer_token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt14dmTJfPP5XNYiwPBW-ffe84w1zA0PaIUISUXGWUr5Ak9dFkJz4-ho0pPRKuPj-KZ8C4APt4NVKFXnO3WisR63ShCYqYYrOAjerCZIfrokMdvhPG1S6Dw_swWtYTSbBVXMeyHrC9OqvXz3jdi4vnKYJgA
tls_config:
insecure_skip_verify: true
也能利用prometheus的service discovery功能監控一些指標,比如node,cadvisor,但是其他的無法全部獲取metrics了,因為自動發現了一些k8s中service網路層的地址,這個是從外部無法訪問的。我們的解決方案是prometheus的federation模式來解決該問題。
Prometheus的Federation簡介
聯邦允許一個prometheus server 從另外一個prometheus server 獲取metrics。
官方給出的配置:
- job_name: 'federate'
scrape_interval: 15s
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="prometheus"}'
- '{__name__=~"job:.*"}'
static_configs:
- targets:
- 'source-prometheus-1:9090'
- 'source-prometheus-2:9090'
- 'source-prometheus-3:9090'
聯邦機制也實現了promethues的擴充套件。大致上縱向和橫向兩種思路。
由此出發,就能形成一種樹狀的prometheus叢集,實現了高可用和分片。我們的叢集外prometheus監控k8s的方案就基於此。
通過Federation監控k8s
採取上一篇文章的配置檔案,在k8s叢集中部署一個prometheus server,叢集外的prometheus server 定期獲取叢集中prometheus的資料。
然後通過設定match即可
'match[]':
- '{job="prometheus"}'
- '{__name__=~"job:.*"}'
總結
此外聯邦模式可以實現prometheus監控prometheus。遵循以下兩點:
- 網格模式。在同一個資料中心,每個prometheus監控其他的prometheus。
- 上下級模式。上一級的prometheus監控資料中心級別的prometheus。