ServiceMonitor 是 Prometheus Operator 中的一个自定义资源定义(CRD),用于定义要监控的应用程序服务 。它的作用是指定哪些服务需要被 Prometheus 监控,以及如何进行监控 。ServiceMonitor 在 Prometheus Operator 中的使用非常重要,因为它能够自动发现被监控的服务,并生成适当的监控配置 。
下面是一个 ServiceMonitor 的示例讲解:
假设有一个名为 "my-App" 的应用程序在 Kubernetes 集群中运行,我们希望 Prometheus 监控该应用程序的性能指标 。首先,我们需要创建一个 ServiceMonitor 自定义资源来定义该应用程序的监控配置 。
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: my-app-monitornamespace: defaultspec:selector:matchLabels:app: my-appendpoints:- port: webinterval: 30s
在上述示例中:- apiVersion 和 kind 指定了这是一个 ServiceMonitor 自定义资源 。
- metadata 中的 name 指定了 ServiceMonitor 对象的名称 。
- spec 部分定义了监控的配置 。在 selector 中,我们使用了 matchLabels 来选择带有 app: my-app 标签的 Pod 。这意味着只有具有该标签的 Pod 会被监控 。
- 在 endpoints 中,我们定义了监控的端点信息 。在这个示例中,我们监控了名为 "web" 的端口,并指定了抓取数据的时间间隔为 30 秒 。
通过创建这个 ServiceMonitor 对象,Prometheus Operator 将自动发现带有标签 app: my-app 的 Pod,并在 Prometheus 配置中生成相应的监控作业(job) 。这样,Prometheus 就会定期抓取这些 Pod 的指标数据,以进行监控和告警 。通过使用 Prometheus Operator,您可以通过简单的声明式配置来自动管理和扩展 Prometheus 监控系统,从而使监控的部署和维护更加简单和可靠 。
四、快速在k8s内搭建 Prometheus 全家桶最开始是Heapster+cAdvisor方式监控,这是Prometheus Operator出现之前的k8s监控方案 。后来出现了Prometheus Operator,但是目前Prometheus Operator已经不包含完整功能,完整的解决方案已经变为kube-prometheus(或kube-prometheus-stack) 。
"kube-prometheus" 和 "kube-prometheus-stack" 本质上是同一个项目,只是在不同的时间和版本中使用了不同的名称 。"kube-prometheus-stack" 是 "kube-prometheus" 项目的更新版本,它提供了更多的功能、改进和修复 。
kube-prometheus-stack GitHub地址:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack
1)k8s 环境安装k8s 环境安装之前写过很多文档,可以参考我以下几篇文章:
- 【云原生】k8s 离线部署讲解和实战操作
- 【云原生】k8s 环境快速部署(一小时以内部署完)
# 下载包wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz# 解压压缩包tar -xf helm-v3.7.1-linux-amd64.tar.gz# 制作软连接ln -s /opt/helm/linux-amd64/helm /usr/local/bin/helm# 验证helm versionhelm help
3)【第一种安装方法】直接安装方式(kube-prometheus)第一种方法是下载 manifests 包里的yaml,再通过 kubectl 部署 。1、下载kube-prometheus下载地址:https://github.com/prometheus-operator/kube-prometheus
git clone https://github.com/prometheus-operator/kube-prometheus.gitcd kube-prometheus
【注】在 release-0.11 版本之后新增了 NetworkPolicy 默认是允许自己访问,如果了解 NetworkPolicy 可以修改一下默认的规则,可以用查看 ls manifests/*networkPolicy*,如果不修改的话则会影响到修改 NodePort 类型也无法访问,如果不会 Networkpolicy 可以直接删除就行 。
推荐阅读
- Nginx的HTTPS部署与安全性能优化
- Oracle Database 19c在Linux系统上面的安装部署
- harbor等 k8s 使用 containerd 运行时配置 http 私服
- k8s 用户角色 权限的划分
- 数据库 DB2 11.1 在 Linux 上部署实战
- Docker从入门到部署项目
- 非程序员小白版本地部署ChatGLM2-6B +LangChain 个人知识库模型
- 王小川大模型25天再升级!13B版本开源免费可商用,3090即可部署
- K8S 核心原理分析,你学到了什么?
- 基于 ChatGLM-6B 部署本地私有化 ChatGPT