每日快讯!Prometheus-Operator使用ServiceMonitor监控配置时遇坑与解决总结
时间:2023-05-05 18:10:50来源:博客园
摘要

本文范围: Prometheus-Operator & kube-prometheus 安装;以及在解决使用ServiceMonitor时遇到的坑。


(资料图)

Prometheus Operator 简介

随着云原生概念盛行,对于容器、服务、节点以及集群的监控变得越来越重要。Prometheus 作为 Kubernetes 监控的事实标准,有着强大的功能和良好的生态。但是它不支持分布式,不支持数据导入、导出,不支持通过 API 修改监控目标和报警规则,所以在使用它时,通常需要写脚本和代码来简化操作。Prometheus Operator 为监控 Kubernetes service、deployment 和 Prometheus 实例的管理提供了简单的定义,简化在 Kubernetes 上部署、管理和运行 Prometheus 和 Alertmanager 集群。

Prometheus Operator 功能如下:

创建/销毁:在 Kubernetes namespace 中更加容易地启动一个 Prometheues 实例,一个特定应用程序或者团队可以更容易使用 Operator。便捷配置:通过 Kubernetes CRD资源配置 Prometheus 的基本信息,比如版本、(分布式)存储、副本集、高可用等。通过标签标记目标服务: 基于常见的 Kubernetes label 查询自动生成监控目标配置;不需要学习 Prometheus 特定的配置语言。

它使用如下的 Kubernetes CRD 资源对 Prometheus进行配置:

PrometheusAlertmanagerThanosRulerServiceMonitorPodMonitorProbePrometheusRuleAlertmanagerConfig参考文档:https://github.com/prometheus-operator/kube-prometheushttps://prometheus-operator.dev/docs/operator/design/kube-prometheus 包含的软件包:The Prometheus OperatorHighly available PrometheusHighly available AlertmanagerPrometheus node-exporterPrometheus Adapter for Kubernetes Metrics APIskube-state-metricsGrafanaPrometheus Operator 兼容性Kubernetes 1.16+ ,如需更低版本的 Kubernetes 兼容性,请参考官方文档对应的版本分支。

以下代码分支对应的 Kubernetes 版本如下:

release-0.91.21,1.22release-0.10 1.22,1.23release-0.11 1.23,1.24release-0.12 1.24,1.25文章中已验证的版本(PaaS 安装版本)本地集群(kind 1.25) release-0.12腾讯云集群(TKE 1.20) release-0.9kube-prometheus 安装卸载安装
git clone https://github.com/prometheus-operator/kube-prometheus.gitgit checkout release-0.12cd kube-prometheuskubectl apply --server-side -f manifests/setupkubectl wait \--for condition=Established \--all CustomResourceDefinition \--namespace=monitoringkubectl apply -f manifests/
卸载
kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup
helm安装
helm repo add prometheus-community https://prometheus-community.github.io/helm-chartshelm repo updatehelm install prometheus-community/kube-prometheus-stack --namespace monitoring --generate-name

无论哪种安装方式,遇到镜像拉取失败的情况,可以使用如下命令手动拉取镜像并推送到自己的仓库,本文中推送到自己的docker hub仓库中,替换yaml中的image地址,然后再次执行安装命令。

ServiceMonitor

ServiceMonitor 自定义资源(CRD)能够声明如何监控一组动态服务的定义。它使用标签选择定义一组需要被监控的服务。这样就允许组织引入如何暴露 metrics 的规定,只要符合这些规定新服务就会被发现列入监控,而不需要重新配置系统。一个 Service 可以公开一个或多个服务端口,通常情况下,这些端口由指向一个 Pod 的多个 Endpoints 支持。这也反映在各自的 Endpoints 对象中。ServiceMonitorSpec 的 endpoints 部分用于配置需要收集 metrics 的 Endpoints 的端口和其他参数。在一些用例中会直接监控不在服务 endpoints 中的 pods 的端口。

例子

之前写过一篇 《YoyoGo微服务框架入门系列-使用Prometheus监控Golang服务》 文章中的暴露的指标服务与本例中为同一个。有如下 Service 指向 labels: k8s-app=dev-yoyogodemo-kind-kind 的 部署(Deployment):

apiVersion: v1kind: Servicemetadata:  name: dev-yoyogodemo-kind-kind-svc-cluster-sgr  namespace: klns-administration  labels:    k8s-app: dev-yoyogodemo-kind-kindspec:  ports:    - name: default-tcp      protocol: TCP      port: 8080      targetPort: 8080  selector:    k8s-app: dev-yoyogodemo-kind-kind  type: ClusterIP  sessionAffinity: None

为其创建 ServiceMonitor 资源定义如下:

apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:  name: dev-yoyogodemo-kind-kind-servicemontor  namespace: klns-administration  labels:    k8s-app: dev-yoyogodemo-kind-kindspec:  endpoints:    - interval: 15s      path: /app/actuator/metrics      port: default-tcp  namespaceSelector:    matchNames:    - klns-administration  selector:    matchLabels:      k8s-app: dev-yoyogodemo-kind-kind
采坑

在默认配置中,此 ServiceMonitor 会因为 Kubenertes RBAC 集群权限问题,导致 ServiceMonitor不生效,表现为在Prometheus 的 targets 中看不到该 ServiceMonitor 的 targets。查看StatefulSet工作负载 prometheus-k8s 的状态,查看日志,看到如下报错:

services is forbidden: User "system:serviceaccount:monitoring:prometheus-k8s" cannot list services in the namespace monitoring

这是因为默认只配置了get权限 。解决办法是为 ServiceMonitor 添加如下的 ClusterRoleBinding,编辑 prometheus-k8s角色绑定,添加如下内容:

...- apiGroups:    - ""  resources:    - services    - endpoints    - pods  verbs:    - get    - list    - watch

修改后重启 StatefulSet: prometheus-k8s; ServiceMonitor就会找到对应 Service 资源的 labels 选择器的Endpoint资源, 并且会被 Prometheus Operator 自动配置为 Prometheus 的 targets。

当然ServiceMonitor不生效的原因还有很多,比如ServiceMonitor的namespaceSelector和selector不匹配,或者ServiceMonitor的namespaceSelector和Service的namespace不匹配等等。

为什么配置的ServiceMonitor或PodMonitor未生效?排查步骤:确认Target是否已经被发现,找到目标Prometheus实例,然后在左侧导航栏单击服务发现,然后单击Targets页签,检查相应的Target是否已经被发现。查看集群CRD中是否存在相应的ServiceMonitor资源。确认Label Selector是否能选择到期望的Pod或者Service
# 以上面那个例子为例。执行以下命令,观察返回结果,若无返回结果,则需要调整Label Selector或Namespace Selector,即可筛选出期望的Pod或者Service。kubectl get service -l k8s-app=dev-yoyogodemo-kind-kind -n klns-administration
检查端口设置,端口port字段,需要指定为pod定义中spec.containers[i].ports[i].name,或services定义中spec.ports[i].name字段的值。推广

目前正在将Prometheus Operator集成到PaaS项目中,后续会将集成过程中遇到的问题和解决方案分享出来。

kubelilin 多云 PaaS 开源项目: https://github.com/KubeLilin/kubelilin

标签:

最新
  • 每日快讯!Prometheus-Operator使用ServiceMonitor监控配置时遇坑与解决总结

    摘要本文范围:Prometheus-Operator&kube-prometheus安装;以及在解决使用ServiceMonitor时遇到的坑。Promet

  • 云创数据大宗交易成交2038.95万元-环球热头条

    云创数据(835305)5月5日大宗交易平台出现一笔成交,成交量115 00万股,成交金额2038 95万元,大宗交易成交

  • 连淮扬镇铁路吧百度贴吧 连淮扬镇铁路线路图

    今天来聊聊关于连淮扬镇铁路吧百度贴吧,连淮扬镇铁路线路图的文章,现在就为大家来简单介绍下连淮扬镇铁路

  • 美参议院投票恢复将光伏面板关税提高至254%,光伏ETF下跌_世界快讯

    据美国太阳能产业协会称,如果这项为期两年的关税豁免被取消,美国太阳能开发商可能面临总计10亿美元的追溯

  • 两阳夹一阴股票口诀是什么?妖股有什么走势特征?

    想必现在有很多小伙伴对于股票和基金的知识都比较想要了解,那么今天小编就为大家收集了一些关于股票和

  • 天天要闻:1095电影网投票_1095电影网

    1、m195的网站的视频也是分段下载的,一部电影分出来几十段,下下来排序也很麻烦的,建议别试。2、如果非要

  • 强对流天气来袭!贵州多地气温下降 局地有暴雨冰雹

    多彩贵州网讯(通讯员李兰兰)据贵州省气象台预计,5月5日傍晚到5月6日白天,省的中东部部分地区将有大雨到暴

  • 支付宝到账语音播报怎么设置 支付宝转账限额是多少?

    支付宝到账语音播报怎么设置 支付宝转账限额是多少?首先打开支付宝软件点击右下方,我的,点击右上角的

  • 榛蘑是怎么吃的?榛蘑能拿来煲鸭肉汤吗?

    榛蘑怎么吃?榛蘑一般可以进行炒菜,进行煲汤,做成饺子馅,还能入药。榛蘑木耳丸组成:榛蘑半斤,木耳4

  • 银行存单丢失了怎么办? 银行存单丢失可以补办吗?

    银行存单丢失了怎么办?银行存单丢失了,储户在工作时间内携带有效身份证去银行办理挂失手续即可。申请

  • 英国为什么分四个国家?威尔士为什么不在英国国旗上?

    英国为什么分四个国家?是不是好多小伙伴比较好奇这个问题的,那小编就来给大家解答一下吧,相信可以帮助

  • 劳动力供求市场特点是?市场管理跟市场特点的关系是?

    劳动力供求市场特点是第一、劳动力供求双方的关系比其它生产要素市场供求双方的关系复杂。因为其它生产

  • 一次性买断养老保险要多少钱?给爸妈买社保一次性要交多少?

    一次性买断养老保险要多少钱?一次性补缴15年的养老保险参保费用只需要9万元,并且每月能拿到800—1400元

  • 网贷申请延期还款算逾期吗?网贷申请延期还款需要什么资料?

    网贷申请延期还款算逾期吗?网络贷款申请延期还款,如果贷款自带延期还款的选项,用户选择延期还款,不会

  • 金利华电(300069)拟向银行申请不超2亿元综合授信额度

    金利华电(300069)发布公告,为确保公司生产经营和流动周转资金需要,满足公司不断扩展的经营规模,以及推进公司发展战略的实施,公司董事会

  • 京山轻机(000821)第三期员工持股计划拟募资不超5064.61万元

    京山轻机(000821)发布第三期员工持股计划公告,本员工持股计划持股规模不超过883 8767万股,约占本员工持股计划草案公告日公司股本总额的1

  • 旅游
    • 看热讯:南烟斋笔录小说txt资源(南烟斋笔录小说txt)

    • 天天视讯!木耳熬汤(meat)

    • 【时快讯】深圳市顺丰快递电话号码(深圳顺丰快递的电话号码)

    • 今头条!腾讯手游助手电脑版下载安装(腾讯手游助手电脑版)