prometheus+grafana+mtail+node_exporter实现机器负载及业务监控

1.概述

最近因项目需要统计服务的负载情况及机器的负载情况,但是项目里面却没有相关统计而服务所在的机器也没有相关的监控,因为工期原因就选择了相对轻量级的prometheus方案。其中node_exporter用来采集机器的负载情况,如CPU、内存、磁盘io、网络等基础信息,使用mtail来采集应用日志统计服务情况(需要业务系统有基础的日志,如请求发起,是否正常结束等,或者通过nginx等中间件的日志来统计也行),如QPS、TPS、请求数、成功率、异常率等,使用prometheus来统计分析相应的指标及设置报警规则等,如通过请求总数来计算QPS等,使用grafana来作为UI来展示相应的统计结果并且配置报警等,如设置饼图、仪表盘、折线图等。

2.node_exporter配置启动

建议下载最新版本,最新版本下载地址请戳此处
,我下载的版本为node_exporter-0.18.1.linux-386.tar.gz,将其解压到/usr/local下,进入/usr/local/node_exporter-0.18.1.linux-386目录,将其在后台启动

nohup ./node_exporter> nodeout.file 2>&1 &

查看是否启动成功:

ps -ef | grep node_exporter

node_exporter默认端口为9100,访问地址为http://ip:9100,启动成功会出现如下所示:
在这里插入图片描述
其中链接Metrics为采集到的指标(metrics)如下:
在这里插入图片描述

3.mtail配置启动

mtail是谷歌开发的一款日志收集工具,用于从应用程序日志中提取白盒监视数据以收集在时间序列数据库中。
建议下载最新版本,最新版下载地址请戳此处,我下载的版本为mtail_v3.0.0-rc34_linux_amd64,此版本是可执行二进制文件,将其重命名为mtail,移动至/usr/local/sbin下即可使用。
查看mtail版本(验证matail命令是否可用):

mtail -version

输出如下:
在这里插入图片描述
mtail命令格式如下:

mtail -logtostderr -progs /root/chuangmi.mtail -logs /home/ubuntu/video_server_for_ai/media_server.log

-progs参数需要以.mtail结尾,脚本内容为需要从日志中提取的指标,具体格式及脚本写法请参考官网
例子中chuangmi.mtail的内容如下:

counter media_request_total
/receive http request path is/ {
  media_request_total++
}

counter media_valid_request_total
/"result" : "true"/ {
  media_valid_request_total++
}

将其在后台启动:

nohup mtail -port 3903 -logtostderr -progs /root/chuangmi.mtail -logs /home/ubuntu/video_server_for_ai/media_server.log &

mtail默认端口为3903,也可以省略-port 3903,也可以通过-port指定其他端口。
查看进程是否启动成功

ps -ef | grep mtail

查看mtail信息,访问http://ip:3903:
在这里插入图片描述
查看prometheus可用的指标日志如下http://ip:3903/prometheus:
在这里插入图片描述
其中日志输出格式分为三行:

# HELP go_goroutines Number of goroutines that currently exist.
# TYPE go_goroutines gauge
go_goroutines 18

前两行以#开头的是注释,第一行描述统计到的指标样本的作用,第二行描述样本类型,第三方为样本数据。

4.prometheus配置启动

建议下载最新版本,最新版下载地址请戳此处,我下载的版本为prometheus-2.15.2.linux-amd64.tar.gz,将其解压到/usr/local下,进入目录/usr/local/prometheus-2.15.2.linux-amd64,修改配置文件prometheus.yml添加node_exporter和matail 的采集路径,prometheus.yml文件配置如下:

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets: ['192.168.199.13:9100']

  - job_name: 'mtail'
    static_configs:
      - targets: ['192.168.199.13:3903']

将其在后台启动:

nohup ./prometheus --config.file=prometheus.yml > prometheus.file 2>&1 &

查看进程是否启动成功:

ps -ef |grep prometheus

prometheus默认端口为9090,通过网页访问http://ip:9090/:
在这里插入图片描述
查看统计的所有的job,访问http://ip:9090/targets/
在这里插入图片描述

5.grafana配置启动

建议下载最新版本,最新版下载地址请戳此处(可能需要翻墙),我使用的版本为grafana-6.5.3.linux-amd64.tar.gz,我的版本csdn下载地址请戳
将其解压到/usr/local后,进入目录/usr/local/grafana-6.5.3,在后台启动:

nohup ./bin/grafana-server start > grafana.file 2>&1 &

查看是否启动成功:

ps -ef | grep grafana

grafana默认端口为3000,在网页访问http://ip:3000/
在这里插入图片描述
默认用户名密码为admin/admin
登录后,设置默认数据源
在这里插入图片描述
grafana也有自己的采集指标,访问http://ip:3000/metrics
在这里插入图片描述
可以将grafana采集的指标也加入prometheus中,即在prometheus.yml中加入以下内容并重启prometheus

  - job_name: 'grafana'
    static_configs:
      - targets: ['192.168.199.23:3000']

访问grafana主页,会看到默认有三个Dashboard
在这里插入图片描述

5.1.grafana配置默认Dashboard

如果前面的prometheus和grafana的指标都加入prometheus.yml的配置中,那么这三个默认的Dashboard都已经可以看到数据了,如下:
在这里插入图片描述

5.2.grafana添加node_exporter的Dashboard

官网上已经有很多的的Dashboard的模板了,可以看下自己想要哪些模板,地址请戳,我的node_exporter此处配置了官网的一个Dashboard,Dashboard的id为8919,配置方式如下:
在这里插入图片描述
Dashboard的id输入8919
在这里插入图片描述
然后数据源选择prometheus,点击导入即可:
在这里插入图片描述
查看node_exporter的Dashboard页面如下:
在这里插入图片描述
已经能看到系统负载了,右上角可以筛选时间,还可以设置定时刷新

5.3.grafana添加mtail的Dashboard

mtail采集一般都是自己业务系统的一些内部指标,如总请求数、QPS等,这些一般都是自定义的指标,没有比较合适的Dashboard,需要自己创建Dashboard,然后添加panel,自己写promQL查询语句,此处在上面的基础上,添加一个查看总请求数和QPS的Dashboard。
prometheus介绍及promQL语法中文参考地址请戳

  1. 创建Dashboard添加一个panel
    在这里插入图片描述
  2. 添加总请求数的查询语句,设置图表类型,最后设置panel标题,保存即可。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 添加QPS的查询语句,设置图表类型,最后设置panel标题,保存即可。
    promQL查询语句语法及内置函数请戳
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6.总结

此套监控的解决方案优点在于完全对业务系统解耦,并且对业务系统透明,唯一需要的就是业务系统的日志所在路径。
而此套系统的关键点在于mtail脚本编写和mtail采集到的数据最终使用promQL分析,mtail脚本需要知道业务系统的日志是否满足监控系统的需求,如果不满足还是需要改动业务代码添加相应的日志。而promQL则需要掌握相关的语法规则及内置函数,只要掌握了这两个关键点,整套系统就搞定了。
下一篇:prometheus+alertmanager+webhook实现自定义监控报警系统

发布了61 篇原创文章 · 获赞 85 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/bluuusea/article/details/104341054
今日推荐