基于Prometheus和Grafana搭建监控系统
需求
原来只有家里一台服务器的时候还好,现在加了几台N1做的服务器,加上还有一些VPS,是时候上一套监控系统了。
之前是因为主服务器用的FreeBSD系统,跑Docker还要通过虚拟机,J1900的性能又不行,所以一直没搞。最近把主服务器换成了一台AMD的小主机(可惜不是Ryzen的),性能比J1900好多了——而且没有8G内存的限制。耗电虽然大一点,但也不过是跟以前的D525差不多。加上因为ZoL(ZFS on Linux)已经比较成熟,我就可以不再那么依赖FreeBSD,换成Debian 10,这样跑Docker就方便多了。于是可以开始了。
大致了解了一下,主流的监控方案是Zabbix和Prometheus,考虑到Prometheus更新一些,就选它了。
原理
基于Prometheus的监控系统架构是这样的:
- 被监控主机上安装exporter(node_exporter监控系统,mysql_exporter监控mysql数据库,postgres_exporter监控pgsql数据库……),把需要监控的数据通过http暴露出来
- Prometheus上配置任务从各个exporter源抓数据,存到内置的时序数据库里
- Grafana(也可以用其它的)作为数据分析终端从Prometheus里抓数据生成监控仪表盘
安装Prometheus
首先是通过docker安装Prometheus。
docker pull prom/prometheus:master
准备一个存放时序数据库的路径:
mkdir -p /var/data/prometheus
chown nobody:nogroup /var/data/prometheus
配置Prometheus(比如~/prometheus.yml):
global:
scrape_interval: 60s
scrape_timeout: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
labels:
instance: prometheus
- job_name: n1svr1
static_configs:
- targets: ["192.168.0.xx:9100"]
labels:
instance: n1svr1
暂时只配置了两个监控源,一个是Prometheus本身,一个是一台N1服务器。9090是Prometheus的端口,9100是node_exporter的端口。
现在可以把Prometheus跑起来了,为方便起见,用docker-compose。
docker-compose.yml文件:
version: '2'
services:
prometheus:
image: prom/prometheus:master
container_name: prometheus
volumes:
- /var/data/prometheus:/prometheus
- /home/yourname/prometheus.yml:/etc/prometheus/prometheus.yml
启动
docker-compose up -d prometheus
当然现在Prometheus只能收集自己的监控数据,N1那台还没通,而且数据查看也不方便,所以接下来先装Grafana。
安装Grafana
这是一个数据分析展现工具,功能强大——比Kibana强多了。
首先也是docker安装:
docker pull grafana/grafana:master
配置数据存放路径:
mkdir -p /var/data/grafana
chown 472:472 /var/data/grafana
472是容器里的grafana用户ID。不需要其它配置,直接配置启动——在docker-compose里加入:
grafana:
image: grafana/grafana:master
container_name: grafana
depends_on:
- prometheus
ports:
- 3000:3000
volumes:
- /var/data/grafana:/var/lib/grafana
启动
docker-compose up -d grafana
现在可以用浏览器访问服务器的3000端口:http://your_ip:3000
打开grafana的启动页面。
默认的登录用户名和密码都是admin
,登录后修改一下。
成功登录后就可以在首页添加数据源,这里是添加Prometheus。指定路径为:http://prometheus:9090
即可。
下一步是配置仪表盘,这事比较麻烦,就不自己做了,直接上网找现成的……
选择数据源为Prometheus的,可以找到一堆,把需要的仪表盘ID复制起来(每个仪表盘页面上有一个按钮),然后到Grafana里找到:Dashboard-manage-import
,然后把ID粘贴上去,即可自动下载这个仪表盘。
根据需要配置一下数据源什么的,即可导入并打开相应的仪表盘。
- node监控我用这个中文版的,ID:11174
- mysql监控我用了下载人数最多的,ID:7362
还有就是Grafana自带的Prometheus了。当然现在还只能看Prometheus的监控,其它的exporter源还没有。
安装node_exporter
到官方的node_exporter的release页面选择你要的平台版本下载。比如N1用的就是linux-arm64
版,注意不要搞错成linux-amd64
版了。
最简单的方法就是用root用户身份运行,即可通过http://localhost:9100/metrics
路径获取相关的监控数据,因为在内网,而且是个只读的链接,也没有什么敏感数据,就不作安全性的考虑了,直接用即可。
稍等即可在node的仪表盘看到相应的CPU,内存,硬盘使用情况了。
如果是外网的话,建议加一层https代理,当然还有更安全的配置方式就是双向证书,只是个人觉得必要性不大。
安装mysqld_exporter
同样是官方的mysqld_exporter的release页面,选择需要的版本。
在mysql里配置监控账号:
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
其中WITH MAX_USER_CONNECTION选项在部分版本mysql中不支持,可去掉。
然后把账号信息配置给exporter,创建~/.my.cnf:
[client]
user=exporter
password=XXXXXXXX
现在就可以启动exporter了:
mysqld_exporter
即可以通过http://localhost:9104/metrics
路径访问监控数据了。
推送到[go4pro.org]