基于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即可。

下一步是配置仪表盘,这事比较麻烦,就不自己做了,直接上网找现成的……

Grafana的Dashboard官网

选择数据源为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]