kubernetesv1.16監控系列——kube-prometheus高級配置

前面章節我們一起學習瞭如何在kube-prometheus 下面自定義一個監控選項,以及自定義報警規則的使用。那麼我們還能夠直接使用前面課程中的自動發現功能嗎?如果在我們的 Kubernetes 集群中有了很多的 Service/Pod,那麼我們都需要一個一個的去建立一個對應的 ServiceMonitor 對象來進行監控嗎?這樣豈不是又變得麻煩起來了?

自動發現配置

為解決上面的問題,kube-prometheus 為我們提供了一個額外的抓取配置的來解決這個問題,我們可以通過添加額外的配置來進行服務發現進行自動監控。和前面自定義的方式一樣,我們想要在 Prometheus Operator 當中去自動發現並監控具有prometheus.io/scrape=true這個 annotations 的 Service,之前我們定義的 Prometheus 的配置如下:

<code>- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\\d+)?;(\\d+)
replacement: $1:$2
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: kubernetes_name/<code>

要想自動發現集群中的 Service,就需要我們在 Service 的annotation區域添加prometheus.io/scrape=true的聲明,將上面文件直接保存為 prometheus-additional.yaml,然後通過這個文件創建一個對應的 Secret 對象,因為之前章節有用到blackbox添加過,所以直接放在後面就可以了:

<code>kubectl apply -f prometheus-additional.yaml 
secret/additional-configs configured/<code>

Prometheus 的 Dashboard 中查看配置是否生效:

kubernetesv1.16監控系列——kube-prometheus高級配置

在 Prometheus Dashboard 的配置頁面下面我們可以看到已經有了對應的的配置信息了,但是我們切換到 targets 頁面下面卻並沒有發現對應的監控任務,查看 Prometheus 的 Pod 日誌:

<code>level=error ts=2020-02-26T11:08:11.652Z caller=klog.go:94 component=k8s_client_runtime func=ErrorDepth msg="/app/discovery/kubernetes/kubernetes.go:262: Failed to list *v1.Service: services is forbidden: User \"system:serviceaccount:monitoring:prometheus-k8s\" cannot list resource \"services\" in API group \"\" at the cluster scope"
level=error ts=2020-02-26T11:08:11.654Z caller=klog.go:94 component=k8s_client_runtime func=ErrorDepth msg="/app/discovery/kubernetes/kubernetes.go:261: Failed to list *v1.Endpoints: endpoints is forbidden: User \"system:serviceaccount:monitoring:prometheus-k8s\" cannot list resource \"endpoints\" in API group \"\" at the cluster scope"/<code>

可以看到有很多錯誤日誌出現,都是xxx is forbidden,這說明是 RBAC 權限的問題,通過 prometheus 資源對象的配置可以知道 Prometheus 綁定了一個名為 prometheus-k8s 的 ServiceAccount 對象,而這個對象綁定的是一個名為 prometheus-k8s 的 ClusterRole:(prometheus-clusterRole.yaml)

<code>kind: ClusterRole
metadata:
name: prometheus-k8s
rules:
- apiGroups:
- ""
resources:
- nodes/metrics
verbs:
- get
- nonResourceURLs:
- /metrics
verbs:
- get/<code>

上面的權限規則中我們可以看到明顯沒有對 Service 或者 Pod 的 list 權限,所以報錯了,要解決這個問題,我們只需要添加上需要的權限即可:

<code>apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus-k8s
rules:
- apiGroups:

- ""
resources:
- nodes
- services
- endpoints
- pods
- nodes/proxy
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- configmaps
- nodes/metrics
verbs:
- get
- nonResourceURLs:
- /metrics
verbs:
- get/<code>

更新上面的 ClusterRole 這個資源對象,然後重建下 Prometheus 的所有 Pod,正常就可以看到 targets 頁面下面有 kubernetes-service-endpoints 這個監控任務了:

kubernetesv1.16監控系列——kube-prometheus高級配置

我們這裡自動監控了兩個 Service,第一個就是我們之前創建的 Coredns的服務,我們在 Coredns Service 中有兩個特殊的 annotations:

<code>  annotations:
prometheus.io/port: "9153"
prometheus.io/scrape: "true"/<code>

所以被自動發現了,當然我們也可以用同樣的方式去配置 Pod、Ingress 這些資源對象的自動發現。


修改Prometheus的啟動參數

修改prometheus-prometheus.yaml添加以下內容

<code>  containers:
- name: prometheus
args:
- --web.console.templates=/etc/prometheus/consoles
- --web.console.libraries=/etc/prometheus/console_libraries
- --config.file=/etc/prometheus/config_out/prometheus.env.yaml
- --storage.tsdb.path=/prometheus
- --storage.tsdb.retention.time=48h
- --web.enable-lifecycle
- --storage.tsdb.no-lockfile
- --web.route-prefix=//<code>


分享到:


相關文章: