背景

云原生背景下,必须学会使用普罗米修斯监控容器。
虽然zabbix也能监控容器,但实际使用中当容器运行时使用containerd时,zabbix存在一定限制。
普罗米修斯和K8S一样是CNCF基金所管理的项目,二者匹配性绝佳。
先分点记录学习过程,达到一定学习成果后,再统一整理教程。


基础知识

  1. 普罗米修斯也是云原生基金会的。
  2. 普鲁米修斯只提供简单的图形化界面,最终需要配合grafana使用。

基本启停操作

首先prometheus和node_exporter都是开箱即用,建议的安装方式是:解压并将可执行文件复制到系统/usr/sbin目录下,即可不添加环境变量,就能全局执行相关命令。

启动node_exporter

问题:使用ansible启动的node_exporter并不是后台运行。
建议解决办法:先用ansible将node_exporter注册成系统服务,后续在用asible service模块启动。
以下是shell远程启动的参考命令,不建议这么做。

ansible -i target.ini all -m shell -a "nohup node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd --collector.systemd.unit-whitelist=\"(docker|ssh|rsyslog).service\" &"
ansible -i target.ini all -m shell -a "netstat -ano |grep 9100|grep LISTEN"

重启prometheus

方式一:直接kill,再次执行prometheus。
方式二:优雅重启reload
先强制杀死进程,然后启动时新增参数,之后再次重启即可通过POST请求优雅重启,参考下列操作记录

[root@localhost prometheus-2.45.1.linux-amd64]# curl -XPOST http://127.0.0.1:9090/-/reload
Lifecycle API is not enabled.[root@localhost prometheus-2.45.1.linux-amd64]# 
[root@localhost prometheus-2.45.1.linux-amd64]# 
[root@localhost prometheus-2.45.1.linux-amd64]# ps -ef |grep prometheus
root       29719       1  0 Oct07 ?        00:04:43 ./prometheus
root       34679   34502  0 10:39 pts/1    00:00:00 grep --color=auto prometheus
[root@localhost prometheus-2.45.1.linux-amd64]# kill -9 29719
[root@localhost prometheus-2.45.1.linux-amd64]# nohup ./prometheus --web.enable-lifecycle &
[1] 34681
[root@localhost prometheus-2.45.1.linux-amd64]# nohup: ignoring input and appending output to 'nohup.out'

[root@localhost prometheus-2.45.1.linux-amd64]# curl -XPOST http://127.0.0.1:9090/-/reload
[root@localhost prometheus-2.45.1.linux-amd64]# ps -ef |grep prometheus
root       34681   34502  5 10:40 pts/1    00:00:01 ./prometheus --web.enable-lifecycle
root       34693   34502  0 10:40 pts/1    00:00:00 grep --color=auto prometheus

筛选node_exporter监控指标

可在prometheus.yml配置文件中新增筛选字段,将部分指标过滤。

需要进一步思考这么做有什么好处?减少性能浪费、优化计算吗?但node_exporter到底有多费资源呢?几乎没有呀。而且都是server端主动去拉取监控指标数据。

筛选前:监控所有服务器的cpu指标

Prometheus监控容器重启_docker

筛选后:排除4台K8S服务器的cpu指标

Prometheus监控容器重启_docker_02


Prometheus监控容器重启_Prometheus监控容器重启_03

从系统指标中计算更直观的监控指标(以CPU使用时间为例)

node_exporter获取的是一堆系统指标,未经计算,比如node_cpu_seconds_total中显示了idle、iowait的使用时间。
但实际上我们更习惯用百分比比率来直观检查idle、iowai、sys等监控指标。因此需要通过promQL计算。
在普罗米修斯最简单的web界面分别输入以下两行内容,并执行,查看二者的区别。

node_cpu_seconds_total
irate(node_cpu_seconds_total{job="K8s"}[5m])

Prometheus监控容器重启_prometheus_04


Prometheus监控容器重启_docker_05

avg(irate(node_cpu_seconds_total{job="K8s"}[5m])) by (instance)

Prometheus监控容器重启_重启_06


Prometheus监控容器重启_重启_07

查看systemd collector的指标

node_systemd_unit_state{name="docker.service",state="active"}
node_systemd_unit_state{name="docker.service"} == 1

查看可用性指标

up{job=“prometheus”,instance=“localhost:9090”}

Prometheus监控容器重启_Prometheus监控容器重启_08

Grafana集成

之前已经基本了解了prometheus的应用,下一步可以集成grafa了。