监控告警平台
Zabbix、Prometheus
CI/CD平台
Jenkins+glab+sq+argoCD+tekton
自动化运维平台
监控告警是个非常重要的平台
Prometheus
![13-[信创]-K8s的监控-kube-prometheus-安装_服务发现](https://s2.51cto.com/images/blog/front/202505/03b830079732cc8aa32124815c1da204a35150.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
prometheus有很多组件组成
上图中间部分Prometheus server 就是我们所安装运行的Prometheus服务,这个Prometheus本身需要后端的存储:TSDB
Prometheus本身是一种数据库,TSDB就是一种数据库类型,这种数据库叫时序数据库,它本身就是一个横轴和数轴,xy轴。采集的数据存储在TSDB数据库里面 TSDB是Prometheus底层使用的数据的机制,叫TSDB,数据最终还是存储在对应Prometheus server对应的 硬盘上面,只是读取的方式是数据库读取,和文件系统读取不大一样,不是一个可读的文件方式 prometheus除了TSDB以外还给提供了 HTTP Server 有个UI界面 Prometheus只能负责采集数据和存储数据,本身没有报警和展示的功能,提供的HTTP Server不是展示ui界面,只是提供了查询界面,本身没有告警功能,没有生成绚丽的图形化的功能,针对这俩功能,有另外两个组件,上图右上,Alert manager:能够发报警的,短信微信钉钉,发送报警的组件 上图右下 Grafana 提供绚丽的ui,展示的组件,Grafana展示的数据是通过 Prometheus内部的查询语言叫Prom QL (Prom就是Prometheus,QL就是查询语言的意思,比如之前的SQL,S就是结构化的意思,QL是查询语言,SQL结构化查询语言) Prom QL 就是prometheus 创造的,之后还有很多应用采用了这种语言 整个Prometheus最主要的三个组件就是:Prometheus server 和Alert manager 还有 Grafana 还有一些服务发现组件,上图中上 Service discovery 服务发现组件,这个服务发现组件事实上我们呢可以基于文件系统级别的,可能就弄个文件, 什么叫服务发现:比如我们要监控主机,k8s集群有master节点和node节点,在我们这怎么知道集群有多少node节点,有多少master节点呢?我们是把节点加到集群上来,不管是master节点还是node节点,都是通过etcd存储,通过apiserver通信,所有的添加的组件都是添加剂etcd数据库里面的,etcd就类似一个服务发现,它能够通过注册到etcd服务里面来,知道你有多少个node,多少个pod,多少个kubelet kubeproxy 组件 prometheus 未来加监控,我们要动态知道有那些节点要加入到 prometheus server 里面来,我们可以通过服务发现的组件,服务发现的组件可以是我们的k8s集群,我们待会就基于k8s集群来做服务发现,也就是基于etcd的,第二种还有基于file_sd 一个文件系统的,整个文件的,就是我从文件里面定义好我把那些东西加进来,他就可以自动的去监控文件的变化。通过监控一个静态的文件的变化来实现服务的发现,除了这个以外还有很多。 我们这次基于k8s环境来做服务发现 上图中间和右面是常用的组件 上图左面 Pushgateway 就是我们prometheus server默认情况下怎么发现服务的呢?他是主动的方式,prometheus自己主动去发现那些监控的各种各样的角色,这叫主动模式,还有一些情况比较特殊,比如我现在有一个节点需要监控但是节点本身和prometheus主机本身网络不通,不在一个网络下,那prometheus无法主动去发现它,获取不到数据,然后就有这个Phshgatway的组件,这个组件是去发现node节点,或者node节点把想要监控的数据传给pushgateway 然后由pushgateway主动的把数据传给prometheus ,push方式 上传 ,就是pushgateway 主动的把采集的主机传给prometheusserver 这是被动的方式
prometheus 最主要的还是主动的方式,
上图左下 Jobs就是添加的各种各样的监控项,比如监控pod是否运行。jobs是通过exporters来去采集数据 如果想去自己写exporters 就需要自己懂开发的内容,但是现在不需要去写,都有对应的写好的
这就是prometheus的架构模型
➢ Prometheus Server:Prometheus 生态最重要的组件, 主要用于抓取和存储时间序 列数据, 同时
提供数据的查询和告警策略的配置管理;
➢ Alertmanager:Prometheus 生态用于告警的组件,Prometheus Server 会将告警发 送给
Alertmanager ,Alertmanager 根据路由配置,将告警信息发送给指定的人或 组。Alertmanager 支持邮件、Webhook、微信、钉钉、短信等媒介进行告警通知;
➢ Grafana:用于展示数据, 便于数据的查询和观测;
➢ Push Gateway:Prometheus 本身是通过 Pull 的方式拉取数据, 但是有些监控数据 可能是短期的, 如果没有采集数据可能会出现丢失。Push Gateway 可以用来解决 此类问题,它可以用来接收数据,也就是客户端可以通过 Push 的方式将数据推送 到 Push Gateway,之后 Prometheus 可以通过 Pull拉取该数据;
➢ Exporter:主要用来采集监控数据, 比如主机的监控数据可以通过 node_exporter 采集, MySQL的监控数据可以通过 mysql_exporter 采集,之后 Exporter 暴露一个 接口,比如/metrics ,Prometheus 可以通过该接口采集到数据;
➢ PromQL:PromQL 其实不算 Prometheus 的组件, 它是用来查询数据的一种语法, 比如查询数据库的数据,可以通过 SQL 语句,查询 Loki 的数据,可以通过 LogQL, 查询 Prometheus 数据的叫做
PromQL;
➢ Service Discovery:用来发现监控目标的自动发现,常用的有基于 Kubernetes、 Consul 、Eureka 、文件的自动发现等。Prometheus安装
https://ghub.com/prometheus-operator
我们用的k8s集群是1.21的,我们使用prometheus最低版本是0.8
operator是一种包
如果是虚拟机安装那么更简单了,直接下载二进制包就行,都不需要安装
二进制官网下载地址
https://prometheus.io/download/
k8s安装方法
https://ghub.com/prometheus-operator/kube-prometheus
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.8.0.tar.gz
[root@master01 kube-prometheus]# tar xf kube-prometheus-0.8.0.tar.gz
[root@master01 kube-prometheus]# cd kube-prometheus-0.8.0/
[root@master01 kube-prometheus-0.8.0]# cd manifests/
[root@master01 manifests]# kubectl apply -f setup/
[root@master01 manifests]# kubectl apply -f .登录Prometheus UI界面
[root@master01 manifests]# vim ./prometheus-service.yaml
[root@master01 manifests]# kubectl apply -f ./prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: prometheus
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 2.26.0
prometheus: k8s
name: prometheus-k8s
namespace: monitoring
spec:
type: NodePort #添加类型为NodePort
ports:
- name: web
port: 9090
targetPort: web
selector:
app: prometheus
app.kubernetes.io/component: prometheus
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
prometheus: k8s
# sessionAffinity: ClientIP
# 注释掉[root@master01 manifests]# kubectl apply -f ./prometheus-service.yaml
[root@master01 manifests]# kubectl get svc -n monitoring prometheus-k8s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus-k8s NodePort 10.105.1.233 <none> 9090:32330/TCP 10h浏览器访问IP+32330
![13-[信创]-K8s的监控-kube-prometheus-安装_数据_02](https://s2.51cto.com/images/blog/front/202505/15fd5b662f570b0e7c6346d7d21984c380c089.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
登录Garafana UI界面
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 7.5.4
name: grafana
namespace: monitoring
spec:
type: NodePort #增加这个
ports:
- name: http
port: 3000
targetPort: http
selector:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus[root@master01 manifests]# kubectl apply -f grafana-service.yaml
[root@master01 manifests]# kubectl get svc -n monitoring grafana
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana NodePort 10.101.232.40 <none> 3000:27477/TCP 11h浏览器访问IP+27477
![13-[信创]-K8s的监控-kube-prometheus-安装_IP_03](https://s2.51cto.com/images/blog/front/202505/3774362664b4cf293261764b2205033d924a85.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184)
这个先不管,先把k8s所有组件都监控起来
















