云服务器内容精选

  • 通过监控中心查看Master节点组件指标 云原生监控中心已支持对Master节点的kube-apiserver组件进行监控,您在集群中开通云原生监控中心后(安装云原生监控插件版本为3.5.0及以上),可以查看仪表盘中的APIServer视图,监控API指标。 如需对kube-controller、kube-scheduler、etcd-server组件进行监控,请参考以下步骤。 此3个组件监控指标不在容器基础指标范围,监控中心将该类指标上报至AOM后会进行收费,因此监控中心会默认屏蔽采集该类指标。 登录CCE控制台,单击集群名称进入集群详情页。 在左侧导航栏中选择“配置与密钥”,并切换至“monitoring”命名空间,找到名为“persistent-user-config”的配置项。 单击“更新”,对配置数据进行编辑,并在serviceMonitorDisable字段下删除以下配置。 serviceMonitorDisable: - monitoring/kube-controller - monitoring/kube-scheduler - monitoring/etcd-server - monitoring/log-operator 图1 删除配置 单击“确定”。 等待5分钟后,您可前往AOM控制台,在“指标浏览”中找到集群上报的AOM实例,查看上述组件的指标。 图2 查看指标
  • 方法一:配置Pod Annotations监控自定义指标 当Pod的Annotations配置符合Prometheus采集规范的规则后,Prometheus会自动采集这些Pod暴露的指标。 如上所述的nginx:exporter提供的监控数据,其数据格式并不满足Prometheus的要求,需要将其转换成Prometheus需要的格式,可以使用nginx-prometheus-exporter来转换Nginx的指标,将nginx:exporter和nginx-prometheus-exporter部署到同一个Pod,并在部署时添加如下Annotations就可以自动被Prometheus采集监控指标。 kind: Deployment apiVersion: apps/v1 metadata: name: nginx-exporter namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-exporter template: metadata: labels: app: nginx-exporter annotations: prometheus.io/scrape: "true" prometheus.io/port: "9113" prometheus.io/path: "/metrics" prometheus.io/scheme: "http" spec: containers: - name: container-0 image: 'nginx:exporter' # 替换为您上传到SWR的镜像地址 resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi - name: container-1 image: 'nginx/nginx-prometheus-exporter:0.9.0' command: - nginx-prometheus-exporter args: - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status' imagePullSecrets: - name: default-secret 其中 prometheus.io/scrape:表示是否需要prometheus采集Pod的监控数据,取值为true。 prometheus.io/port:表示采集监控数据接口的端口,由需要采集的应用决定。本示例中采集端口为9113。 prometheus.io/path:表示采集监控数据接口的URL,如不配置则默认为“/metrics”。 prometheus.io/scheme:表示采集的协议,值可以填写http或https。 应用部署成功后,访问云原生监控插件,查询自定义监控指标。 图1 访问云原生监控插件 可以查询到nginx相关的自定义监控指标,通过job名称可以判断出是根据Pod配置上报的。 nginx_connections_accepted{cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", container="container-0", instance="10.0.0.46:9113", job="monitoring/kubernetes-pods", kubernetes_namespace="default", kubernetes_pod="nginx-exporter-77bf4d4948-zsb59", namespace="default", pod="nginx-exporter-77bf4d4948-zsb59", prometheus="monitoring/server"} 图2 查看监控指标
  • 方法二:配置Service Annotations监控自定义指标 当Service的Annotations配置符合Prometheus采集规范的规则后,Prometheus会自动采集这些Service暴露的指标。 Service Annotations使用方法和Pod Annotations基本相同,主要是采集的指标的适用场景不同,Pod Annotations更关注Pod的资源使用情况,Service Annotations侧重于对该业务的请求等指标。 部署示例应用如下: kind: Deployment apiVersion: apps/v1 metadata: name: nginx-test namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-test template: metadata: labels: app: nginx-test spec: containers: - name: container-0 image: 'nginx:exporter' # 替换为您上传到SWR的镜像地址 resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi - name: container-1 image: 'nginx/nginx-prometheus-exporter:0.9.0' command: - nginx-prometheus-exporter args: - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status' imagePullSecrets: - name: default-secret 部署示例Service如下: apiVersion: v1 kind: Service metadata: name: nginx-test labels: app: nginx-test namespace: default annotations: prometheus.io/scrape: "true" # 配置为 true 表示开启服务发现 prometheus.io/port: "9113" # 配置为采集指标暴露的端口号 prometheus.io/path: "/metrics" # 填写指标暴露的 URI 路径,一般是 /metrics spec: selector: app: nginx-test externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 nodePort: 0 port: 8080 protocol: TCP - name: cce-service-1 protocol: TCP port: 9113 targetPort: 9113 type: NodePort 查看指标,通过Service名称可以判断出该指标是根据Service配置上报的。 nginx_connections_accepted{app="nginx-test", cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", instance="10.0.0.38:9113", job="nginx-test", kubernetes_namespace="default", kubernetes_service="nginx-test", namespace="default", pod="nginx-test-78cfb65889-gtv7z", prometheus="monitoring/server", service="nginx-test"} 图3 查看监控指标
  • 方法三:配置Pod Monitor监控自定义指标 云原生监控插件提供了基于PodMonitor与ServiceMonitor配置指标采集任务的能力。Prometheus Operator将watch的PodMonitor的变化,通过Prometheus的reload机制,将Prometheus的采集任务热更新至Prometheus的实例中。 Prometheus Operator定义的CRD资源github地址:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/charts/crds/crds。 部署示例应用如下: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-test2 namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-test2 template: metadata: labels: app: nginx-test2 spec: containers: - image: nginx:exporter # 替换为您上传到SWR的镜像地址 name: container-0 ports: - containerPort: 9113 # 指标暴露的端口号 name: nginx-test2 # 该名称是后续配置PodMonitor时相匹配的名称 protocol: TCP resources: limits: cpu: 250m memory: 300Mi requests: cpu: 100m memory: 100Mi - name: container-1 image: 'nginx/nginx-prometheus-exporter:0.9.0' command: - nginx-prometheus-exporter args: - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status' imagePullSecrets: - name: default-secret 配置Pod Monitor示例如下: apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: podmonitor-nginx # PodMonitor的名称 namespace: monitoring # 所属命名空间,建议使用monitoring spec: namespaceSelector: # 匹配工作负载所在的命名空间 matchNames: - default # 工作负载所属的命名空间 jobLabel: podmonitor-nginx podMetricsEndpoints: - interval: 15s path: /metrics # 工作负载暴露指标的路径 port: nginx-test2 # 工作负载暴露指标的port名称 tlsConfig: insecureSkipVerify: true selector: matchLabels: app: nginx-test2 # Pod携带的标签,能被选择器选中 查看指标,通过job名称可以判断出该指标是根据PodMonitor配置上报的。 nginx_connections_accepted{cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", container="container-0", endpoint="nginx-test2", instance="10.0.0.44:9113", job="monitoring/podmonitor-nginx", namespace="default", pod="nginx-test2-746b7f8fdd-krzfp", prometheus="monitoring/server"} 图4 查看监控指标
  • 方法四:配置Service Monitor监控自定义指标 云原生监控插件提供了基于PodMonitor与ServiceMonitor配置指标采集任务的能力。Prometheus Operator将watch的ServiceMonitor的变化,通过Prometheus的reload机制,将Prometheus的采集任务热更新至Prometheus的实例中。 Prometheus Operator定义的CRD资源github地址:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/charts/crds/crds。 部署示例应用如下: apiVersion: apps/v1 kind: Deployment metadata: name: nginx-test3 namespace: default spec: replicas: 1 selector: matchLabels: app: nginx-test3 template: metadata: labels: app: nginx-test3 spec: containers: - image: nginx:exporter # 替换为您上传到SWR的镜像地址 name: container-0 resources: limits: cpu: 250m memory: 300Mi requests: cpu: 100m memory: 100Mi - name: container-1 image: 'nginx/nginx-prometheus-exporter:0.9.0' command: - nginx-prometheus-exporter args: - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status' imagePullSecrets: - name: default-secret 部署示例Service如下: apiVersion: v1 kind: Service metadata: name: nginx-test3 labels: app: nginx-test3 namespace: default spec: selector: app: nginx-test3 externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 nodePort: 0 port: 8080 protocol: TCP - name: servicemonitor-ports protocol: TCP port: 9113 targetPort: 9113 type: NodePort 配置Service Monitor示例如下: apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: servicemonitor-nginx namespace: monitoring spec: # 配置service中的暴露指标的port的名称 endpoints: - path: /metrics port: servicemonitor-ports jobLabel: servicemonitor-nginx # 采集任务的作用范围,如果不配置,默认为default namespaceSelector: matchNames: - default selector: matchLabels: app: nginx-test3 查看指标,通过endpoint名称可以判断出该指标是根据ServiceMonitor配置上报的。 nginx_connections_accepted{cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", endpoint="servicemonitor-ports", instance="10.0.0.47:9113", job="nginx-test3", namespace="default", pod="nginx-test3-6f8bccd9-f27hv", prometheus="monitoring/server", service="nginx-test3"}
  • 约束与限制 使用Prometheus监控自定义指标时,应用程序需要提供监控指标接口,详情请参见Prometheus监控数据采集说明。 使用Pod/Service Annotations的方式暂不支持采集kube-system与monitoring命名空间下的指标,如需采集这两个命名空间下的指标,请通过Pod Monitor与Service Monitor的方式配置。 本文使用Nginx应用示例会拉取nginx/nginx-prometheus-exporter:0.9.0镜像,需要为应用部署的节点添加EIP或先将此镜像上传到SWR,以免部署应用失败。
  • Prometheus监控数据采集说明 Prometheus通过周期性的调用应用程序的监控指标接口(默认为“/metrics”)获取监控数据,应用程序需要提供监控指标接口供Prometheus调用,且监控数据需要满足Prometheus的规范,如下所示。 # TYPE nginx_connections_active gauge nginx_connections_active 2 # TYPE nginx_connections_reading gauge nginx_connections_reading 0 Prometheus提供了各种语言的客户端,客户端具体请参见Prometheus CLIENT LIBRARIES,开发Exporter具体方法请参见WRITING EXPORTERS。Prometheus社区提供丰富的第三方exporter可以直接使用,具体请参见EXPORTERS AND INTEGRATIONS。
  • 如何配置PrometheusRules Prometheus提供了PrometheusRules的用于创建用户自己的record来查询指标。 apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: demo namespace: monitoring labels: role: operator-prometheus # 保持一致,必须配置,prometheus配置了该ruleSelector spec: groups: - name: demo interval: 15s rules: - record: cpu_request expr: kube_pod_container_resource_requests{resource="cpu",unit="core"} - record: cpu_limit expr: kube_pod_container_resource_limits{resource="cpu",unit="core"} - record: memory_request expr: kube_pod_container_resource_requests{resource="memory",unit="byte"} - record: memory_limit expr: kube_pod_container_resource_limits{resource="memory",unit="byte"} 创建成功后,Prometheus的Web页面中,Status-Rules中可以看到配置的PrometheusRules。