Prometheus
//组件说明:
(1)MetricServer:是kubernetes集群资源使用情况的聚合器,收集数据给kubernetes集群内使用,如kubectl、hpa、scheduler等。
(2)PrometheusOperator:是一个系统监测和警报工具箱,用来存储监控数据。
(3)NodeExporter:用于收集各 node 的关键度量指标状态数据,如平均负载、CPU、内存、磁盘、网络等等多个维度的指标数据。
(4)KubeStateMetrics:收集kubernetes集群内资源对象数据,制定告警规则。包括指定类型的对象总数、资源限额、容器状态以及Pod资源标签系列等。
(5)Prometheus server:采用 pull 方式收集 apiserver、scheduler、controller-manager、kubelet 组件数据,通过 http 协议 传输。并存储时间序列数据。
(6)Grafana:是可视化数据统计和监控平台
(7)Alertmanager:是一个独立的告警模块,从 Prometheus server 端接收到 alerts 后,会进行去重、分组, 并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉等。
(8)Pushgateway: 各个目标主机可上报数据到 Pushgateway,然后 Prometheus server 统一从 Pushgateway 拉取数据。
//Prometheus 概述:
Prometheus 是一个开源的服务监控系统和时序数据库,其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件 Prometheus服务器会定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉取数据,当新拉取到的数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。
每个被监控的主机都可以通过专用的 exporter 程序提供输出监控数据的接口,它会在目标处收集监控数据,并暴露出一个 HTTP 接口 供 Prometheus 查询,Prometheus 通过基于 HTTP 的 pull 的方式来周期性的采集数据。
如果存在告警规则,则抓取到数据之后会根据规则进行计算,满足告警条件则会生成告警,并发送到 Alertmanager 完成告警的汇总和分发。
当被监控的目标有主动推送数据的需求时,可以以 Pushgateway 组件进行接收并临时存储数据,然后等待 Prometheus 服务器完成数据的采集。
任何被监控的目标都需要事先纳入到监控系统中才能进行时序数据采集、存储、告警和展示,监控目标可以通过配置信息以静态形式指定,也可以让 Prometheus 通过服务发现的机制进行动态管理。
Prometheus 能够直接把 API Server 作为服务发现系统使用,进而动态发现和监控集群中的所有可被监控的对象。
这里需要特别说明的是,Pod资源需要添加下列注解信息才能被 Prometheus 系统自动发现并抓取其内建的指标数据。
●prometheus.io/scrape:用于标识是否需要被采集指标数据,布尔型值,true 或 false。
●prometheus.io/path:抓取指标数据时使用的 URL 路径,一般为 /metrics。
●prometheus.io/port:抓取指标数据时使用的套接字端口,如 8080。
Prometheus 生态系统包含了几个关键的组件:Prometheus server、Exporter、Pushgateway、Alertmanager、Web UI 等, 但是大多数组件都不是必需的。
其中最核心的组件是 Prometheus server,它负责收集和存储指标数据,支持表达式查询,和告警的生成。
//Prometheus server由三个部分组成:Retrieval,Storage,PromQL
●Retrieval:负责在活跃的 target 主机上抓取监控指标数据。
●Storage:存储,主要是把采集到的数据存储到磁盘中。
●PromQL:是 Prometheus 提供的查询语言模块。
//Prometheus 工作流程:
(1)Prometheus Server 以其 Server 为核心,用于收集和存储时间序列数据。Prometheus Server 从监控目标中通过 pull 方式拉取指标数据,或通过 pushgateway 把采集的数据上报到Prometheus server 中。
(2)Prometheus server 把采集到的监控指标数据存储到本地 HDD/SSD 中。
(3)Prometheus 采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的报警发送到 Alertmanager。
(4)Alertmanager 通过配置报警接收方,发送报警到邮件,微信或者钉钉等。
(5)Prometheus 自带的 Web UI 界面提供 PromQL 查询语言,可查询监控数据。
(6)Grafana 可接入 Prometheus 数据源,把监控数据以图形化形式展示出。
Prometheus github 地址:https://github.com/coreos/kube-prometheus
------------------- Prometheus 部署 -------------------
//在 Master 节点上传 kube-prometheus.git.tar.gz 压缩包到 /opt 目录
cd /opt
tar zxvf kube-prometheus.git.tar.gz
cd /opt/kube-prometheus/manifests
//修改 grafana-service.yaml 文件,使用 NodePort 方式访问 grafana
vim grafana-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: grafana
name: grafana
namespace: monitoring
spec:
type: NodePort #添加 NodePort 类型
ports:
- name: http
port: 3000
targetPort: http
nodePort: 30100 #添加 NodePort 接口
selector:
app: grafana
//修改 prometheus-service.yaml,使用 NodePort 方式访问 prometheus
vim prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
prometheus: k8s
name: prometheus-k8s
namespace: monitoring
spec:
type: NodePort #添加
ports:
- name: web
port: 9090
targetPort: web
nodePort: 30200 #添加
selector:
app: prometheus
prometheus: k8s
sessionAffinity: ClientIP
//修改 alertmanager-service.yaml,改为 NodePort
vim alertmanager-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
alertmanager: main
name: alertmanager-main
namespace: monitoring
spec:
type: NodePort #添加
ports:
- name: web
port: 9093
targetPort: web
nodePort: 30300 #添加
selector:
alertmanager: main
app: alertmanager
sessionAffinity: ClientIP
//在所有节点上传 prometheus.tar.gz 镜像包到 /opt 目录,并导入镜像
cd /opt
tar zxvf prometheus.tar.gz
vim load-image.sh
#!/bin/bash
cd ./prometheus
for i in $(ls)
do
docker load -i $i
done
chmod +x load-image.sh
./load-image.sh
//创建 prometheus 相关资源
cd /opt/kube-prometheus/manifests
kubectl apply -f . #至少执行两次此命令,使资源之间能够互相连接
//prometheus 默认被部署在 k8s 集群中的 kube-system 命令空间下
kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 2/2 Running 0 3m47s
alertmanager-main-1 2/2 Running 0 2m35s
alertmanager-main-2 2/2 Running 0 107s
grafana-7dc5f8f9f6-xsd5q 1/1 Running 0 3m54s
kube-state-metrics-5cbd67455c-x4fv8 4/4 Running 0 3m38s
node-exporter-8jvhc 2/2 Running 0 3m53s
node-exporter-nnw7q 2/2 Running 0 3m53s
node-exporter-x47l8 2/2 Running 0 3m53s
prometheus-adapter-668748ddbd-kp5b2 1/1 Running 0 3m53s
prometheus-k8s-0 3/3 Running 1 3m39s
prometheus-k8s-1 3/3 Running 1 3m39s
prometheus-operator-7447bf4dcb-99h72 1/1 Running 0 3m55s
//让 Pod 都运行一会儿,以便 Metrics 收集数据
kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
master 126m 6% 1672Mi 43%
node01 94m 4% 1166Mi 30%
node02 99m 4% 1203Mi 31%
kubectl top pods --all-namespaces
NAMESPACE NAME CPU(cores) MEMORY(bytes)
kube-system etcd-master 13m 72Mi
kube-system kube-apiserver-master 27m 361Mi
kube-system kube-controller-manager-master 8m 83Mi
kube-system kube-flannel-ds-amd64-4dgcs 1m 10Mi
kube-system kube-proxy-dcprb 4m 18Mi
kube-system kube-scheduler-master 0m 16Mi
monitoring kube-state-metrics-5cbd67455c-x4fv8 0m 42Mi
monitoring node-exporter-8jvhc 3m 12Mi
monitoring node-exporter-x47l8 1m 13Mi
monitoring prometheus-adapter-668748ddbd-kp5b2 0m 11Mi
monitoring prometheus-k8s-0 25m 196Mi
monitoring prometheus-k8s-1 7m 208Mi
kubectl get svc -n monitoring
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-main NodePort 10.96.241.13 <none> 9093:30300/TCP 8m33s
alertmanager-operated ClusterIP None <none> 9093/TCP,6783/TCP 8m24s
grafana NodePort 10.96.67.119 <none> 3000:30100/TCP 8m32s
kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 8m32s
node-exporter ClusterIP None <none> 9100/TCP 8m32s
prometheus-adapter ClusterIP 10.96.89.181 <none> 443/TCP 8m31s
prometheus-k8s NodePort 10.96.18.194 <none> 9090:30200/TCP 8m31s
prometheus-operated ClusterIP None <none> 9090/TCP 8m16s
prometheus-operator ClusterIP None <none> 8080/TCP 8m33s
//访问 Prometheus
浏览器访问: http://192.168.80.14:30200
点击 Status 选项选择 Targets,可以看到 prometheus 已经成功连接上了 k8s 的 apiserver,如果 State 都为 UP 则代表 Prometheus 部署成功。
//Prometheus 的 WEB 界面上提供了基本的查询功能
点击 Prometheus 选项,比如输入以下查询命令,再按 Execute 按键确认;还可点击 Graph 按键查看图形界面
#查询 K8S 集群中每个 Pod 的 CPU 使用情况
sum by (pod_name)( rate(container_cpu_usage_seconds_total{image!="", pod_name!=""}[1m] ) )
//访问 grafana
浏览器访问: http://192.168.80.14:30100 ,用户名和密码默认都为 admin ,输入后会提示重设新的密码
//添加数据源 grafana 默认已经添加了 Prometheus 数据源,grafana 支持多种时序数据源,每种数据源都有各自的查询编辑器
点击左侧的 Configuration 选项,选择 prometheus 进入,默认已添加好相关数据源,直接点击 Test 按键测试是否正常。
再点击上方的 Dashboards 选项,导入默认自带的模板。
然后再点击左上角的 Home 选项,就可以选择你想要查看的相关资源状态信息了。
比如 Kubernetes/Nodes、Kubernetes/Pods、Kubernetes/API server 等资源状态信息。

浙公网安备 33010602011771号