050.集群管理-Prometheus+Grafana监控方案
一 Prometheus概述
1.1 Prometheus简介
- 使用指标名称及键值对标识的多维度数据模型。
- 采用灵活的查询语言PromQL。
- 不依赖分布式存储,为自治的单节点服务。
- 使用HTTP完成对监控数据的拉取。
- 支持通过网关推送时序数据。
- 支持多种图形和Dashboard的展示,例如Grafana。
- Prometheus Server:负责监控数据采集和时序数据存储,并提供数据查询功能。
- 客户端SDK:对接Prometheus的开发工具包。
- Push Gateway:推送数据的网关组件。
- 第三方Exporter:各种外部指标收集系统,其数据可以被Prometheus采集。
- AlertManager:告警管理器。
- 其他辅助支持工具。
- 从Kubernetes Master获取需要监控的资源或服务信息;
- 从各种Exporter抓取(Pull)指标数据,然后将指标数据保存在时序数据库(TSDB)中;
- 向其他系统提供HTTP API进行查询;
- 提供基于PromQL语言的数据查询;
- 可以将告警数据推送(Push)给AlertManager,等等。
1.2 Prometheus组件架构图

- Prometheus 服务器定期从配置好的 jobs 或者 exporters 中获取度量数据;或者接收来自推送网关发送过来的度量数据。
- Prometheus 服务器在本地存储收集到的度量数据,并对这些数据进行聚合;
- 运行已定义好的 alert.rules,记录新的时间序列或者向告警管理器推送警报。
- 告警管理器根据配置文件,对接收到的警报进行处理,并通过email等途径发出告警。
- Grafana等图形工具获取到监控数据,并以图形化的方式进行展示。
1.3 Prometheus监控粒度
- 基础设施层:监控各个主机服务器资源(包括Kubernetes的Node和非Kubernetes的Node),如CPU,内存,网络吞吐和带宽占用,磁盘I/O和磁盘使用等指标。
- 中间件层:监控独立部署于Kubernetes集群之外的中间件,例如:MySQL、Redis、RabbitMQ、ElasticSearch、Nginx等。
- Kubernetes集群:监控Kubernetes集群本身的关键指标
- Kubernetes集群上部署的应用:监控部署在Kubernetes集群上的应用
二 Prometheus相关概念
2.1 数据模型
- 度量名称和标签
- 样本
- 格式
2.2 度量类型
- Counter(计算器)
- Gauge(测量)
- Histogram(直方图)
- 观察桶的累计计数器,暴露为 <basename>_bucket{le=”<upper inclusive bound>”}
- 所有观察值的总和,暴露为<basename>_sum
- 已观察到的事件的计数,暴露为<basename>_count(等同于<basename>_bucket{le=”+Inf”})
- Summery:类似于Histogram,Summery样本观察(通常是请求持续时间和响应大小)。虽然它也提供观测总数和所有观测值的总和,但它计算滑动时间窗内的可配置分位数。在获取数据期间,具有<basename>基本度量标准名称的Summery会显示多个时间序列:
- 流动φ分位数(0≤φ≤1)的观察事件,暴露为<basename>{quantile=”<φ>”}
- 所有观察值的总和,暴露为<basename>_sum
- 已经观察到的事件的计数,暴露为<basename>_count
2.3 工作和实例
2.4 标签和时间序列
- job:目标所属的配置作业名称。
- instance:<host>:<port>被抓取的目标网址部分。
- up{job=”<job-name>”, instance=”<instance-id>”}:1 如果实例健康,即可达;或者0抓取失败。
- scrape_duration_seconds{job=”<job-name>”, instance=”<instance-id>”}:抓取的持续时间。
- scrape_samples_post_metric_relabeling{job=”<job-name>”, instance=”<instance-id>”}:应用度量标准重新标记后剩余的样本数。
- scrape_samples_scraped{job=”<job-name>”, instance=”<instance-id>”}:目标暴露的样本数量。
三 Prometheus部署
3.1 创建命名空间
- 1 apiVersion: v1
- 2 kind: Namespace
- 3 metadata:
- 4 name: monitoring
- 5
3.2 获取部署文件
3.3 创建RBAC
- 1 apiVersion: rbac.authorization.k8s.io/v1beta1
- 2 kind: ClusterRole
- 3 metadata:
- 4 name: prometheus
- 5 rules:
- 6 - apiGroups: [""]
- 7 resources:
- 8 - nodes
- 9 - nodes/proxy
- 10 - services
- 11 - endpoints
- 12 - pods
- 13 verbs: ["get", "list", "watch"]
- 14 - apiGroups:
- 15 - extensions
- 16 resources:
- 17 - ingresses
- 18 verbs: ["get", "list", "watch"]
- 19 - nonResourceURLs: ["/metrics"]
- 20 verbs: ["get"]
- 21 ---
- 22 apiVersion: v1
- 23 kind: ServiceAccount
- 24 metadata:
- 25 name: prometheus
- 26 namespace: monitoring #修改命名空间
- 27 ---
- 28 apiVersion: rbac.authorization.k8s.io/v1beta1
- 29 kind: ClusterRoleBinding
- 30 metadata:
- 31 name: prometheus
- 32 roleRef:
- 33 apiGroup: rbac.authorization.k8s.io
- 34 kind: ClusterRole
- 35 name: prometheus
- 36 subjects:
- 37 - kind: ServiceAccount
- 38 name: prometheus
- 39 namespace: monitoring #修改命名空间
- 40
3.4 创建Prometheus ConfigMap
- 1 apiVersion: v1
- 2 kind: ConfigMap
- 3 metadata:
- 4 name: prometheus-server-conf
- 5 labels:
- 6 name: prometheus-server-conf
- 7 namespace: monitoring #修改命名空间
- 8 data:
- 9 prometheus.yml: |-
- 10 global:
- 11 scrape_interval: 10s
- 12 evaluation_interval: 10s
- 13
- 14 scrape_configs:
- 15 - job_name: 'kubernetes-apiservers'
- 16 kubernetes_sd_configs:
- 17 - role: endpoints
- 18 scheme: https
- 19 tls_config:
- 20 ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- 21 bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
- 22 relabel_configs:
- 23 - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
- 24 action: keep
- 25 regex: default;kubernetes;https
- 26
- 27 - job_name: 'kubernetes-nodes'
- 28 scheme: https
- 29 tls_config:
- 30 ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- 31 bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
- 32 kubernetes_sd_configs:
- 33 - role: node
- 34 relabel_configs:
- 35 - action: labelmap
- 36 regex: __meta_kubernetes_node_label_(.+)
- 37 - target_label: __address__
- 38 replacement: kubernetes.default.svc:443
- 39 - source_labels: [__meta_kubernetes_node_name]
- 40 regex: (.+)
- 41 target_label: __metrics_path__
- 42 replacement: /api/v1/nodes/${1}/proxy/metrics
- 43
- 44 - job_name: 'kubernetes-cadvisor'
- 45 scheme: https
- 46 tls_config:
- 47 ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
- 48 bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
- 49 kubernetes_sd_configs:
- 50 - role: node
- 51 relabel_configs:
- 52 - action: labelmap
- 53 regex: __meta_kubernetes_node_label_(.+)
- 54 - target_label: __address__
- 55 replacement: kubernetes.default.svc:443
- 56 - source_labels: [__meta_kubernetes_node_name]
- 57 regex: (.+)
- 58 target_label: __metrics_path__
- 59 replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
- 60
- 61 - job_name: 'kubernetes-service-endpoints'
- 62 kubernetes_sd_configs:
- 63 - role: endpoints
- 64 relabel_configs:
- 65 - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
- 66 action: keep
- 67 regex: true
- 68 - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
- 69 action: replace
- 70 target_label: __scheme__
- 71 regex: (https?)
- 72 - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
- 73 action: replace
- 74 target_label: __metrics_path__
- 75 regex: (.+)
- 76 - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
- 77 action: replace
- 78 target_label: __address__
- 79 regex: ([^:]+)(?::\d+)?;(\d+)
- 80 replacement: $1:$2
- 81 - action: labelmap
- 82 regex: __meta_kubernetes_service_label_(.+)
- 83 - source_labels: [__meta_kubernetes_namespace]
- 84 action: replace
- 85 target_label: kubernetes_namespace
- 86 - source_labels: [__meta_kubernetes_service_name]
- 87 action: replace
- 88 target_label: kubernetes_name
- 89
- 90 - job_name: 'kubernetes-services'
- 91 metrics_path: /probe
- 92 params:
- 93 module: [http_2xx]
- 94 kubernetes_sd_configs:
- 95 - role: service
- 96 relabel_configs:
- 97 - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
- 98 action: keep
- 99 regex: true
- 100 - source_labels: [__address__]
- 101 target_label: __param_target
- 102 - target_label: __address__
- 103 replacement: blackbox-exporter.example.com:9115
- 104 - source_labels: [__param_target]
- 105 target_label: instance
- 106 - action: labelmap
- 107 regex: __meta_kubernetes_service_label_(.+)
- 108 - source_labels: [__meta_kubernetes_namespace]
- 109 target_label: kubernetes_namespace
- 110 - source_labels: [__meta_kubernetes_service_name]
- 111 target_label: kubernetes_name
- 112
- 113 - job_name: 'kubernetes-ingresses'
- 114 kubernetes_sd_configs:
- 115 - role: ingress
- 116 relabel_configs:
- 117 - source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]
- 118 action: keep
- 119 regex: true
- 120 - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
- 121 regex: (.+);(.+);(.+)
- 122 replacement: ${1}://${2}${3}
- 123 target_label: __param_target
- 124 - target_label: __address__
- 125 replacement: blackbox-exporter.example.com:9115
- 126 - source_labels: [__param_target]
- 127 target_label: instance
- 128 - action: labelmap
- 129 regex: __meta_kubernetes_ingress_label_(.+)
- 130 - source_labels: [__meta_kubernetes_namespace]
- 131 target_label: kubernetes_namespace
- 132 - source_labels: [__meta_kubernetes_ingress_name]
- 133 target_label: kubernetes_name
- 134
- 135 - job_name: 'kubernetes-pods'
- 136 kubernetes_sd_configs:
- 137 - role: pod
- 138 relabel_configs:
- 139 - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
- 140 action: keep
- 141 regex: true
- 142 - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
- 143 action: replace
- 144 target_label: __metrics_path__
- 145 regex: (.+)
- 146 - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
- 147 action: replace
- 148 regex: ([^:]+)(?::\d+)?;(\d+)
- 149 replacement: $1:$2
- 150 target_label: __address__
- 151 - action: labelmap
- 152 regex: __meta_kubernetes_pod_label_(.+)
- 153 - source_labels: [__meta_kubernetes_namespace]
- 154 action: replace
- 155 target_label: kubernetes_namespace
- 156 - source_labels: [__meta_kubernetes_pod_name]
- 157 action: replace
- 158 target_label: kubernetes_pod_name
- 159
3.5 创建Prometheus Deployment
- 1 apiVersion: apps/v1beta2
- 2 kind: Deployment
- 3 metadata:
- 4 labels:
- 5 name: prometheus-deployment
- 6 name: prometheus-server
- 7 namespace: monitoring
- 8 spec:
- 9 replicas: 1
- 10 selector:
- 11 matchLabels:
- 12 app: prometheus-server
- 13 template:
- 14 metadata:
- 15 labels:
- 16 app: prometheus-server
- 17 spec:
- 18 containers:
- 19 - name: prometheus-server
- 20 image: prom/prometheus:v2.14.0
- 21 command:
- 22 - "/bin/prometheus"
- 23 args:
- 24 - "--config.file=/etc/prometheus/prometheus.yml"
- 25 - "--storage.tsdb.path=/prometheus/"
- 26 - "--storage.tsdb.retention=72h"
- 27 ports:
- 28 - containerPort: 9090
- 29 protocol: TCP
- 30 volumeMounts:
- 31 - name: prometheus-config-volume
- 32 mountPath: /etc/prometheus/
- 33 - name: prometheus-storage-volume
- 34 mountPath: /prometheus/
- 35 serviceAccountName: prometheus
- 36 imagePullSecrets:
- 37 - name: regsecret
- 38 volumes:
- 39 - name: prometheus-config-volume
- 40 configMap:
- 41 defaultMode: 420
- 42 name: prometheus-server-conf
- 43 - name: prometheus-storage-volume
- 44 emptyDir: {}
- 45
- 1 apiVersion: v1
- 2 kind: PersistentVolumeClaim
- 3 metadata:
- 4 name: prometheus-pvc
- 5 namespace: monitoring
- 6 annotations:
- 7 volume.beta.kubernetes.io/storage-class: ghstorageclass
- 8 spec:
- 9 accessModes:
- 10 - ReadWriteMany
- 11 resources:
- 12 requests:
- 13 storage: 5Gi
[root@k8smaster01 examples]# kubectl create -f prometheus-pvc.yaml
- 1 ……
- 2 - name: prometheus-storage-volume
- 3 persistentVolumeClaim:
- 4 claimName: prometheus-pvc
- 5 ……
- 6
3.6 创建Prometheus Service
kind: Service
metadata:
labels:
app: prometheus-service
name: prometheus-service
namespace: monitoring
spec:
type: NodePort
selector:
app: prometheus-server
ports:
- port: 9090
targetPort: 9090
nodePort: 30909
3.7 测试Prometheus



四 部署Grafana
4.1 获取部署文件
4.2 部署grafana
- 1 ---
- 2 apiVersion: v1
- 3 kind: Service
- 4 metadata:
- 5 name: grafana
- 6 namespace: monitoring
- 7 labels:
- 8 app: grafana
- 9 spec:
- 10 type: NodePort
- 11 ports:
- 12 - port: 3000
- 13 targetPort: 3000
- 14 nodePort: 30007
- 15 selector:
- 16 app: grafana
- 17 ---
- 18 apiVersion: extensions/v1beta1
- 19 kind: Deployment
- 20 metadata:
- 21 labels:
- 22 app: grafana
- 23 name: grafana
- 24 namespace: monitoring
- 25 spec:
- 26 replicas: 1
- 27 revisionHistoryLimit: 2
- 28 template:
- 29 metadata:
- 30 labels:
- 31 app: grafana
- 32 spec:
- 33 containers:
- 34 - name: gragana
- 35 image: grafana/grafana:5.0.0
- 36 imagePullPolicy: IfNotPresent
- 37 ports:
- 38 - containerPort: 3000
- 39 volumeMounts:
- 40 - mountPath: /var
- 41 name: grafana-storage
- 42 env:
- 43 - name: GF_AUTH_BASIC_ENABLED
- 44 value: "false"
- 45 - name: GF_AUTH_ANONYMOUS_ENABLED
- 46 value: "true"
- 47 - name: GF_AUTH_ANONYMOUS_ORG_ROLE
- 48 value: Admin
- 49 - name: GF_SERVER_ROOT_URL
- 50 # value: /api/v1/proxy/namespaces/default/services/grafana/
- 51 value: /
- 52 readinessProbe:
- 53 httpGet:
- 54 path: /login
- 55 port: 3000
- 56 volumes:
- 57 - name: grafana-storage
- 58 emptyDir: {}
- 59 nodeSelector:
- 60 node-role.kubernetes.io/master: "true"
- 61 # tolerations:
- 62 # - key: "node-role.kubernetes.io/master"
- 63 # effect: "NoSchedule"
- 64

4.3 确认验证

4.4 配置数据源




4.5 配置Grafana
4.6 添加用户


4.7 其他设置

4.8 查看监控
050.集群管理-Prometheus+Grafana监控方案的更多相关文章
- 049.Kubernetes集群管理-集群监控Metrics
一 集群监控 1.1 Metrics Kubernetes的早期版本依靠Heapster来实现完整的性能数据采集和监控功能,Kubernetes从1.8版本开始,性能数据开始以Metrics API的 ...
- Kubernetes容器集群管理环境 - Prometheus监控篇
一.Prometheus介绍之前已经详细介绍了Kubernetes集群部署篇,今天这里重点说下Kubernetes监控方案-Prometheus+Grafana.Prometheus(普罗米修斯)是一 ...
- 基于k8s集群部署prometheus监控ingress nginx
目录 基于k8s集群部署prometheus监控ingress nginx 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署pro ...
- 基于k8s集群部署prometheus监控etcd
目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...
- 容器、容器集群管理平台与 Kubernetes 技术漫谈
原文:https://www.kubernetes.org.cn/4786.html 我们为什么使用容器? 我们为什么使用虚拟机(云主机)? 为什么使用物理机? 这一系列的问题并没有一个统一的标准答案 ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
- Kubernetes容器集群管理环境 - 完整部署(下篇)
在前一篇文章中详细介绍了Kubernetes容器集群管理环境 - 完整部署(中篇),这里继续记录下Kubernetes集群插件等部署过程: 十一.Kubernetes集群插件 插件是Kubernete ...
- cAdvisor+Prometheus+Grafana监控docker
cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...
- jmx_exportter+prometheus+grafana监控hadoop
0.介绍(摘录自https://www.hi-linux.com/posts/25047.html) 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和 ...
随机推荐
- centos7上Jenkins通过rpm包方式直接安装及使用war包方式升级
一.通过rpm包方式直接安装jenkins 1.官网下载rpm安装包(前提是安装jdk) wget https://pkg.jenkins.io/redhat-stable/jenkins-2.121 ...
- 手把手教你利用Jenkins持续集成iOS项目
前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一 ...
- celery beat之pidfile already exists问题
背景 在进行celery定时任务测试时,发现到点任务并未执行,检查了log发现在启动celery beat的时候有这样一个报错,所以celery beat并未启动成功. 1234 (hzinfo) E ...
- Flink命令行提交job (源码分析)
这篇文章主要介绍从命令行到任务在Driver端运行的过程 通过flink run 命令提交jar包运行程序 以yarn 模式提交任务命令类似于: flink run -m yarn-cluster X ...
- 机器学习- RNN以及LSTM的原理分析
概述 RNN是递归神经网络,它提供了一种解决深度学习的另一个思路,那就是每一步的输出不仅仅跟当前这一步的输入有关,而且还跟前面和后面的输入输出有关,尤其是在一些NLP的应用中,经常会用到,例如在NLP ...
- SpringCloud入门(六): Hystrix监控
Hystrix.stream 监控 <!--. 配置pom文件,引入actuator包--> <dependency> <groupId>org.springfra ...
- flask-restful 初探
flask-restful 是 Flask 的一个用于支持 RESTful 的插件. 刚开始用对我来说还是比较坑的... 目录结构 / /test /test/common /__init__.py ...
- 弹性盒子Flex Box滚动条原理,避免被撑开,永不失效
在HTML中,要实现区域内容的滚动,只需要设定好元素的宽度和高度,然后设置CSS属性overflow 为auto或者scroll: 在Flex box布局中,有时我们内容的宽度和高度是可变的,无法 ...
- vue-cli “从入门到放弃”
主要作用:目录结构.本地调试.代码部署.热加载.单元测试 在如今前端技术飞速发展的时代,angular.js.vue.js 和 react.js 作为前端框架已经呈现出了三国鼎立的局面.作为国人若你不 ...
- ubuntu16.04卸载docker
1.sudo apt-get remove docker-ce 2.apt-get remove -y docker-* rm -rf /var/lib/docker