发布时间: 2024-11-21 文章作者: myluzh 分类名称: Kubernetes 朗读文章
# 黑盒监控自定义地址 - job_name: 'blackbox_http' metrics_path: /probe # 指定用于探测的 HTTP 路径 params: module: [http_2xx] # 指定模块,配置在 Blackbox Exporter 的配置文件中 static_configs: - targets: # 定义需要监控的目标地址 - https://www.baidu.com relabel_configs: - source_labels: [__address__] # 使用默认的目标地址 target_label: __param_target # 将目标地址设置为 `target` 参数,供 Blackbox Exporter 使用 - source_labels: [__param_target] # 从参数中提取目标地址 target_label: instance # 将目标地址映射为 `instance` 标签,便于 Prometheus 显示 - target_label: __address__ # 指定 Blackbox Exporter 的实际服务地址 replacement: blackbox-exporter:19115 # 替换目标地址为 Blackbox Exporter 服务地址 - source_labels: [instance] # 目标地址保存在 `instance` 标签中 target_label: target # 将目标地址映射为 `target` 标签,供 Blackbox Exporter 配置使用 # 监控Blackbox Exporter自身 - job_name: 'blackbox_exporter' static_configs: - targets: ['blackbox-exporter:19115'] # 定义Blackbox Exporter自身的监控目标 # ingress自动发现 - job_name: 'kubernetes_ingress' metrics_path: /probe params: module: [http_2xx] kubernetes_sd_configs: - role: ingress # 从 Kubernetes 集群中获取 Ingress 资源 relabel_configs: # 仅保留 dev-test 命名空间的 Ingress - source_labels: [__meta_kubernetes_namespace] regex: dev-test # 匹配 dev-test 命名空间 action: keep # 仅保留匹配的资源 # 设置 Blackbox Exporter 的地址 - target_label: __address__ replacement: blackbox-exporter:19115 # 使用 Blackbox Exporter 的服务地址 # 构建 _param_target 标签,用于 Blackbox Exporter - source_labels: [__meta_kubernetes_ingress_scheme, __meta_kubernetes_ingress_host, __meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) # 提取协议、地址和路径 replacement: ${1}://${2}${3} # 生成完整的 URL target_label: __param_target # 将完整 URL 保存为 `_param_target` # 设置 target 标签,保留完整的 URL - source_labels: [__meta_kubernetes_ingress_scheme, __meta_kubernetes_ingress_host, __meta_kubernetes_ingress_path] regex: (.+);(.+);(.+) # 提取协议、地址和路径 replacement: ${1}://${2}${3} # 生成完整的 URL target_label: target # 将完整 URL 保存为 `target` # 将 _param_target 转为 instance 标签 - source_labels: [_param_target] target_label: instance # 将目标地址映射为 `instance` 标签 # 映射所有 Kubernetes Ingress 的标签 - action: labelmap regex: __meta_kubernetes_ingress_label_(.+) # 提取所有以 `__meta_kubernetes_ingress_label_` 开头的标签 # 添加命名空间和 Ingress 名称标签 - source_labels: [__meta_kubernetes_namespace] target_label: kubernetes_namespace # 添加 `kubernetes_namespace` 标签 - source_labels: [__meta_kubernetes_ingress_name] target_label: kubernetes_name # 添加 `kubernetes_name` 标签0x02 给prometheus访问ingress资源的权限
Failed to watch *v1beta1.Ingress: failed to list *v1beta1.Ingress: ingresses.networking.k8s.io is forbidden: User "system:serviceaccount:monitoring:prometheus-k8s" cannot list resource "ingresses" in API group "networking.k8s.io" at the cluster scope可以看到,Prometheus 的 system:serviceaccount:monitoring:prometheus-k8s 服务账户缺少对 Kubernetes API 中 ingresses 资源的访问权限。因此,Prometheus 无法列出或监控这些 Ingress 资源。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-ingress-reader rules: - apiGroups: ["networking.k8s.io"] resources: ["ingresses"] verbs: ["get", "list", "watch"]2、创建 ClusterRoleBinding: 将刚才创建的 ClusterRole 绑定到 Prometheus 的服务账户。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: # 绑定名称可以设置为 prometheus-ingress-reader-binding name: prometheus-ingress-reader-binding subjects: - kind: ServiceAccount name: prometheus-k8s namespace: monitoring # 确保与 Prometheus 安装的命名空间一致 roleRef: kind: ClusterRole name: prometheus-ingress-reader apiGroup: rbac.authorization.k8s.io3、应用
kubectl apply -f prometheus-ingress-role.yaml kubectl apply -f prometheus-ingress-role-binding.yaml
标签: k8s Ingress rbac 黑盒监控 自动发现 权限 prometheu
发表评论