Prometheus+Grafana搭建监控系统

2023年 7月 14日 165.5k 0

0. 简介

通常来说,对于一个运行时的复杂系统,如果系统出了问题是很难排查的,为此,我们需要再各种关键点上加上监控,通过监控获取的数据,解决问题。

Prometheus就是这么一款监控系统,其本质上是一个时序数据库,存储了监控目标系统在各个时间点上的监控数据。其不仅可以用于对于基础设施,如服务器,数据库等,还可以利用其SDK,用于各种自定义的服务的监控。

Grafana是一个监控仪表系统,帮助用户简化监控的复杂度,用户只需要提供监控的数据,其就可生成各种可视化的仪表,其支持多种数据库作为查询数据库,不过使用最多的还是Prometheus。

1. 监控系统组成

Prometheus生态系统包含多个组件,其中许多是可选的:

  • 用于采集和存取时间序列数据的 Prometheus server
  • 用于监测应用的客户端库
  • 用于支持短期的作业的 push gateway
  • Exporter,不同的监控需求由不同的exporter处理,如node-exportermysql-exporter
  • 用于处理告警的 alertmanager
  • 多种工具支持

Prometheus大多数组件使用 Go 语言编写,易于构建和部署为二进制可执行文件。

Prometheus开源社区提供了很多的工具,包括各种exporter以及不同语言的client,在链接。

总结起来,我们需要搭建的Prometheus+Grafana监控系统,其基本的架构图如下所示:Exporter监控工具负责获取数据;Prometheus收集存储数据,提供对外的查询接口;Grafana作为仪表盘,负责更友好地展示监控数据。

下面,我们以监控一台Linux服务器为例子,搭建一个系统节点的各项指标的监控系统。

2. Prometheus搭建

2.1 Prometheus安装部署

Prometheus支持多种操作系统,在产品官网上提供了各个系统的二进制文件进行下载,可以下载tar包进行安装部署。

当然,其也可以通过docker等容器进行部署,下面介绍其作为docker容器的部署。

首先我们可以将其配置文件prometheus.yml文件保存在本地目录,启动时通过-v参数进行挂载。

global:
  scrape_interval:     15s
  evaluation_interval: 15s
alerting:
  alertmanagers:
  - static_configs:
    - targets:
rule_files:
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

然后通过docker run命令运行:

$ sudo docker run --name prometheus -d -p 9090:9090 -v /data/docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

运行成功后,通过浏览器,访问http://$IP:9090可看到系统界面。

2.2 配置介绍

Prometheus有很多的配置,下面我们介绍这里用得上的两种,其余的可以在网上资料中学习。

global

用于定义prometheus的全局配置。

global:
  scrape_interval:     15s
  evaluation_interval: 15s
  scrape_timeout: 10s

scrape_interval:指定从监控端抓取数据的时间间隔(默认为15s),如果在特定的job中指定了时间间隔指标,则该job中以特定的时间间隔为准;
evaluation_interval:用于指定检测告警规则的时间间隔,每15s重新检测告警规则,并对变更进行更新;
scrape_timeout:定义拉取实例指标的超时时间。

scrape_configs

用于指定Prometheus抓取的目标信息。

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

Prometheus对于监控数据的抓取,通过配置job的方式进行操作。在job里面指定了一组目标抓取所必须的信息,例如目标地址、端口、标签和验证信息等。抓取的时间间隔使用上面global模块配置的时间,也可在该job中单独指定。 在实际环境中,通常会根据抓取目标的类型不同,如Mysql、mongodb、kafka等,分成多个job来进行。

默认配置只有一个监控目标,即prometheus server本身,端口为9090,如果不指定路径,默认会从/metrics路径抓取。

2.3 node-exporter

node-exporter使用Go语言编写,它主要用来监控主机系统的各项性能参数,可收集各种主机指标的库,还提供了textfile功能,用于自定义指标。

官方并不建议通过Docker的方式部署node-exporter,因为它需要访问主机系统,通过docker部署的方式,需要把任何非根安装点都绑定到容器中,并通过--path.rootfs参数指定。所以我们采用二进制安装的方式。

下载地址是下载。

$ wget --no-check-certificate https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz # 下载
$ tar -xvf node_exporter-1.6.0.linux-amd64.tar.gz # 解压
$ cd node_exporter-1.6.0.linux-amd64/
$ ./node_exporter & # 后台运行

通过以上操作,然后在http://ip:9100/metrics就可以看到node-exporter获取到的指标。

如果想让Prometheus抓取到节点的指标,还需要在上一节提到的配置中加入节点的配置:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'xxx'
    honor_timestamps: true
    scrape_interval: 15s
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    follow_redirects: true
    static_configs:
    - targets:
      - x.x.x.x:9100

这样,就可以收集到x.x.x.x这个主机的节点信息,在Prometheus的页面也可以查到:

3. Grafana可视化

3.1 Grafana安装

和Prometheus一样,Grafana也可以采用Docker安装,其安装指令如下:

sudo docker run --name=grafana -d -p 3000:3000 grafana/grafana

然后在http://ip:3000就可以访问,默认账密都是admin

3.2 添加数据源

选择Administration -> Data Sources -> Add data source,选择Prometheus作为数据源。


填写数据源名称与URL,完成后点击“save&test”按键,如果正常会收到Success提示。

3.3 下载Dashboard配置

虽然可以自定义面板,但是对于一些常见数据的监控,开源社区都有着较为完善的Dashboard模板可以下载即用,极大提升。官方搜索链接,当我们在搜索栏搜索node时,会出现很多Dashboard,选择自己想要的仪表盘。

这时候选择Copy ID to clipboard

然后去Grafana服务上选择Dashboards -> Import dashboard,粘贴ID,点击load,就可以得到想要的仪表盘了。

如下:

当然,也可以选择下载json配置然后上传。

4. 小结

以上,一个监控系统就大致搭建完成了,有关Prometheus的一些详细的配置以及细节,我们留待后面详细介绍。

5. 参考文档

Prometheus 中文文档

Prometheus 主机监控

一文搞懂Prometheus、Grafana(含腾讯云上实战)

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论