1. 程式人生 > >k8s與監控--從kubernetes監控談prometheus的federation機制

k8s與監控--從kubernetes監控談prometheus的federation機制

前言

有時候對於一個公司,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。