2024-06-14
Prometheus
1、特点
Prometheus 相比于其他传统监控工具主要有以下几个特点:
- 具有由 metric 名称和键值对标识的时间序列数据的多维数据模型
- 有一个灵活的查询语言
- 不依赖分布式存储,只和本地磁盘有关
- 通过 HTTP 的服务拉取时间序列数据
- 也支持推送的方式来添加时间序列数据
- 还支持通过服务发现或静态配置发现目标
- 多种图形和仪表板支持
2、组件
Prometheus Server
:用于抓取指标、存储时间序列数据exporter
:暴露指标让任务来抓pushgateway
:push 的方式将指标数据推送到该网关alertmanager
:处理报警的报警组件adhoc
:用于数据查询
3、监控应用的两种方式
1、暴露metrics接口给promethus
2、通过exporter
4、对集群节点的监控
1、对于集群的监控一般我们需要考虑以下几个方面:
- Kubernetes 节点的监控:比如节点的 cpu、load、disk、memory 等指标
- 内部系统组件的状态:比如 kube-scheduler、kube-controller-manager、kubedns/coredns 等组件的详细运行状态
- 编排级的 metrics:比如 Deployment 的状态、资源请求、调度和 API 延迟等数据指标
2、由于我们要获取到的数据是主机的监控指标数据,而我们的 node-exporter
是运行在容器中的,所以我们在 Pod 中需要配置一些 Pod 的安全策略,这里我们就添加了 hostPID: true
、hostIPC: true
、hostNetwork: true
3个策略,用来使用主机的 PID namespace
、IPC namespace
以及主机网络,这些 namespace 就是用于容器隔离的关键技术,要注意这里的 namespace 和集群中的 namespace 是两个完全不相同的概念。
另外我们还将主机的 /dev
、/proc
、/sys
这些目录挂载到容器中,这些因为我们采集的很多节点数据都是通过这些文件夹下面的文件来获取到的,比如我们在使用 top
命令可以查看当前 cpu 使用情况,数据就来源于文件 /proc/stat
,使用 free
命令可以查看当前内存使用情况,其数据来源是来自 /proc/meminfo
文件。
另外由于我们集群使用的是 kubeadm
搭建的,所以如果希望 master 节点也一起被监控,则需要添加相应的容忍
3、让 Prometheus 去自动发现我们节点的 node-exporter
程序,并且按节点进行分组呢?这就是 Prometheus 里面非常重要的服务发现功能了。
在 Kubernetes 下,Promethues 通过与 Kubernetes API 集成,主要支持5中服务发现模式,分别是:Node
、Service
、Pod
、Endpoints
、Ingress
。
要让 Prometheus 也能够获取到当前集群中的所有节点信息的话,我们就需要利用 Node 的服务发现模式,同样的,在 prometheus.yml
文件中配置如下的 job 任务即可:
1 | - job_name: 'kubernetes-nodes' |
通过指定 kubernetes_sd_configs
的模式为node
,Prometheus 就会自动从 Kubernetes 中发现所有的 node 节点并作为当前 job 监控的目标实例,发现的节点 /metrics
接口是默认的 kubelet 的 HTTP 接口。
Prometheus Operator
上图是 Prometheus-Operator 官方提供的架构图,各组件以不同的方式运行在 Kubernetes 集群中,其中 Operator 是最核心的部分,作为一个控制器,他会去创建Prometheus、ServiceMonitor、AlertManager 以及 PrometheusRule 4个 CRD 资源对象,然后会一直监控并维持这4个资源对象的状态。
Operator
:根据自定义资源来部署和管理 Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。Prometheus
:声明 Prometheus 资源对象期望的状态,Operator 确保这个资源对象运行时一直与定义保持一致。Prometheus Server
:Operator 根据自定义资源 Prometheus 类型中定义的内容而部署的 Prometheus Server 集群,这些自定义资源可以看作是用来管理 Prometheus Server 集群的 StatefulSets 资源。ServiceMonitor
:声明指定监控的服务,描述了一组被 Prometheus 监控的目标列表,就是 exporter 的抽象,用来提供 metrics 数据接口的工具。该资源通过 Labels 来选取对应的 Service Endpoint,让 Prometheus Server 通过选取的 Service 来获取 Metrics 信息。Service
:简单的说就是 Prometheus 监控的对象。Alertmanager
:定义 AlertManager 资源对象期望的状态,Operator 确保这个资源对象运行时一直与定义保持一致。
Promethus(普罗米修斯)监控Mysql数据库
prometheus 监控mysql监控什么
Mysql所在的节点服务器的Ⅰ/O读写压力磁盘使用量、内存使用量(阈值-比如该节点的磁盘使用量是否超过总量的80%)
监控mysql的健康状态(是否宕机)Mysql所在的节点,其他的服务组件
mysql所在的服务器的网络状态(传输的速率波动)
被监控的mysql服务器安装mysql_exporter,安装MariaDB 数据库,授权为localhost(因为不是prometheus服务器来直接找mariadb 获取数据,而是prometheus服务器找mysql_exporter,mysql_exporter 再找mariadb。所以这个localhost是指的mysql_exporter的IP),创建一个mariadb配置文件,启动mysqld_exporter,确认端口(9104),在prometheus服务器的配置文件里添加被监控的mariadb的配置段
1 | vim /usr/local/prometheus/prometheus.yml |
重启服务
回到web管理界面 –》点Status –》点Targets –》可以看到监控 mariadb了