📦 Kubernetes版本 1.18,使用容器部署 Prometheus-operator版本为 0.6

🏆 Prometheus基础

🍪 简介

Prometheus与其他监控不同的特性:

  • 多维的数据模型,具有由指标名称和键值对标识的时间序列
  • 使用 PromQL查询数据
  • 本省就是一个时序数据库,且提供本地存储和分布式存储,每个 Prometheus都是自治的
  • 对云原生应用兼容,云原生应用通常保留 metrics接口,Prometheus可以直接通过来拿数据
  • 同时可以使用 PushGatewayPush数据(后文会说)
  • 提供服务动/静态服务发现机制

Prometheus架构图

image-20241022165242145
  • Prometheus Server: 主要用于抓取和存储时间序列数据,同时提供擦好像和告警配置
  • AlterManager: 由于告警,Server会将告警发送给 AlterManagerAlterManager在根据路由配置告警信息发送给指定的目的,支持 email、钉钉等
  • Grafana: 用于更好的展示数据
  • Push Gateway: Prometheus本身是通过 pull拿取数据,但是某些监控数据可能是短期的,如果没有及时采集就会出现数据丢失。客户端可以通过 Push向它发送数据,之后 Prometheus直接从它获取数据就可以解决
  • Exporter: 用来采集监控数据,支持很多不是"云原生"应用的数据监控,比如 Mysql可以通过 mysqld_exportermysql中采集数据,Prometheus通过 mysqld_exporter 暴露的端口获取数据即可,云原生和 exporter暴露的端口通常是 metrics
  • PromQL: 是 Prometheus用于查询的语法类似于 Sql
  • Service Discovery: 用来发现监控目标的服务

💻 Prometheus安装

使用 kube-prometheus来安装

由于使用的 k8s v1.18版本比较老,如果是其他版本请自行从 github 中查询对应版本兼容https://github.com/prometheus-operator/kube-prometheus

image-20241022171514189

1️⃣ 使用 git clonePrometheus-operator克隆至本地

git clone --single-branch  --branch release-0.6  https://github.com/prometheus-operator/kube-prometheus.git

进入 clone下来的目录查看

[root@k8s-master prometheus]# ls
build.sh            example.jsonnet  go.sum            jsonnetfile.lock.json  manifests  scripts
code-of-conduct.md  examples         hack              kustomization.yaml     NOTICE     sync-to-internal-registry.jsonnet
DCO                 experimental     jsonnet           LICENSE                OWNERS     tests
docs                go.mod           jsonnetfile.json  Makefile               README.md  test.sh
[root@k8s-master prometheus]# git branch 
* release-0.6

2️⃣ 安装部署,进入 clone下来的目录下的 manifests目录执行如下命令安装 Prometheus Operator

[root@k8s-master manifests]# kubectl apply -f setup/

查看 operator是否启动

[root@k8s-master manifests]# kubectl  get pod -n monitoring  | grep prometheus-operator
prometheus-operator-75c98bcfd7-lglzj   2/2     Running   2          45h

启动之后就可以部署 altermanager等其他组件了,在 manifests直接使用下条命令,这里可以选择不按照 Grafana,只需要排除掉 Grafana的文件即可

##如果不需要Granfana
mv grafana-* /opt 
kubectl apply -f ./

##如果需要安装直接执行如下命令即可
kubectl apply -f ./

查看是否启动,我这里是没有使用它的配置安装 Grafana

[root@k8s-master manifests]# kubectl get pod -n monitoring 
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager-main-0                    2/2     Running   2          45h
alertmanager-main-1                    2/2     Running   2          45h
alertmanager-main-2                    2/2     Running   2          45h
kube-state-metrics-69d4c7c69d-wdqpj    3/3     Running   3          45h
node-exporter-wkdmk                    2/2     Running   2          45h
node-exporter-xgrf2                    2/2     Running   2          45h
prometheus-adapter-66b855f564-j69k6    1/1     Running   1          45h
prometheus-k8s-0                       3/3     Running   1          19h
prometheus-k8s-1                       3/3     Running   1          19h
prometheus-operator-75c98bcfd7-lglzj   2/2     Running   2          45h

3️⃣ 修改 PrometheusGrafana svcNodePort,没有安装 Grafana只需修改 Prometheus

## Prometheus 将type修改为NodePort即可
kubectl edit svc prometheus-k8s -n monitoring
....
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 10800
  type: NodePort
....



##Grafana 同理
kubectl edit svc grafana -n monitoring
....
  type: NodePort
....

分别查看

[root@k8s-master manifests]# kubectl  get svc -n monitoring prometheus-k8s 
NAME             TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
prometheus-k8s   NodePort   10.104.62.57   <none>        9090:30080/TCP   45h


## 我这里之前就安装好了grafana
[root@k8s-master manifests]# kubectl  get svc -n loki loki-grafana 
NAME           TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
loki-grafana   NodePort   10.100.113.131   <none>        80:31044/TCP   5d

5️⃣ 浏览器查看,输入 ip:对应端口即可

Prometheus:

image-20241022173924510

grafana:

image-20241022174019456

6️⃣ 如果是之前安装的 grafana,不是使用 kube-prometheus 安装的就需要天机 Prometheus

路径为 Grafana WebUI ---> Connections---> Data sources ---> add new data sources 配置如下拉至后面保存即可

image-20241022174251905

dashboard中导入填写id 13105,即可获得一个炫酷的UI

image-20241022174414919