prometheus-operator/prometheus-operator

GitHub: prometheus-operator/prometheus-operator

Kubernetes 原生的 Prometheus 管理控制器,通过 CRD 声明式简化监控栈部署与配置。

Stars: 9882 | Forks: 3850

# Prometheus Operator [![Build Status](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/e475a79017091429.svg)](https://github.com/prometheus-operator/prometheus-operator/actions) [![Go Report Card](https://goreportcard.com/badge/prometheus-operator/prometheus-operator "Go Report Card")](https://goreportcard.com/report/prometheus-operator/prometheus-operator) [![Slack](https://img.shields.io/badge/join%20slack-%23prometheus--operator-brightgreen.svg)](https://kubernetes.slack.com) ## 概述 Prometheus Operator 为 [Prometheus](https://prometheus.io/) 及相关监控组件提供了 [Kubernetes](https://kubernetes.io/) 原生的部署和管理功能。本项目的目的是简化和自动化 Kubernetes 集群中基于 Prometheus 的监控栈的配置。 Prometheus Operator 包括但不限于以下功能: * **Kubernetes Custom Resources**:使用 Kubernetes 自定义资源来部署和管理 Prometheus、Alertmanager 及相关组件。 * **简化的部署配置**:通过原生的 Kubernetes 资源配置 Prometheus 的基础设置,如版本、持久化、保留策略和副本。 * **Prometheus Target Configuration**:基于熟悉的 Kubernetes 标签查询自动生成监控目标配置;无需学习特定的 Prometheus 配置语言。 关于 Prometheus Operator 的介绍,请参阅 [入门](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/developer/getting-started.md) 指南。 ## 项目状态 Operator 本身被视为已可投入生产环境。关于每个 CRD 的状态,请参考 Custom Resource Definition (CRD) 版本: * `monitoring.coreos.com/v1`:**稳定** 的 CRD 和 API,更改将以向后兼容的方式进行。 * `monitoring.coreos.com/v1beta1`:**不稳定** 的 CRD 和 API,可能会发生更改,但团队正致力于避免这种情况。我们鼓励接受破坏性变更风险的用户在生产环境中使用。 * `monitoring.coreos.com/v1alpha1`:**不稳定** 的 CRD 和 API,更改可能频繁发生,我们建议避免在关键任务环境中使用。 ## Prometheus Operator vs. kube-prometheus vs. 社区 Helm chart ### Prometheus Operator Prometheus Operator 使用 Kubernetes [自定义资源](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/) 来简化 Prometheus、Alertmanager 及相关监控组件的部署和配置。 ### kube-prometheus [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) 提供了基于 Prometheus 和 Prometheus Operator 的完整集群监控栈的示例配置。这包括部署多个 Prometheus 和 Alertmanager 实例,用于收集节点指标的 metrics exporter(如 node_exporter),链接 Prometheus 到各种 metrics 端点的抓取目标配置,以及用于通知集群中潜在问题的示例告警规则。 ### Helm chart [prometheus-community/kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) Helm chart 提供了与 kube-prometheus 类似的功能集。该 chart 由 Prometheus 社区维护。 更多信息,请参阅 [chart 的 readme](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack#kube-prometheus-stack) ## 前置条件 Prometheus Operator 至少需要 Kubernetes 版本 `1.16.0`。如果您刚开始使用 Prometheus Operator,强烈建议使用最新的 [稳定版本](https://github.com/prometheus-operator/prometheus-operator/releases/latest)。 ## CustomResourceDefinitions Prometheus Operator 的一个核心功能是监控 Kubernetes API Server 中特定对象的变化,并确保当前的 Prometheus 部署与这些对象相匹配。 Operator 作用于以下 [Custom Resource Definitions (CRDs)](https://kubernetes.io/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/): * **`Prometheus`**,定义了所需的 Prometheus 部署。 * **`PrometheusAgent`**,定义了所需的 Prometheus 部署,但以 Agent 模式运行。 * **`Alertmanager`**,定义了所需的 Alertmanager 部署。 * **`ThanosRuler`**,定义了所需的 Thanos Ruler 部署。 * **`ServiceMonitor`**,声明式地指定了应如何监控 Kubernetes 服务组。 Operator 根据 API Server 中对象的当前状态自动生成 Prometheus 抓取配置。 * **`PodMonitor`**,声明式地指定了应如何监控 Pod 组。 Operator 根据 API Server 中对象的当前状态自动生成 Prometheus 抓取配置。 * **`Probe`**,声明式地指定了应如何监控 Ingress 组或静态目标。Operator 根据定义自动生成 Prometheus 抓取配置。 * **`ScrapeConfig`**,声明式地指定了要添加到 Prometheus 的抓取配置。此 CustomResourceDefinition 有助于抓取 Kubernetes 集群外部的资源。 * **`PrometheusRule`**,定义了一组所需的 Prometheus 告警和/或记录规则。 Operator 生成可供 Prometheus 实例使用的规则文件。 * **`AlertmanagerConfig`**,声明式地指定了 Alertmanager 配置的子部分,允许将告警路由到自定义接收器,并设置抑制规则。 Prometheus Operator 自动检测 Kubernetes API Server 中上述任何对象的变化,并确保匹配的部署和配置保持同步。 要了解有关 Prometheus Operator 引入的 CRD 的更多信息,请查看 [设计](https://prometheus-operator.dev/docs/getting-started/design/) 页面。 ## 动态准入控制 为了防止无效的 Prometheus 告警和记录规则导致已部署的 Prometheus 实例发生故障,提供了一个 [admission webhook](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/) 用于在初始创建或更新时验证 `PrometheusRule` 资源。 有关此功能的更多信息,请参阅 [用户指南](https://prometheus-operator.dev/docs/platform/webhook/)。 ## 快速入门 **注意:** 此快速入门不提供完整的监控栈;如果那是您正在寻找的,请参阅 [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) 项目。如果您想要完整的监控栈,但已经应用了 `bundle.yaml`,请先删除该 bundle(`kubectl delete -f bundle.yaml`)。 要在集群内快速试用 *仅* Prometheus Operator,**选择一个发布版本** 并运行以下命令,该命令会在 `default` 命名空间中部署 Operator: ``` kubectl create -f bundle.yaml ``` 如果要在不同的命名空间中部署 Prometheus Operator,您还需要 `kustomize`: ``` NAMESPACE=my_namespace kustomize edit set namespace $NAMESPACE && kubectl create -k . ``` 要在集群外运行 Operator: ``` make scripts/run-external.sh ``` ## 移除 要移除 Operator 和 Prometheus,首先删除您在每个命名空间中创建的任何自定义资源。Operator 将自动关闭并移除 Prometheus 和 Alertmanager pod 以及关联的 ConfigMap。 ``` for n in $(kubectl get namespaces -o jsonpath={..metadata.name}); do kubectl delete --all --namespace=$n prometheus,servicemonitor,podmonitor,alertmanager done ``` 几分钟后,您可以继续移除 Operator 本身。 ``` kubectl delete -f bundle.yaml ``` Operator 会在您创建 Prometheus 或 Alertmanager 资源的每个命名空间中自动创建服务,并定义三个自定义资源定义。您现在可以清理这些内容。 ``` for n in $(kubectl get namespaces -o jsonpath={..metadata.name}); do kubectl delete --ignore-not-found --namespace=$n service prometheus-operated alertmanager-operated done kubectl delete --ignore-not-found customresourcedefinitions \ prometheuses.monitoring.coreos.com \ servicemonitors.monitoring.coreos.com \ podmonitors.monitoring.coreos.com \ alertmanagers.monitoring.coreos.com \ prometheusrules.monitoring.coreos.com \ alertmanagerconfigs.monitoring.coreos.com \ scrapeconfigs.monitoring.coreos.com ``` ## 测试 参见 [TESTING](TESTING.md) ## AI 使用政策 有关在为项目贡献时使用 AI 工具的信息,请参阅贡献指南中的 [AI 使用政策](CONTRIBUTING.md#ai-use-policy)。 ## 安全 如果您发现与 Prometheus Operator 相关的尚未公开披露的安全漏洞,请不要通过打开 GitHub issue 报告,而是请发送电子邮件给 [MAINTAINERS.md](MAINTAINERS.md) 文件中找到的项目维护者。 报告来自自动安全扫描器的问题时,请参考 [Prometheus 文档](https://prometheus.io/docs/operating/security/#automated-security-scanners)。 ## 故障排除 查看 [故障排除文档](Documentation/platform/troubleshooting.md) 以了解常见问题和常见问题解答 (FAQ)。 ## 致谢 prometheus-operator 组织的 Logo 由 [Bianca Cheng Costanzo](https://github.com/bia) 创建并贡献。
标签:Alertmanager, API集成, DNS解析, EVTX分析, Golang, Operator, 代理支持, 可观测性, 告警, 子域名突变, 安全编程, 应用部署, 开源项目, 指标采集, 提示注入, 日志审计, 服务发现, 监控, 自动化运维, 自定义请求头, 自定义资源, 集群管理