prometheus-operator架构部署( prometheus-server, pushgateway, grafana, alertmanater,servicemonitor...)
github官网:https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/cluster-monitoring.mdPrometheus 架构Prometheus 是一个非常优秀的监控工具。准确的说,应该是监控方案。Prometheus 提供了数据搜集、存储、处理、可视化和告警一...

全栈工程师开发手册 (作者:栾鹏)
架构系列文章
github官网:https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/cluster-monitoring.md
Prometheus 架构
Prometheus 是一个非常优秀的监控工具。准确的说,应该是监控方案。Prometheus 提供了数据搜集、存储、处理、可视化和告警一套完整的解决方案。Prometheus 的架构如下图所示:
[外链图片转存失败(img-g6e1lclq-1565240551717)(https://prometheus.io/assets/architecture.png)]
官网上的原始架构图比上面这张要复杂一些,为了避免注意力分散,这里只保留了最重要的组件。
Prometheus Server
Prometheus Server 负责从 Exporter 拉取和存储监控数据,并提供一套灵活的查询语言(PromQL)供用户使用。
Exporter
Exporter 负责收集目标对象(host, container…)的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。
可视化组件
监控数据的可视化展现对于监控方案至关重要。以前 Prometheus 自己开发了一套工具,不过后来废弃了,因为开源社区出现了更为优秀的产品 Grafana。Grafana 能够与 Prometheus 无缝集成,提供完美的数据展示能力。
Alertmanager
用户可以定义基于监控数据的告警规则,规则会触发告警。一旦 Alermanager 收到告警,会通过预定义的方式发出告警通知。支持的方式包括 Email、PagerDuty、Webhook 等.
Prometheus Operator 架构
Prometheus Operator 的目标是尽可能简化在 Kubernetes 中部署和维护 Prometheus 的工作。其架构如下图所示:
图上的每一个对象都是 Kubernetes 中运行的资源。
Operator
Operator 即 Prometheus Operator,在 Kubernetes 中以 Deployment 运行。其职责是部署和管理 Prometheus Server,根据 ServiceMonitor 动态更新 Prometheus Server 的监控对象。
Prometheus Server
Prometheus Server 会作为 Kubernetes 应用部署到集群中。为了更好地在 Kubernetes 中管理 Prometheus,CoreOS 的开发人员专门定义了一个命名为 Prometheus 类型的 Kubernetes 定制化资源。我们可以把 Prometheus看作是一种特殊的 Deployment,它的用途就是专门部署 Prometheus Server。
Service
这里的 Service 就是 Cluster 中的 Service 资源,也是 Prometheus 要监控的对象,在 Prometheus 中叫做 Target。每个监控对象都有一个对应的 Service。比如要监控 Kubernetes Scheduler,就得有一个与 Scheduler 对应的 Service。当然,Kubernetes 集群默认是没有这个 Service 的,Prometheus Operator 会负责创建。
ServiceMonitor
Operator 能够动态更新 Prometheus 的 Target 列表,ServiceMonitor 就是 Target 的抽象。比如想监控 Kubernetes Scheduler,用户可以创建一个与 Scheduler Service 相映射的 ServiceMonitor 对象。Operator 则会发现这个新的 ServiceMonitor,并将 Scheduler 的 Target 添加到 Prometheus 的监控列表中。
ServiceMonitor 也是 Prometheus Operator 专门开发的一种 Kubernetes 定制化资源类型。
Alertmanager
除了 Prometheus 和 ServiceMonitor,Alertmanager 是 Operator 开发的第三种 Kubernetes 定制化资源。我们可以把 Alertmanager 看作是一种特殊的 Deployment,它的用途就是专门部署 Alertmanager 组件。
pushgateway
在使用之前,有必要了解一下它的一些弊端:
- 将多个节点数据汇总到 pushgateway, 如果 pushgateway 挂了,受影响比多个 target 大。
- Prometheus 拉取状态 up 只针对 pushgateway, 无法做到对每个节点有效。
- Pushgateway 可以持久化推送给它的所有监控数据。当prometheus把数据拉取以后,这些数据会仍然留在pushgateway,不会被自动删除。下一次拉取又会被拉渠道prometheus中
- pushgateway在接收到同一个metric的后一次推送时,会把前一次的内容删除掉
- pushgateway客户端在推送数据到pushgateway服务器端以后必须要不同label下的数据清理或者置为0,不然会有叠加效果
正常情况我们会使用 Client SDK 推送数据到 pushgateway, 但是我们还可以通过 API 来管理, 例如:
shell脚本
向 {job="some_job"}
添加单条数据:
echo "some_metric 3.14" | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job
–data-binary 表示发送二进制数据,注意:它是使用POST方式发送的!
添加更多更复杂数据,通常数据会带上 instance, 表示来源位置:
cat <<EOF | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/some_job/instance/some_instance
# TYPE some_metric counter
some_metric{label="val1"} 42
# TYPE another_metric gauge
# HELP another_metric Just an example.
another_metric 2398.283
EOF
注意:必须是指定的格式才行!
删除某个组下的某实例的所有数据:
curl -X DELETE http://pushgateway.example.org:9091/metrics/job/some_job/instance/some_instance
删除某个组下的所有数据:
curl -X DELETE http://pushgateway.example.org:9091/metrics/job/some_job
可以发现 pushgateway 中的数据我们通常按照 job 和 instance 分组分类,所以这两个参数不可缺少。
因为 Prometheus 配置 pushgateway 的时候,也会指定 job 和 instance, 但是它只表示 pushgateway 实例,不能真正表达收集数据的含义。所以在 prometheus 中配置 pushgateway 的时候,需要添加 honor_labels: true 参数, 从而避免收集数据本身的 job 和 instance 被覆盖。
注意,为了防止 pushgateway 重启或意外挂掉,导致数据丢失,我们可以通过 -persistence.file 和 -persistence.interval 参数将数据持久化下来。
部署
gitgub地址:https://github.com/626626cdllp/k8s/tree/master/prometheus
把git上的文件下加载下来, cd 到prometheus文件夹.
kubectl create ns monitoring
kubectl create -f ./operator/operator-sa.yml
kubectl create -f ./operator/operator-rbac.yml
kubectl create -f ./operator/operator-svc.yml
kubectl create -f ./operator/operator-dp.yml
kubectl create -f ./alertmanater/alertmanager-main-sa.yml # 创建alert的配置文件,定义报警方式
kubectl create -f ./alertmanater/alertmanager-main-secret.yml
kubectl create -f ./alertmanater/alertmanager-main-svc.yml
kubectl create -f ./alertmanater/alertmanager-main.yml
kubectl create -f ./node-exporter/node-exporter-sa.yml
kubectl create -f ./node-exporter/node-exporter-rbac.yml
kubectl create -f ./node-exporter/node-exporter-svc.yml
kubectl create -f ./node-exporter/node-exporter-ds.yml
kubectl create -f ./kube-state-metrics/kube-state-metrics-sa.yml
kubectl create -f ./kube-state-metrics/kube-state-metrics-rbac.yml
kubectl create -f ./kube-state-metrics/kube-state-metrics-svc.yml
kubectl create -f ./kube-state-metrics/kube-state-metrics-dp.yml
kubectl create -f ./grafana/grafana-sa.yml
kubectl create -f ./grafana/grafana-source.yml # 自定义配置文件,定义显示方式
kubectl create -f ./grafana/grafana-datasources.yml
kubectl create -f ./grafana/grafana-admin-secret.yml
kubectl create -f ./grafana/grafana-svc.yml
kubectl create -f ./grafana/grafana-dp.yml
kubectl create -f ./service-discovery/kube-controller-manager-svc.yml
kubectl create -f ./service-discovery/kube-scheduler-svc.yml
kubectl create -f ./prometheus/prometheus-rules.yml # 自定义配置文件,定义收集和报警规则
kubectl create -f ./prometheus/prometheus-sa.yml
kubectl create -f ./prometheus/prometheus-rbac.yml
kubectl create -f ./prometheus/prometheus-svc.yml
kubectl create -f ./prometheus/prometheus-main.yml
kubectl create -f ./pushgateway/pushgateway-serviceaccount.yaml
kubectl create -f ./pushgateway/pushgateway-service.yaml
kubectl create -f ./pushgateway/pushgateway-deployment.yaml
kubectl create -f ./servicemonitor/alertmanager-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/coredns-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/kube-apiserver-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/kube-controller-manager-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/kube-scheduler-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/kubelet-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/kubestate-metrics-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/node-exporter-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/prometheus-operator-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/prometheus-sm.yml # 创建监控目标
kubectl create -f ./servicemonitor/pushgateway-sm.yml # 创建监控目标
更多推荐
所有评论(0)