k8s全栈-笔记6-Prometheus+Alertmanager构建监控系统

news2025/1/12 1:03:04

k8s全栈-笔记6-Prometheus+Alertmanager构建监控系统

实验环境:

Pormetheus+grafana+alertmanager安装在k8s集群,k8s环境如下

K8S集群角色IP主机名安装的组件
控制节点(master)172.20.252.181k8s-master01apiserver,controller-manager,schedule,
kubelet,etcd,kube-proxy,容器运行时,calico
工作节点(node)172.20.252.191k8s-node01kube-proxy,calico,coredns,容器运行时,kubelet
工作节点(node)172.20.252.192k8s-node02kube-proxy,calico,coredns,容器运行时,kubelet

Prometheus特点

  1. 多维度数据模型

每一个时间序列数据由metric度量指标名称和它的标签labels键值对集合唯一确定:

这个metric度量指标名称指定监控目标系统的测量特征(如: http_requests_total– 接受http请求的总计数)

labels开启了Prometheus的多维数据模型: 对于相同的度量名称,通过不同标签结合,会形成特定的度量维度标签.(例如: 所有包含度量名称为/api/tracks的http请求,打上method=POST的标签,则形成了具体的http请求).这个查询语言在这些度量和标签列表的基础上进行过滤和聚合.改变任何度量上的任何标签值,则会形成新的时间序列图.

  1. 灵活的查询语言(PromQL)

可以对采集的metrics指标进行加法,乘法,连接等操作.

  1. 可以直接在本地部署,不依赖其他分布式存储;

但是一般生产环境都要添加存储

  1. 通过HTTP的pull方式采集时序数据;

docker pull

  1. 可以通过中间网关pushgateway 的方式把时间序列数据推送到 prometheus server端;

  2. 可通过服务发现或者静态配置来发现目标服务对象(targets).

  3. 有多种可视化图像界面,如Grafana等.

  4. 高效地存储,每个采样数据占3.5bytes左右,300万的时间序列,30s间隔,保留60天,消耗的磁盘大概200G.

  5. 做高可用, 可以对数据做异地备份, 联邦集群, 部署多套prometheus, pushgateway 上报数据.

样本

在时间序列中的每一个点称为一个样本(sample), 样本由以下三部分组成:

  1. 指标(metrics): 指标名称和描述当前样本特征的labelsets;
  2. 时间戳(timestamp): 一个精确到毫秒的时间戳;
  3. 样本值(value): 一个folat64的浮点型数据表示当前样本的值.

Prometheus组件介绍

靠Retrieval组件拉取监控指标数据

Prometheus工作流程

要能自己讲出来

Pormetheus和Zabbix对比

zabbix集群规模上限为10000个节点,prometheus支持更大的集群规模,速度也更快

zabbix更适合监控物理机环境. prometheus更适合云环境的监控,对Openstack, Kubernetes有更好的集成

zabbix监控数据存储在关系型数据库内,如MySQL,很难从现有数据中心扩展维度.prometheus监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合.

Prometheus的四种数据类型

Counter

Counter是计数器类型:

  1. Counter用于累计值,例如记录请求次数,任务完成数,错误发生数.
  2. 一直增加,不会减少.
  3. 重启进程后,不会被重置
Gauge

Gauge是测量器类型:

  1. Gauge是常规数值,例如温度变化,内存使用变化
  2. 可变大,可变小.
  3. 重启进程后,会被重置
Histogram

Histogram是柱状图,在Pormetheus系统的查询语言中,有三种作用:

  1. 在一段时间范围对数据进行采样(通常是请求持续时间或响应大小等),并将其记入可配置的存储桶(bucket)中,后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图.
  2. 对每个采样点值累计和(sum)
  3. 对采样点的次数累计和

度量指标名称: [basename]_上面三类的作用度量指标

  1. [basename]_bucket {le=“上边界”},这个值为小于等于上边界的所有采样点数量
  2. [basename]_sum
  3. [basename]_count

小结: 如果定义一个度量类型为Histogram, 则Prometheus会自动生成三个对应的指标

思考:为什么需要用histogram柱状图?

在大多数情况下人们都倾向于使用某些量化指标的平均值,例如CPU的平均使用率,页面的平均响应时间.

这种方式的问题也很明显,比如系统调用大多数API请求在100ms的响应时间范围,而个别请求响应时间需要5s,那么就会导致某些WEB页面的响应时间落到中位数的情况,而这种现象被称为长尾问题.

为了区分是平均的慢还是长尾的慢,最简单的方式就是按照请求延迟的范围进行分组

注意:

bucket 可以理解为是对数据指标值域的一个划分,划分的依据应该基于数据值的分布.注意后面的采样点是包含前面的采样点的

summary

与 Histogram类型类似,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算.它也有三种作用:

  1. 对每个采样点进行统计,并形成分位图.(如: 正态分布一样,统计低于60分不及格的同学比例,统计低于80分的同学比例,统计低于95分的同学比例)
  2. 统计班上所有同学的总成绩(sum)
  3. 统计班上同学的考试总人数(count)

实操

node-exporter组件安装和配置

[root@k8s-master01 ~]# kubectl create ns monitor-sa
namespace/monitor-sa created
# 创建namespace

[root@k8s-master01 prometheus+alertmanager-resources]# scp node-exporter.tar.gz k8s-node01:/root
node-exporter.tar.gz                                                                      100%   23MB  77.9MB/s   00:00    
[root@k8s-master01 prometheus+alertmanager-resources]# scp node-exporter.tar.gz k8s-node02:/root
node-exporter.tar.gz                                                                      100%   23MB  73.7MB/s   00:00    

docker load -i node-exporter.tar.gz
# 所有节点导入镜像
# 或者在网上docker pull拉取镜像

[root@k8s-master01 prometheus+alertmanager-resources]# cp node-export.yaml node-export.yaml.bak
[root@k8s-master01 prometheus+alertmanager-resources]# sed -ri "s#node-role.kubernetes.io/master#node-role.kubernetes.io/control-plane#g" node-export.yaml
# 因为kubernetes新版因为种族歧视标签从master改成了control-plane
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f node-export.yaml
daemonset.apps/node-exporter created
# 应用yaml文件
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get pods -n monitor-sa -o wide
NAME                  READY   STATUS    RESTARTS   AGE     IP               NODE           NOMINATED NODE   READINESS GATES
node-exporter-c9gxc   1/1     Running   0          5m33s   172.20.252.191   k8s-node01     <none>           <none>
node-exporter-nkvhb   1/1     Running   0          5m33s   172.20.252.192   k8s-node02     <none>           <none>
node-exporter-zflh7   1/1     Running   0          5m33s   172.20.252.181   k8s-master01   <none>           <none>
# 可以看到pod已经全部起来了
[root@k8s-master01 prometheus+alertmanager-resources]# curl 172.20.252.181:9100/metrics
# 测试查看数据
[root@k8s-master01 prometheus+alertmanager-resources]# curl 172.20.252.191:9100/metrics |grep node_load
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 0
# HELP node_load15 15m load average.
# TYPE node_load15 gauge
node_load15 0.05
# HELP node_load5 5m load average.
# TYPE node_load5 gauge
node_load5 0.03
100 67790  100 67790    0     0  7764k      0 --:--:-- --:--:-- --:--:-- 8275k
# 过滤查看k8s-node01负载

Prometheus server安装和配置

创建sa账号,对sa做rbac授权

[root@k8s-master01 ~]# kubectl create serviceaccount monitor -n monitor-sa
serviceaccount/monitor created
# 创建一个sa账号monitor
[root@k8s-master01 ~]# kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrole=cluster-admin --serviceaccount=monitor-sa:monitor
clusterrolebinding.rbac.authorization.k8s.io/monitor-clusterrolebinding created
# 把sa账号monitor通过clusterrolebind绑定到clusterrole上

创建数据存储目录

[root@k8s-node01 ~]# mkdir /data
[root@k8s-node01 ~]# chmod 777 /data/
# 在k8s集群的k8s-node01节点上创建数据存储目录

安装Prometheus server服务

[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f prometheus-cfg.yaml 
configmap/prometheus-config created
# 创建一个configmap存储卷,用来存放prometheus配置信息
[root@k8s-master01 prometheus+alertmanager-resources]# grep "\- source_labels: \[__address__]" prometheus-cfg.yaml -A10
      - source_labels: [__address__]
        regex: '(.*):10250'
        replacement: '${1}:9100'
        target_label: __address__
        action: replace
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
    - job_name: 'kubernetes-node-cadvisor'
      kubernetes_sd_configs:
      - role:  node
      scheme: https
[root@k8s-master01 prometheus+alertmanager-resources]# grep relabel_configs: prometheus-cfg.yaml 
      relabel_configs:
      relabel_configs:
      relabel_configs:
      relabel_configs:
# YAML文件要能大致看懂,特别是替换标签,然后为什么要替换.很重要!不懂就去看文档或者看视频
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get configmap -n monitor-sa
NAME                DATA   AGE
kube-root-ca.crt    1      27h
prometheus-config   1      22h

通过deployment部署prometheus

[root@k8s-master01 prometheus+alertmanager-resources]# scp prometheus-2-2-1.tar.gz k8s-node01:/root
prometheus-2-2-1.tar.gz                                                                   100%  109MB 109.4MB/s   00:01    
[root@k8s-master01 prometheus+alertmanager-resources]# scp prometheus-2-2-1.tar.gz k8s-node02:/root
prometheus-2-2-1.tar.gz                                                                   100%  109MB 109.4MB/s   00:01
# 传输镜像压缩包到工作节点

[root@k8s-node01 ~]# docker load -i prometheus-2-2-1.tar.gz
[root@k8s-node02 ~]# docker load -i prometheus-2-2-1.tar.gz
# 工作节点导入prometheus镜像

[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/xianchaonode1/k8s-node01/g" prometheus-deploy.yaml
# 因为前面在node01创建了数据存储目录,所以选择调度到node01
[root@k8s-master01 prometheus+alertmanager-resources]# grep web.enable prometheus-deploy.yaml 
          - --web.enable-lifecycle
# 意为开启热加载
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f prometheus-deploy.yaml 
deployment.apps/prometheus-server created
# 应用YAML文件
# 要明白yaml文件写的意思,不懂就看文档
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get deployment -n monitor-sa
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
prometheus-server   1/1     1            1           58s
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get pods -n monitor-sa
NAME                                 READY   STATUS    RESTARTS   AGE
node-exporter-c9gxc                  1/1     Running   0          24h
node-exporter-nkvhb                  1/1     Running   0          24h
node-exporter-zflh7                  1/1     Running   0          24h
prometheus-server-7f58cf897b-vlcgh   1/1     Running   0          24m
# 可以看到deployment已经部署成功
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f prometheus-svc.yaml 
service/prometheus created
# 应用YAML文件,需要理解内容
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get svc -n monitor-sa
NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
prometheus   NodePort   10.105.77.108   <none>        9090:32735/TCP   6s
# 查看service
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl describe svc kube-dns -n kube-system|grep Annotations -A1
Annotations:       prometheus.io/port: 9153
                   prometheus.io/scrape: true
# 意为可以被prometheus抓取信息

请添加图片描述

请添加图片描述

上图内容对应prometheus-cfg.yaml 文件内容

Prometheus热加载

使不停止prometheus,就可以使配置生效.

[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get pods -n monitor-sa -o wide -l app=prometheus
NAME                                 READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
prometheus-server-7f58cf897b-vlcgh   1/1     Running   0          80m   10.244.85.193   k8s-node01   <none>           <none>
[root@k8s-master01 prometheus+alertmanager-resources]# curl -X POST http://10.244.85.193:9090/-/reload
# 修改了想要使配置生效使用以上命令热加载,热加载速度较慢

注意:

线上最好热加载,暴力删除可能造成监控数据的丢失,除非你做了高可用,比如deployment写了两个副本,也就是启两个pod,那修改一个删除再创也不影响业务

Grafana介绍

是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知告警接收方.主要有以下六大特点:

  1. 展示方式: 快速灵活的客户端图表…

  2. 数据源: Prometheus,Elasticsearch…

  3. 通知提醒: 以可视方式定义最重要指标的警报规则…

  4. 混合展示: …

  5. 注释: …

安装Grafana

[root@k8s-master01 prometheus+alertmanager-resources]# scp heapster-grafana-amd64_v5_0_4.tar.gz k8s-node01:/root
heapster-grafana-amd64_v5_0_4.tar.gz                                                      100%  164MB  82.1MB/s   00:02    
[root@k8s-master01 prometheus+alertmanager-resources]# scp heapster-grafana-amd64_v5_0_4.tar.gz k8s-node02:/root
heapster-grafana-amd64_v5_0_4.tar.gz                                                      100%  164MB 164.2MB/s   00:01 
# 传输镜像压缩包到工作节点

# [root@k8s-node01 ~]# docker load -i heapster-grafana-amd64_v5_0_4.tar.gz 
# [root@k8s-node02 ~]# docker load -i heapster-grafana-amd64_v5_0_4.tar.gz 
# # 工作节点导入镜像,也可docker pull从网上拉取
[root@k8s-node01 ~]# ctr -n k8s.io images import heapster-grafana-amd64_v5_0_4.tar.gz 
[root@k8s-node02 ~]# ctr -n k8s.io images import heapster-grafana-amd64_v5_0_4.tar.gz 
# 应该使用ctr -n k8s.io images import导入镜像,因为k8s1.26使用容器运行时为containerd

[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f grafana.yaml 
deployment.apps/monitoring-grafana created
service/monitoring-grafana created
# 应用YAML文件
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get pods -n kube-system |grep monmonitoring-grafana-5c6bb4b6-phxg5         1/1     Running   0              3m52s
# 可以看到pod已经起来了
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get svc -n kube-system |grep mon
monitoring-grafana   NodePort    10.97.75.25   <none>        80:31649/TCP             3m24s
# 查看service

请添加图片描述

Grafana界面接入Prometheus数据源

展示物理机监控数据

请添加图片描述

添加完点击最下面 “Save & test” 出现绿色Data source is working就成功了

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

导入的监控模板,可在如下链接搜索

https://grafana.com/dashboards?dataSource=prometheus&search=kubernetes

可直接导入node_exporter.json监控模板,这个可以把node节点指标显示出来

请添加图片描述

请添加图片描述

请添加图片描述

可以看到,grafana展示的数据是接入prometheus的,如果有些数据无法展示,排错可以先去prometheus查一下,看有没有

展示容器监控数据

和以上步骤类似导入docker_rev1.json文件

请添加图片描述

从官网下载json文件导入

自己玩一下

换成新版grafana镜像,不然很多不支持

安装kube-state-metrics组件

[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f kube-state-metrics-rbac.yaml 
serviceaccount/kube-state-metrics created
clusterrole.rbac.authorization.k8s.io/kube-state-metrics created
clusterrolebinding.rbac.authorization.k8s.io/kube-state-metrics created
# 创建sa,授权sa

[root@k8s-master01 prometheus+alertmanager-resources]# scp kube-state-metrics_1_9_0.tar.gz k8s-node01:/root
kube-state-metrics_1_9_0.tar.gz                                                           100%   32MB  83.0MB/s   00:00    
[root@k8s-master01 prometheus+alertmanager-resources]# scp kube-state-metrics_1_9_0.tar.gz k8s-node02:/root
kube-state-metrics_1_9_0.tar.gz                                                           100%   32MB  73.1MB/s   00:00  
# 传输镜像压缩包到工作节点

[root@k8s-node01 ~]# ctr -n k8s.io images import kube-state-metrics_1_9_0.tar.gz 
[root@k8s-node02 ~]# ctr -n k8s.io images import kube-state-metrics_1_9_0.tar.gz 
# 导入镜像

[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f kube-state-metrics-deploy.yaml 
deployment.apps/kube-state-metrics created
# 应用YAML文件创建deployment
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f kube-state-metrics-svc.yaml 
service/kube-state-metrics created
# 创建service
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get svc -n kube-system |grep metrics
kube-state-metrics   ClusterIP   10.105.7.45   <none>        8080/TCP                 4m18s

请添加图片描述

[root@k8s-master01 prometheus+alertmanager-resources]# curl http://10.244.58.197:8080/metrics
...
# 测试请求

grafana导入两个json文件: "Kubernetes Cluster (Prometheus)-1577674936972.json"和 “Kubernetes cluster monitoring (via Prometheus) (k8s 1.16)-1577691996738.json”

请添加图片描述

N/A错误排查思路

请添加图片描述

请添加图片描述

请添加图片描述

可以看到N/A已经变成正常采集到的数据

Alertmanager配置详解

配置alertmanager–发送报警

报警: 指prometheus将检测到的异常事件发送给alertmanager

通知: alertmanager将报警信息发送到邮件,微信,钉钉等

请添加图片描述

将上述服务开启

[root@k8s-master01 prometheus+alertmanager-resources]# grep global alertmanager-cm.yaml -A5
    global:
      resolve_timeout: 1m
      smtp_smarthost: 'smtp.163.com:25'
      # 163邮箱的SMTP服务器地址+端口
      smtp_from: '15××××××××@163.com'
      # 这是指定从哪个邮箱发生告警
      smtp_auth_username: '15×××××××××'
      # 这是发送邮箱的认证用户,不是邮件名
      smtp_auth_password: 'BGWHYUOS××××××××' 
      # 这是发送邮箱的授权码而不是登录密码
# 将上述内容替换为自己想要发送告警邮件的账户邮箱
[root@k8s-master01 prometheus+alertmanager-resources]# grep email_configs alertmanager-cm.yaml  -A1
      email_configs:
      - to: '19×××××××××@qq.com'
      # 用于接收告警邮件的邮箱
# 将上述内容替换为自己想要接收告警邮件的账户邮箱
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f alertmanager-cm.yaml 
configmap/alertmanager created
# 应用YAML文件
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get configmap -n monitor-sa |grep alert
alertmanager        1      15s
Prometheus触发告警流程

需要理解

请添加图片描述

同时最后至于警报信息具体发给谁,满足什么样的条件下指定警报接收人,设置不同报警发送频率,这里由alertmanager的route路由规则进行配置

监控etcd组件
[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/192.168.40.180/172.20.252.181/g" prometheus-alertmanager-cfg.yaml 
[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/'192.168.40.181:10249'\]/'172.20.252.191:10249','172.20.252.192:10249'\]/g" prometheus-alertmanager-cfg.yaml
# 替换IP为自己的云主机IP地址
告警规则配置
[root@k8s-master01 prometheus+alertmanager-resources]# sed -n "178p" prometheus-alertmanager-cfg.yaml 
        expr: rate(process_cpu_seconds_total{job=~"kubernetes-controller-manager"}[1m]) * 100 > 0
        # 手动制造一个告警,将> 90改为> 0
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f prometheus-alertmanager-cfg.yaml 
configmap/prometheus-config configured
# 应用YAML文件,需要理解文件内容
Alertmanager发送报警到qq邮箱

[root@k8s-master01 prometheus+alertmanager-resources]# kubectl delete -f prometheus-cfg.yaml 
configmap "prometheus-config" deleted
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl create -f prometheus-alertmanager-cfg.yaml 
configmap/prometheus-config created
# 之前的yaml文件没有rules.yml

[root@k8s-master01 prometheus+alertmanager-resources]# scp alertmanager.tar.gz k8s-node01:/root
alertmanager.tar.gz                                                                       100%   32MB  65.9MB/s   00:00    
[root@k8s-master01 prometheus+alertmanager-resources]# scp alertmanager.tar.gz k8s-node02:/root
alertmanager.tar.gz                                                                       100%   32MB 104.9MB/s   00:00
# 传输镜像压缩包到工作节点

[root@k8s-node01 ~]# ctr -n k8s.io images import alertmanager.tar.gz
[root@k8s-node02 ~]# ctr -n k8s.io images import alertmanager.tar.gz
# 工作节点导入镜像

[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/xianchaonode1/k8s-node02/g" prometheus-alertmanager-deploy.yaml 
# 替换为自己的工作节点
这里不能替换为k8s-node02,详情见下方错误解决
应调度到k8s-node01
[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/k8s-node02/k8s-node01/g" prometheus-alertmanager-deploy.yaml 
# 修改调度为k8s-node01节点

[root@k8s-master01 prometheus+alertmanager-resources]# kubectl -n monitor-sa create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/server.key --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/ca.crt
secret/etcd-certs created
# 生成一个etcd-certs,这个在部署prometheus需要
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl delete -f prometheus-deploy.yaml 
deployment.apps "prometheus-server" deleted
# 删除旧的deployment
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f prometheus-alertmanager-deploy.yaml 
deployment.apps/prometheus-server created
# 应用新的YAML文件
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f alertmanager-svc.yaml 
service/alertmanager created
# 创建service,需要理解yaml文件
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get svc -n monitor-sa |grep alert
alertmanager   NodePort   10.108.21.13    <none>        9093:30066/TCP   2m22s
# 查看service

请添加图片描述

报错解决

本次报错解决方法基于询问chatgpt文件内容以及报错日志加上个人思路成功解决

[root@k8s-master01 ~]# kubectl get pods -n monitor-sa
NAME                                READY   STATUS     RESTARTS      AGE
node-exporter-c9gxc                 1/1     Running    0             2d2h
node-exporter-nkvhb                 1/1     Running    0             2d2h
node-exporter-zflh7                 1/1     Running    0             2d2h
prometheus-server-bbc5986db-vf7zm   1/2     NotReady   5 (88s ago)   3m3s
[root@k8s-master01 ~]# kubectl describe pod prometheus-server-bbc5986db-vf7zm -n monitor-sa
  Normal   Started  20s               kubelet  Started container alertmanager
  Normal   Pulled   1s (x3 over 21s)  kubelet  Container image "prom/prometheus:v2.2.1" already present on machine
  Normal   Created  1s (x3 over 21s)  kubelet  Created container prometheus
  Normal   Started  1s (x3 over 20s)  kubelet  Started container prometheus
  Warning  BackOff  0s (x3 over 18s)  kubelet  Back-off restarting failed container prometheus in pod prometheus-server-bbc5986db-vf7zm_monitor-sa(7aea906d-1ae7-4013-a391-98a5364bdc3e)
[root@k8s-master01 ~]# kubectl logs prometheus-server-bbc5986db-vf7zm -n monitor-sa
level=error ts=2023-06-09T14:23:29.505932807Z caller=main.go:582 err="Opening storage failed open DB in /prometheus: open /prometheus/482935685: permission denied"
level=info ts=2023-06-09T14:23:29.50599337Z caller=main.go:584 msg="See you next time!"
# 这里会有这些报错是因为我们只在k8s-node01创建了data目录,部署在k8s-master02会导致找不到data目录导致无法挂载
# 因此我们改成调度到k8s-node01
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl delete -f prometheus-alertmanager-deploy.yaml 
deployment.apps "prometheus-server" deleted
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl apply -f prometheus-alertmanager-deploy.yaml deployment.apps/prometheus-server created
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get pods -n monitor-sa
NAME                                 READY   STATUS    RESTARTS   AGE
node-exporter-c9gxc                  1/1     Running   0          2d2h
node-exporter-nkvhb                  1/1     Running   0          2d2h
node-exporter-zflh7                  1/1     Running   0          2d2h
prometheus-server-84b4f49c8c-9zf5t   2/2     Running   0          20s
# 可以看到pod正常running了
网页端口状态为down解决方法

请添加图片描述

[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/127.0.0.1/172.20.252.181/g" /etc/kubernetes/manifests/kube-controller-manager.yaml 
[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/127.0.0.1/172.20.252.181/g" /etc/kubernetes/manifests/kube-scheduler.yaml 
# 替换监控本机为指定ip
[root@k8s-master01 prometheus+alertmanager-resources]# systemctl restart kubelet
# 所有节点重启kubelet
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS      MESSAGE                                                                                        ERROR
scheduler            Unhealthy   Get "https://127.0.0.1:10259/healthz": dial tcp 127.0.0.1:10259: connect: connection refused   
controller-manager   Unhealthy   Get "https://127.0.0.1:10257/healthz": dial tcp 127.0.0.1:10257: connect: connection refused   
etcd-0               Healthy     {"health":"true","reason":""} 
# 状态Unhealthy

[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/172.20.252.181/127.0.0.1/g" /etc/kubernetes/manifests/kube-scheduler.yaml 
[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/172.20.252.181/127.0.0.1/g" /etc/kubernetes/manifests/kube- 
kube-apiserver.yaml           kube-controller-manager.yaml  kube-scheduler.yaml           
[root@k8s-master01 prometheus+alertmanager-resources]# sed -i "s/172.20.252.181/127.0.0.1/g" /etc/kubernetes/manifests/kube-controller-manager.yaml 
[root@k8s-master01 prometheus+alertmanager-resources]# systemctl restart kubelet
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok                              
scheduler            Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}   
# 替换回来就Healthy,不知道为什么
邮件告警报错解决
[root@k8s-master01 prometheus+alertmanager-resources]# kubectl logs prometheus-server-84b4f49c8c-7zgrd -c alertmanager -n monitor-sa
level=debug ts=2023-06-10T06:41:34.420118006Z caller=notify.go:605 component=dispatcher msg="Notify attempt failed" attempt=1 integration=email receiver=default-receiver err=EOF
level=error ts=2023-06-10T06:41:34.420240641Z caller=notify.go:303 component=dispatcher msg="Error on notify" err=EOF
level=error ts=2023-06-10T06:41:34.420257671Z caller=dispatch.go:266 component=dispatcher msg="Notify for alerts failed" num_alerts=5 err=EOF
level=debug ts=2023-06-10T06:41:34.420333301Z caller=dispatch.go:429 component=dispatcher aggrGroup="{}:{alertname=\"InstanceDown\"}" msg=Flushing alerts="[InstanceDown[7116edc][active] InstanceDown[35a6665][active] InstanceDown[4a9b5ab][active] InstanceDown[f1add7c][active] InstanceDown[a4fa09b][active]]"

Alertmanager发送报警到钉钉群
[root@k8s-master01 prometheus+alertmanager-resources]# tar -zxvf prometheus-webhook-dingtalk-0.3.0.linux-amd64.tar.gz -C /opt
prometheus-webhook-dingtalk-0.3.0.linux-amd64/
prometheus-webhook-dingtalk-0.3.0.linux-amd64/default.tmpl
prometheus-webhook-dingtalk-0.3.0.linux-amd64/prometheus-webhook-dingtalk
[root@k8s-master01 prometheus+alertmanager-resources]# cd /opt/prometheus-webhook-dingtalk-0.3.0.linux-amd64/
[root@k8s-master01 prometheus-webhook-dingtalk-0.3.0.linux-amd64]# nohup ./prometheus-webhook-dingtalk  --web.listen-address="0.0.0.0:8060" --ding.profile="cluster1=https://oapi.dingtalk.com/robot/send?access_token=8377378c45a74f97676c7c93132c76f52a20ec02010a7a4365b26e5faa48a341" &

[root@k8s-master01 prometheus+alertmanager-resources]# cp alertmanager-cm.yaml alertmanager-dingding.yaml
[root@k8s-master01 prometheus+alertmanager-resources]# tail -n7 alertmanager-dingding.yaml 
      repeat_interval: 10m
      receiver: cluster1
    receivers:
    - name: 'cluster1'
      webhook_configs:
      - url: 'https://oapi.dingtalk.com/robot/send?access_token=8377378c45a74f97676c7c93132c76f52a20ec02010a7a4365b26e5faa48a341'
        send_resolved: true
# 修改为上述内容

Alertmanager发送报警到企业微信
prometheus PromQL语法

支持的数据类型有:

  • 瞬时向量(Instant vector): 一组时序,每个时序只有一个采样值

  • 区间向量(Range vector): 一组时序,每个时序包含一段时间内的多个采样值

  • 标量数据(Scalar): 一个浮点数

  • 字符串(String): 一个字符串,暂时未用

瞬时向量选择器

匹配标签纸可以是等于,也可以使用正则表达式.总共有下面几种匹配操作符:

  • = 完全相等
  • != 不相等
  • =~ 正则表达式匹配
  • !~ 正则表达式不匹配
container_processes{container=~"kube-scheduler|proxy|kube-apiserver"}
# 以当前为标准,瞬间的采样值
区间向量选择器

不支持Graph图表

apiserver_request_total{job="kubernetes-apiserver",resource="pods"}[1m]
# 以当前为标准,一分钟内的采样值
偏移向量选择器
apiserver_request_total{job="kubernetes-apiserver",resource="pods"} [5m] offset 1w
# 以当前为标准,在5分钟前的采样值
聚合操作符

sum: 求和

min: 最小值 …

sum(container_memory_usage_bytes{instance=~"k8s-master01"})/1024/1024/1024
# 计算k8s-master01节点所有容器总计内存
函数

abs(): 绝对值

sqrt(): 平方根 …

瞬时向量选择器

匹配标签纸可以是等于,也可以使用正则表达式.总共有下面几种匹配操作符:

  • = 完全相等
  • != 不相等
  • =~ 正则表达式匹配
  • !~ 正则表达式不匹配
container_processes{container=~"kube-scheduler|proxy|kube-apiserver"}
# 以当前为标准,瞬间的采样值
区间向量选择器

不支持Graph图表

apiserver_request_total{job="kubernetes-apiserver",resource="pods"}[1m]
# 以当前为标准,一分钟内的采样值
偏移向量选择器
apiserver_request_total{job="kubernetes-apiserver",resource="pods"} [5m] offset 1w
# 以当前为标准,在5分钟前的采样值
聚合操作符

sum: 求和

min: 最小值 …

sum(container_memory_usage_bytes{instance=~"k8s-master01"})/1024/1024/1024
# 计算k8s-master01节点所有容器总计内存
函数

abs(): 绝对值

sqrt(): 平方根 …

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1058487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vcruntime140.dll如何修复,快速修复vcruntime140.dll丢失的三种方法

vcruntime140.dll是Visual C 2015运行库的一个组件&#xff0c;它包含了许多运行时函数&#xff0c;用于支持各种程序的正常运行。当vcruntime140.dll文件丢失时&#xff0c;可能会导致一些程序无法正常运行。本文将详细介绍vcruntime140.dll的作用、丢失原因以及三种修复方法。…

STM32Cubemx新建F429基础工程

配置STM32CubeMX 配置KEY 配置USART1 配置RCC Project Manager Toolchain 选择 MDK-ARM Code Generator 配置如下 GENERATE CODE 即可 配置Keil5 魔术棒配置 – Target – 勾选 Use MicroLIB – Debug – Flash Download – 勾选Reset and Run 基础代码 /* Private incl…

linux——信号

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——进程等待 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;生活中处处有信号&#xff0c;linux中也有很多信号&#xff0c;OS使…

算法强训:第三十四天

文章目录 收件人列表养兔子一、收件人列表OJ链接 本题思路:先接收到一个数字,代表接下来是多少组数据 ,逐个接收每个名字,如果名字中没有,或者 则直接输出,否则在改名字前后拼接"\""再输出,除最后一个名字外,每个名字之后都有一个", " ,该组用例…

(三)激光线扫描-中心线提取

光条纹中心提取算法是决定线结构光三维重建精度以及光条纹轮廓定位准确性的重要因素。 1. 光条的高斯分布 激光线条和打手电筒一样,中间最亮,越像周围延申,光强越弱,这个规则符合高斯分布,如下图。 2. 传统光条纹中心提取算法 传统的光条纹中心提取算法有 灰度重心法、…

pycharm中个人编程时常用到的快捷键

pycharm中个人编程时常用到的快捷键&#xff1a; 仅个人经验总结&#xff0c;不为其他&#xff01; 1.CTRLShiftAlt鼠标选择多个位置 可以同时在多个位置进行编辑同样的内容 2. Ctrel Alt L快速将代码格式标准化 3. Ctrl F 在当前py文件中查找 4. Ctrl R快速替换当前…

哈哈,我保研985了,之后会出一期保研经验分享

哈哈&#xff0c;我保研了&#xff0c;之后会出一期保研经验分享 个人背景 学校&#xff1a;河南某四非&#xff0c;计算机科学与技术专业英语成绩&#xff1a;四级439&#xff0c;六级438&#xff08;夏令营无六级&#xff09;科研经历&#xff1a;一个软著、国家级大创&…

如何在idea中隐藏文件或文件夹

例如我想要隐藏如下文件 只需要点击file->settings editor->file types->ignores Files and Folders-> 然后按照图片点击顺序操作即可 添加完毕点击apply->ok 隐藏成功后效果如下&#xff1a;

基于蚁狮优化的BP神经网络(分类应用) - 附代码

基于蚁狮优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于蚁狮优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蚁狮优化BP神经网络3.1 BP神经网络参数设置3.2 蚁狮算法应用 4.测试结果&#xff1a;5.M…

EasyX图形库note4,动画及键盘交互

大家好&#xff0c;这里是Dark Flame Master&#xff0c;专栏从这篇开始就会变得很有意思&#xff0c;我们可以利用今天所学的只是实现很多功能&#xff0c;同样为之后的更加好玩的内容打下基础&#xff0c;从这届开始将会利用所学的知识制作一些小游戏&#xff0c;废话不多说&…

计算机毕业设计 基于SSM的在线预约导游系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

UCOS的任务创建和删除

一、任务创建和删除的API函数 1、任务创建和删除本质就是调用uC/OS的函数 API函数 描述 OSTaskCreate() 创建任务 OSTaskDel() 删除任务 注意&#xff1a; 1&#xff0c;使用OSTaskCreate() 创建任务&#xff0c;任务的任务控制块以及任务栈空间所需的内存&#xff0c…

基于SpringBoot的流浪动物管理系

基于SpringBoot的流浪动物管理系的设计与实现&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 首页 后台登陆界面 管理员界面 摘要 基于Spring Boot的…

常见的几种排序方式

常见的几种排序方式 1. 排序的概念2. 常见排序算法的实现2.1 插入排序2.1.1基本思想2.1.2 直接插入排序2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序2.2.1基本思想2.2.2 直接选择排序:2.2.3 堆排序 2.3 交换排序2.3.1冒泡排序2.3.2 快速排序 2.4 归并排序2.4.1 基本思想2.4.2 …

力扣-383.赎金信

Idea 使用一个hashmap 或者一个int数组存储第二次字符串中每一个字符及其出现的次数 遍历第一个字符串&#xff0c;讲出现的重复字符减1&#xff0c;若该字符次数已经为0&#xff0c;则返回false AC Code class Solution { public:bool canConstruct(string ransomNote, strin…

最短路径专题3 最短距离-多边权

题目&#xff1a; 样例&#xff1a; 输入 4 5 0 2 0 1 2 1 0 2 5 1 0 3 1 2 1 2 1 6 3 2 2 3 输出 3 5 思路&#xff1a; 根据题目意思&#xff0c;其实还是Dijkstra 的题目&#xff0c;不同的是&#xff0c;多了一个最少花费边权的这个点&#xff0c;多添加一个spend数组&am…

【Maven基础篇-黑马程序员】Maven项目管理从基础到高级,一次搞定!

文章目录 前言Maven简介Maven是什么Maven的作用 Maven的下载与安装Maven基础概念仓库坐标仓库配置全局setting与用户setting区别 第一个Maven程序&#xff08;手工制作&#xff09;第一个Maven程序&#xff08;IDEA生成&#xff09;使用模版&#xff08;骨架&#xff09;创建Ma…

(C++版)ROS2 bind函数解读

在ros2的发布者节点里面有这么一句话&#xff1a;估计没有学过C的人不太理解&#xff0c;这里我就发发好心帮忙解读一下timer_ this->create_wall_timer(500ms, std::bind(&MinimalPublisher::timer_callback, this)); timer_ this->create_wall_timer(500ms, std…

Java - 基本数据类型和封装类型

基本类型有默认值&#xff0c;而包装类型初始为null。然后再根据这两个特性进行分业务使用&#xff0c;在阿里巴巴的规范里所有的POJO类必须使用包装类型&#xff0c;而在本地变量推荐使用基本类型。 Java语言提供了八种基本类型。六种数字类型&#xff08;四个整数型&#xff…

BP神经网络的MATLAB实现(含源代码)

BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念&#xff0c;是一种按照误差逆向传播算法训练的多层前馈神经网络&#xff0c;是应用最广泛的神经网络模型之一 具体数学推导以及原理在本文不做详细介绍&#xff0c;本文将使用MATLAB进行B…