背景
云原生背景下,必须学会使用普罗米修斯监控容器。
虽然zabbix也能监控容器,但实际使用中当容器运行时使用containerd时,zabbix存在一定限制。
普罗米修斯和K8S一样是CNCF基金所管理的项目,二者匹配性绝佳。
先分点记录学习过程,达到一定学习成果后,再统一整理教程。
基础知识
- 普罗米修斯也是云原生基金会的。
- 普鲁米修斯只提供简单的图形化界面,最终需要配合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指标
筛选后:排除4台K8S服务器的cpu指标
从系统指标中计算更直观的监控指标(以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])
avg(irate(node_cpu_seconds_total{job="K8s"}[5m])) by (instance)
查看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”}
Grafana集成
之前已经基本了解了prometheus的应用,下一步可以集成grafa了。