Prometheus Operatort自定义监控 --Ingress-Nginx

Prometheus Operator自定义监控对象_自定义

一、自定义资源

1.1、Prometheus

Prometheus 自定义资源(CRD)声明了在 Kubernetes 群中运行的 Prometheus 的期望设置,包含了副本数,持久化存储,以及 Prometheus 实例发送警告到的Alertmanagers等配置选项。每一个Prometheus 资源,Operator 都会在相同 namespace 下部署成一个正确配置的 StatefulSet, Prometheus 的Pod 都会挂我一个名为 prometheus-name>的 Seret,业面包含了Prometheus 的配置,Operator 根想包含的 ServkeMonitor 生成配置,并且更新含有配置的 Seret,无论是对 ServiceMonitors或者 Prometheus 的修改,都会持续不断的被按照前面的步骤更新。

示例配置如下:

Prometheus Operator自定义监控对象_nginx_02

1.2、ServiceMonitor

   SevceMonitor 自定义资源(RD)能够声明如何监按一组动态服务的定义,它便用标选择定义一组需要被监控的服务,这样就允许组织入如何暴露 metrics 的规定,只要符合这些规定新服务就会被发现列入监控,而不需要重新配置统。

   要想使用 Prometheus Operator 监控 ubernetes 集中的应用,Endpoints 对象必须存在Endpoints 对象本质是一个1P 地址列表,通常,Endpoints 对象Service 构建,Service 对象通过对象选择器发现 Pod 并将它们添加到 Endpoints 对象中Prometheus Operator引入ServiceMonitor 对象,它发现 Endpoints 对象并配置 Prometheus 去监控这些Pods

   ServiceMonitorSpec的 endpoints 部分用于配置需要收集 metrics 的Endpoints 的端口和其他参数

注意: endpoints(小写)是ServiceMonitor CRD 中的一个字段,而Endpoints (大写)是 Kubernetes 资源类型

ServiceMonitor 和发现的目标可能来自任何 namespace:

使用 PrometheusSpec下 ServiceMonitorNamespaceSelector, 通过各自 Prometheus server 限到 ServiceMonitors 作用 namespece.

使用 ServiceMonitorSpec下的 namespaeSeletor 允许发现 Endpoints 对象的命名空间,要发现所有命名空间下的目标,namespaeSelector 必须为空

spec:
namespaceSelector:
any: true
  • 1.
  • 2.
  • 3.

示例配置如下:

Prometheus Operator自定义监控对象_k8s_03

1.3、Alertmanager

Aletmanager 自定义资源CRD)声明在 Kubernetes 集群中运行的Alertmanager 的期望设置,它也提供了配置副本集和持久化存储的选项

每一个Alertmanager 资源,Operator 都会在相同 namespae 下部 成一个正确配置的 tatefulSet,Alertmanager pods 配置挂载一个名为<alertmanager-name>的Secret,使用alertmanager.yam] key 对作为配置文件

当有两个或更多配置的副本时,Operator 可以高可用性横式运行Alertmanager实例。

示例配置如下:

Prometheus Operator自定义监控对象_自定义_04

1.4、PrometheusRule

PrometheusRule CRD 声明一个或多个 Prometheus 实例需要的 Prometheus rule。

Alerts和 recording rules 可以保存并应用为 yaml文件,可以被动态加载而不需要重启

示例配置如下:

Prometheus Operator自定义监控对象_nginx_05

1.5、配置问的匹配总结

ServiceMonitor注意事项:

   ServiceMonitor的label 需要跟prometheus中定义的serviceMonitorSelector一致

   ServiceMonitor的endpoints 中 port 时对应k8s service资源中的 portname,不是 port number,

   ServiceMonitor 的 selector.matchLabels 需要匹配 k8s service 中的 label.

   ServiceMonitor 资源创建在 prometheus 的namespace 下,使用 namespaceSelector 匹配要监控的k8s SVC的ns.

servicemonitor 若匹配多个 svc,会发生数现

二、抓取自定义资源 - Ingress-nginx(Helm)

2.1、暴露ingress的监控端口

通过helm部署维护的ingress-nginx

vim values.yaml
  • 1.

默认情况下nginx-ingress的监控指标口为10254,监控路径为其下的/metris,调整配置ingress-nginx的配置文件,打开ervice及pod的10254端口

更新:

$ helm upgrade ingress-nginx ./ingress-nginx -f ./ingress-nginx/values.yaml
  • 1.

查看验证指标数据:

$ kubect1 get ep -ningress-nginx

$ kubect] get ep -ningress-nginx

Prometheus Operator自定义监控对象_nginx_06

$ curl 192.10.192.192:10254/metrics
  • 1.

2.2、手动添加serviceMonitor

Prometheus Operator自定义监控对象_k8s_07

Prometheus Operator自定义监控对象_nginx_08

Prometheus Operator自定义监控对象_k8s_09

验证

# kg servicemonitor -nmonitoring
  • 1.

2.3、添加报警规则

三、抓取自守义资源 - 常规部警的ingress-nginx

3.1、修改ingress Service

Prometheus Operator自定义监控对象_自定义_10

Prometheus Operator自定义监控对象_nginx_11

3.2、修改ingress deployment

3,3、测试验证

Prometheus Operator自定义监控对象_自定义_12

3.4、新增ingress ServiceMonitor

Prometheus Operator自定义监控对象_自定义_13

Prometheus Operator自定义监控对象_k8s_14

3.5、添加报警规则

Prometheus Operator自定义监控对象_nginx_15

Prometheus Operator自定义监控对象_nginx_16

四、导入Grafana模板

Ingress-nginx 模板ID:9614、14314

五、总结

  Kube-prometheus 是一个用于在Kubernetes上运行Prometheus的开源项目:

  它利用了Kubernetes的自定义资源定义(Custom Resource Definitions,CRD) 机制来定义和管理Prometheus实例:

  在Prometheus Operator中,Prometheus实例、ServiceMonitor、Alertmanager、PrometheusRule等都是自定义资源:

  通过Prometheusperator来自动化地管理和更新Prometheus实例的配置:

  通过Kubernetes的CRD来管理Prometheus实例,而无需手动管理和维护Prometheus的配置文件

原图下载: https://xmarsdevops.oss-cn-shanghaialiyuncs.com/AliCloud/shili-1514f254b1a9.jpeg
  • 1.