prometheus监控k8s集群

1、Prometheus客户端各菜单栏使用用法

Prometheus提供了一个Web UI,在UI中有许多有用的菜单项,帮助用户可以更好的掌握指标数据,这些菜单项中最为常用的是Alerts、Graph、Status选项,下面就详细阐述一下这几个菜单栏和Status菜单栏下的一些子菜单。

Alerts菜单栏

Alerts菜单栏用于查看当前启用的警报规则及其状态。如果Prometheus在警报模式下运行,那么该菜单栏将包含当前触发的警报以及其状态,例如,当前是否被解除、最近一次解除时间是什么等。
用户可以在此菜单下查看所有警报的详细信息,包括警报名称、触发规则、严重性级别等等。用户还可以通过单击右侧的图标以查看特定警报,包括警报状态、最新警报时间和相关指标等信息。

Graph菜单栏

Graph菜单栏用于绘制时间序列数据的图表。它允许用户执行各种操作,以查看并分析收集到的指标数据。用户可以选择特定的指标进行图表绘制,也可以进行筛选和子采样,以更好地了解数据趋势。
Graph菜单提供了多个选项,可以配置高亮显示的周期、时间区域、数据聚合等以图表的形式更清晰地呈现所需的数据。

Status菜单栏

Status菜单栏用于显示系统的运行状态以及其他相关信息,包括PromQL执行器的阻塞警告、存储层的状态和配置、目标的状态、警报管理器等。
在Status菜单下有多个子菜单:
3.1 Runtime & Build Information
Runtime & Build Information菜单用于显示当前Prometheus实例的版本、构建时间戳、Go程序版本以及运行时资源消耗情况等信息。它还提供了各种有用的性能指标,例如运行时内存使用情况、打开的文件描述符数量等。这些指标可用于确定Prometheus的运行状态并帮助诊断故障。
3.2 Command-Line Flags
Command-Line Flags菜单用于显示启动Prometheus实例时传递给命令行的标志和参数列表。
3.3 Configuration
Configuration菜单用于显示Prometheus实例的配置文件,包括监听地址、抓取目标列表等配置项。用户可以在此处查看Prometheus配置文件的具体内容,也可以编辑和保存配置文件。
3.4 Rules
Rules菜单用于管理Prometheus实例中的警报规则。在这里,用户可以查看当前启用的规则以及规则的状态,添加、编辑和删除规则,并测试规则以确保其有效性。
3.5 Targets
Targets菜单用于查看Prometheus实例所监控的抓取目标状态。在这里,用户可以查看目标的标签列表、最近访问时间、最近抓取时间等信息,并可以测试目标以确保其有效性。
3.6 Service discovery
Service discovery菜单用于管理Prometheus实例的服务发现配置。在这里,用户可以配置Prometheus实例使用哪种服务发现机制来自动发现和管理抓取目标。Prometheus支持多种服务发现机制,包括Consul、Kubernetes、Zookeeper等。
综上所述,Prometheus Web UI提供了非常方便的操作界面,各个菜单项的使用也非常简单直观。管理员可以通过它更好地了解Prometheus运行状态,同时也可以根据实际需要对指标数据进行分析和管理。

2、Kubernetes 集群中运行一组 Prometheus 组件的运行状态信息解析

[root@node02 ~]# kubectl -n bm-system get pods |grep prometheus
prometheus-alertmanager-6458485dfd-2mlbz         2/2     Running   0          30d
prometheus-kube-state-metrics-69c5cb5fc5-v467d   1/1     Running   0          30d
prometheus-node-exporter-f2zsg                   1/1     Running   8          336d
prometheus-node-exporter-r6kpq                   1/1     Running   10         336d
prometheus-node-exporter-v4vxc                   1/1     Running   10         336d
prometheus-server-844dffcfb4-h6wsr               2/2     Running   3          30d

 这是 Kubernetes 集群中运行的一组 Prometheus 组件的运行状态信息,它展示了实例名称、期望副本数、运行的副本数、最近的重启时间以及已经运行时间。
具体解释如下:

prometheus-alertmanager-59cd968668-wh77n: Alertmanager 组件的实例名称。
2/2: 期望的副本数和运行的副本数,都为2,表示已经部署了2个副本并且都处于运行状态。
Running: 容器状态,表示该组件正在运行中。
4 (4d19h ago): 重启计数器和最近一次重启时间,这里表示该组件已经重启了4次,最近一次重启是在4天19个小时前。
54d: 该组件运行的总时间,这里表示已经运行了54天。

同样的解释适用于其他的 Prometheus 组件:

prometheus-kube-state-metrics-786777876f-rdprh: kube-state-metrics 组件的实例名称。
prometheus-node-exporter-csmkt: node-exporter 组件的实例名称。
prometheus-server-7799b846dd-9n6kq: Prometheus Server 组件的实例名称。

总体来说,这些信息可以让管理员更好地了解 Prometheus 组件运行状态,帮助他们快速发现问题并采取必要的措施来解决它们。

上述的六个 Pod 都是 Prometheus 监控系统的组件,每个 Pod 的作用如下:

prometheus-alertmanager-59cd968668-wh77n: 这个 Pod 中运行了 Alertmanager 组件,用于处理和发送告警通知。
要进入该 Pod 中的容器并执行命令,可以使用以下命令:

kubectl exec -it prometheus-alertmanager-59cd968668-wh77n sh


prometheus-kube-state-metrics-786777876f-rdprh: 该 Pod 中运行了 kube-state-metrics 组件,它通过查询 Kubernetes API 获取集群中各种资源的监控指标。
要进入该 Pod 中的容器并执行命令,可以使用以下命令:

kubectl exec -it prometheus-kube-state-metrics-786777876f-rdprh sh


prometheus-node-exporter-csmkt: 该 Pod 中运行了 node-exporter 组件,用于收集集群中各个节点的硬件和操作系统指标。
要进入该 Pod 中的容器并执行命令,可以使用以下命令:

kubectl exec -it prometheus-node-exporter-csmkt sh


prometheus-node-exporter-ddpn7: 该 Pod 中也运行了 node-exporter 组件,与上一个 Pod 的作用相同,但是它是另外一个节点上的实例。
要进入该 Pod 中的容器并执行命令,可以使用以下命令:

kubectl exec -it prometheus-node-exporter-ddpn7 sh


prometheus-node-exporter-mrg2g: 该 Pod 中同样运行了 node-exporter 组件,这是第三个节点上的实例。
要进入该 Pod 中的容器并执行命令,可以使用以下命令:

kubectl exec -it prometheus-node-exporter-mrg2g sh


prometheus-server-7799b846dd-9n6kq: 这个 Pod 中运行了 Prometheus Server 组件,它通过收集各个组件产生的指标数据,并进行聚合和存储,提供用户友好的界面和 API 供用户查询和使用。
要进入该 Pod 中的容器并执行命令,可以使用以下命令:

kubectl exec -it prometheus-server-7799b846dd-9n6kq sh

3、利用 Prometheus 的 alerting 功能处理cpu使用率超过某一阈值这类告警

具体步骤如下:

1、首先,需要在 Prometheus Server 中定义一个告警规则,这个规则会定期检查云主机的 CPU 使用率是否超过阈值,如果超过则触发告警。可以使用 Prometheus 的规则文件来定义告警规则,例如新建一个名为 cpu-usage.rules 的规则文件,具体内容如下:

groups:
  - name: cpu-usage
    rules:
      - alert: HighCPUUsage
        expr: sum(rate(node_cpu{mode="idle"}[5m])) by (instance) < 0.2 # 20% threshold
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High CPU usage (instance {{ $labels.instance }})"
          description: "The instance {{ $labels.instance }} has high CPU usage, current value is {{ $value }}"

2、把定义好的告警规则文件加载到 Prometheus Server 中。假设告警规则文件保存在 /etc/prometheus/rules 目录下,可以通过将该目录挂载到 prometheus-server 容器中,并在 Prometheus 配置文件中添加 rule_files 选项来加载告警规则文件,例如:

...
rule_files:
  - /etc/prometheus/rules/*.rules
...

3、在 Alertmanager 中配置告警通知方式。Alertmanager 是一个与 Prometheus 集成的组件,负责接收 Prometheus 生成的告警通知,并发送给接收方进行处理。可以在 Alertmanager 的配置文件中定义告警通知方式,例如新建一个名为 alertmanager.yml 的配置文件,具体内容如下:

route:
  receiver: 'slack-notifications'

receivers:
- name: 'slack-notifications'
  slack_configs:
  - api_url: 'https://hooks.slack.com/services/[webhook-url]'
    channel: '#alerts'
    text: '{{ template "slack.my.alert.text" . }}'
    title: '{{ template "slack.my.alert.title" . }}'

上述配置文件中,定义了将告警通知发送到 Slack,通过 webhook-url 可以获取到对应的 Webhook URL。

4、把定义好的 Alertmanager 配置文件加载到 Alertmanager 中。假设 Alertmanager 配置文件保存在 /etc/alertmanager 目录下,可以通过将该目录挂载到 alertmanager 容器中,在 kubernetes 中创建一个alertmanager deployment 和 service。deployment.yaml文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: alertmanager
spec:
  replicas: 1 # 副本数
  selector:
    matchLabels:
      app: alertmanager
  template:
    metadata:
      labels:
        app: alertmanager
    spec:
      containers:
      - name: alertmanager
        image: prom/alertmanager:v0.23.0
        args:
          - --config.file=/etc/alertmanager/alertmanager.yml
          - --storage.path=/alertmanager
        ports:
        - containerPort: 9093
        volumeMounts:
        - name: alertmanager-config-volume
          mountPath: /etc/alertmanager
        - name: alertmanager-storage-volume
          mountPath: /alertmanager
      volumes:
      - name: alertmanager-config-volume
        configMap:
          name: alertmanager-config
      - name: alertmanager-storage-volume
        emptyDir: {}

service.yaml文件内容如下:
apiVersion: v1
kind: Service
metadata:
  labels:
    app: alertmanager
  name: alertmanager
spec:
  ports:
  - name: web
    port: 9093
    targetPort: 9093
  selector:
    app: alertmanager

5、通过 Prometheus 和 Alertmanager 提供的 Web UI 确认是否正确配置了告警规则和接收方。在 Prometheus Web UI 中,可以查看所有的规则和目前是否有告警触发。在 Alertmanager Web UI 中,可以查看当前所有的告警分组、状态和接收方信息。
6、针对 CPU 使用率超过阈值的告警,Alertmanager 会根据事先定义好的告警通知方式将通知发送到对应的接收方(例如 Slack)进行处理,管理员可以根据通知中提供的信息采取相应的操作来缓解 CPU 使用率超过阈值的问题。

4、手动触发告警测试

可以尝试通过压力测试等方式模拟使其中一台云主机的 CPU 使用率达到超过阈值的情况,从而触发该告警规则。下面是一个简单的方法:

1、首先需要确定要测试的云主机的 IP 地址。可以通过 Prometheus 中的查询语句来获取所有被监控的节点 IP,例如查询 node exporter 的 IP 地址:

query: up{job="nodeexporter"}

2、选择其中一台云主机,可以登录到该云主机上,使用压力测试工具对 CPU 进行压力测试,例如使用 stress 工具:

sudo apt-get update
sudo apt-get install stress
stress --cpu 4 --timeout 180

上述命令将会开启一个占用 4 个 CPU 核心,并持续运行 180 秒的 stress 进程,从而模拟 CPU 使用率高的情况。

3、在压力测试过程中,请及时观察 Prometheus Web UI 和 Alertmanager Web UI 中告警的状态,并确认是否触发了对应的告警。若触发了告警,将会按照事先定义好的告警通知方式发送告警信息。

注意,测试时需要谨慎,最好不要对生产环境中正在运行的云主机进行测试,而是选择一个测试环境或者空闲的开发环境进行测试。

另外,如果在没有网络无法安装stress工具情况下,可以使用系统自带的工具来进行 CPU 压力测试,方法如下:

1、使用 dd 命令:dd 命令可以通过写入文件来测试 CPU 的性能。可以使用以下命令来测试:

  dd if=/dev/zero of=/dev/null

这个命令会从 /dev/zero 读取数据,并将其写入到 /dev/null 中。这个命令的目的是测试 CPU 的性能,因为数据不会被写入硬盘。

2、使用 cat 命令:和上面类似,可以使用以下命令:

  cat /dev/zero > /dev/null

这个命令也会向 /dev/null 中写入数据并且不会写入硬盘。

3、使用 sysbench 命令:如果你的系统上已经安装了 sysbench 工具,则可以使用以下命令来进行测试:

  sysbench --test=cpu --cpu-max-prime=20000 run

这个命令会使用一个质数算法来进行 CPU 压力测试。如果你的系统上没有安装 sysbench,可以使用包管理器进行安装。

4、使用 dd 和 pipeviewer 命令:如果你想要同时测试 CPU 和磁盘性能,可以使用以下命令:

   dd if=/dev/zero bs=1M count=10000 | pv | dd of=/dev/null

这个命令会从 /dev/zero 读取 10GB 的数据,并通过 pipeviewer 工具来输出进度信息。数据会被写入 /dev/null 中,因此不会占用硬盘空间。
这些是在没有网络无法安装 stress 工具的情况下进行 CPU 压力测试的一些方法。可以根据具体情况选择适合的方法。

5、Prometheus抓取不到监控指标的值

Prometheus抓取不到监控指标的值可能有以下原因:

1、监控目标配置错误:在 Prometheus 中,抓取监控指标需要配置目标。如果目标未正确配置,则 Prometheus 将无法抓取指标。例如,如果目标的 IP 地址或端口号错误,或者目标上的监控代理未正确配置,则 Prometheus 将无法抓取指标。
2、监控指标不存在或名称错误:当 Prometheus 抓取监控指标时,需要指定一个正确的指标名称。如果指标名称不存在或指标名称错误,则 Prometheus 将无法抓取指标,从而导致抓取不到监控指标的值。
3、抓取规则配置错误:在 Prometheus 中,可以使用抓取规则调整抓取目标的行为。如果抓取规则未正确配置,则可能会导致 Prometheus 抓取不到监控指标的值。例如,如果抓取规则中的抓取目标与实际监控目标不匹配,则会导致抓取不到指标。
4、通信问题:如果监控目标和 Prometheus 之间存在网络通信问题,则可能会导致 Prometheus 抓取不到监控指标的值。例如,如果目标防火墙阻止了来自 Prometheus 的连接或阻止了指定的端口,则可能会导致抓取不到监控指标。还可能是因为网络延迟或其它网络故障。
5、抓取频率设置不当:在 Prometheus 抓取监控指标的过程中,需要设置合适的抓取频率。如果抓取频率设置太低,则可能会导致 Prometheus 无法及时抓取监控指标。但是如果抓取频率设置太高,则可能会导致由于高网络流量或过多的指标而导致抓取失败。

总之,如果 Prometheus 无法抓取监控指标的值,则需要逐一排查上述问题,并解决导致问题的根本原因,以确保 Prometheus 正确抓取监控指标的值。

6、Prometheus客户端的targets中vm-instance中有些endpoint状态为up有些为down

在Prometheus监控系统中,各个被监控的目标可以是一个或多个Endpoint。如果在Target子菜单中,所有Endpoint都被标记为down状态,这说明Prometheus无法从这些Endpoint获取任何指标数据,即这些目标无法被Prometheus监控。
由于监控数据的缺失,这可能会对监控数据产生一些负面影响,例如:

1、无法监控到Endpoint的性能指标,例如请求响应时间、请求吞吐量等,从而无法提供准确的指标数据。
2、在Prometheus服务器收集监控数据时,会有很多请求超时和错误,这可能会产生大量的日志记录,从而在服务器上消耗过多的内存和CPU资源,这可能会导致Prometheus服务器的压力增加。
3、由于无法从Endpoint收集数据,可能会影响Prometheus的警报功能,因为警报规则通常基于监控数据进行设置。

7、什么时候虚拟机的监控状态为up或者down

在Prometheus监控的Kubernetes集群中,每个虚拟机的状态取决于它是否运行了Prometheus的node-exporter服务,并且Kubernetes的监控指标接口(kubelet指标接口)是否正常运行。
node-exporter是用于收集虚拟机上的node级别指标数据的Prometheus exporter,例如内存使用情况、CPU使用率等指标。它会将这些指标数据暴露为HTTP接口,以便被Prometheus服务器进行数据抓取和分析。因此,如果虚拟机上运行了node-exporter,并且该Exporter服务的HTTP接口处于可访问状态,则Prometheus可以访问到该虚拟机的指标数据,该虚拟机的endpoint状态就会被设置为up。
Kubernetes的监控指标接口也是类似的。kubelet是一个运行在Kubernetes节点上的系统进程,负责管理该节点上的容器和Pod等资源。kubelet会将节点的运行状态暴露为HTTP接口,供Prometheus进行数据抓取。如果该接口处于正常运行状态,则Prometheus可以访问到该节点的指标数据,该节点的endpoint状态就会被设置为up。
因此,如果创建的虚拟机没有正常运行node-exporter或kubelet指标接口,则Prometheus无法访问到该节点的指标数据,该节点的endpoint状态就会被设置为down。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 如何使用prometheus监控mysql? 使用prometheus监控mysql需要安装一个名为mysqld_exporter的exporter,该exporter可以在MySQL实例上运行并公开metrics。你可以在Prometheus配置文件中添加此exporter的配置,并使用PromQL查询语言查询MySQL指标,如查询数据库连接数、查询响应时间、查询缓存使用情况等。 2. 如何使用prometheus监控redis? 使用prometheus监控redis需要安装一个名为redis_exporter的exporter,该exporter可以在Redis实例上运行并公开metrics。你可以在Prometheus配置文件中添加此exporter的配置,并使用PromQL查询语言查询Redis指标,如查询内存使用情况、查询命令执行次数、查询客户端连接数等。 3. 如何使用prometheus监控docker? 使用prometheus监控docker需要安装一个名为node_exporter的exporter,该exporter可以在docker主机上运行并公开metrics。你可以在Prometheus配置文件中添加此exporter的配置,并使用PromQL查询语言查询docker主机指标,如查询CPU使用情况、查询内存使用情况、查询磁盘空间等。 4. 如何使用prometheus监控k8s集群的过程? 使用prometheus监控k8s集群需要安装一个名为kube-state-metrics的exporter,该exporter可以在k8s集群中运行并公开metrics。你可以在Prometheus配置文件中添加此exporter的配置,并使用PromQL查询语言查询k8s集群指标,如查询pod数量、查询节点状态、查询资源使用情况等。 5. 如何使用prometheus自动发现功能? prometheus自动发现功能可以通过配置文件中的文件SD(file_sd_config)或kubernetes SD(kubernetes_sd_config)进行配置。其中,文件SD允许你从文件中读取目标列表,而kubernetes SD允许你通过API服务器自动发现k8s集群中的目标。你可以在Prometheus配置文件中添加这些配置,并在Prometheus中启用自动发现功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值