背景
想折腾一套简单的监控方案很久了,最开始是用influxDB + Grafana的方案,距离上次已经过去大概2两年了,至今这套方案已经也还没啥毛病。大概一年前又尝试了用ElasticSearch + Kibana的方案,这套方案应该也是很多人用的,无奈这套方案太消耗资源,之前尝试的过程中导致CPU占用持续在2的样子,而且还ES那个磁盘占用有点吓人。
于是最近迫于对磁盘监控的强硬需求,开始重新部署监控方案,这个期间又开始尝试influxDB的方案,整体都搞定了,但是突然发现还需要自己手动配置面板,于是乎放弃了,改为采用Prometheus的方案。
Prometheus 方案介绍
这个是一个有点特别的方案,大致解释就是有一个中心配置多个机器地址,然后开始轮询形式监控,具体可以查看: https://github.com/prometheus/prometheus 该有的都有了,整体来说应该是完美满足现有的K8S潮流,虽然我对这一套不太喜欢。
Grafana 就没啥可说的了,推荐用这个,性能不错,现在是Go实现的,比很久之前用PHP实现的版本好太大。
接下是安装过程,先从Grafana开始安装开始
官方下载地址: https://grafana.com/grafana/download
有些人喜欢无脑推荐Docker, 如果机器资源足够确实可以尝试下,不过我就安心用rpm形式安装就好,毕竟本身就没有依赖。 https://grafana.com/docs/installation/rpm/ 好处就是系统直接更新,资源占用少。
配置过程中记得配置下DB和域名,效果会好一些。
Prometheus 安装
下载地址: https://github.com/prometheus/prometheus/releases
一般我会推荐直接下载发行版去安装,毕竟官方提供了所有的二进制包,而且就是一个文件,又没啥依赖,如果喜欢Docker也可以,直接一条命令的问题。
安装完成后访问页面就比较简单了,默认端口9090.
安装完成后就可以说有一个大概的环境了。
node_exporter 数据导出工具
这货的作用: 提供每一台机器的当前系统状态。
下载地址: https://github.com/prometheus/node_exporter/releases
还是上面的一样,这个完全是轻量级的服务,跑docker没必要,除非机器真是太闲了。
这个还要注意配置一下systemed的环境,参考官方的example:
vim /etc/systemd/system/node_exporter.service
Description=Node Exporter
[Service]
User=www
EnvironmentFile=/etc/sysconfig/node_exporter
ExecStart=/opt/node_exporter/node_exporter $OPTIONS
[Install]
WantedBy=multi-user.target
vim /etc/sysconfig/node_exporter 这里可以考虑更改绑定地址
试试访问 http://0.0.0.0:9100/metrics 应该可以获取到当前的数据,这就是关键了。
配置 Prometheus
上面在几台机器上安装完 node_exporter 后,就可以将对应的机器地址添加到 Prometheus 中了,配置如下:
vim prometheus.yml
- job_name: 'prometheus'
static_configs:
- targets: ['127.0.0.1:9090']
- job_name: 'host1'
static_configs:
- targets: ['127.0.0.1:9100']
- job_name: 'host2'
static_configs:
- targets: ['10.11.1.131:9100']
- job_name: 'host3'
static_configs:
- targets: ['10.11.1.72:9100']
比如我这里配置了三台机器,最终的效果就是如图这样:
配置 Grafana 展示 Prometheus 的数据
如果需要从头开始配置一个个面板有点太难了,于是就有了现成的第三方
官方的参考链接: https://grafana.com/grafana/dashboards/8919
配置之前,你还需要手动配置一个数据源:
然后按照官方的配置安装,于是会非常顺利出现这样一个控制面板:
当前还没有任何评论