Prometheus+Grafana安装教程实战

0、前言

对于一直在一线开发的同学而言,你可能只需要把自己的需求做好、没有 bug、顺利上线,那么你的任务就完成了。但是如果你是一个 leader,那么你是对整个业务系统负责,这个业务系统出了什么问题,都是你的责任。这个时候,你需要时刻关注这个系统是否正常运行。

对于流量不是很大的系统来说,出现几分钟的故障可能造成不了多少损失。但是对于像淘宝、美团、字节跳动这样的巨无霸来说,宕机 1 分钟损失的金额可能就是几百万!

所以弄清楚此时此刻系统的运行是否正常?各项业务指标是否超过阈值?这些问题是每个经验丰富的研发人员所需要关注的事情!

那么如何监控你的系统?如何得知系统目前是正常还是异常?甚至如何预知未来一段时间系统可能出问题?Prometheus 正是这么一套数据监控解决方案。它能让你随时掌控系统的运行状态,快速定位出现问题的位置,快速排除故障。

只要按照 Prometheus 的方式来做,按部就班地学习和部署,我们就可以监控机器的 CPU、内存等资源的使用情况、Java 应用的运行情况以及业务各项指标的实时数据。

当然有一些公司会自己使用 Kafaka 收集监控数据,并且存储在 Hive 中,最终通过页面聚合数据,同样能够实现数据监控。但是这种解决方案需要开发人员掌握 Hive + Hadoop 等大数据框架,并且在前端展示上比较局限。

而通过 Prometheus 则可以直接部署使用,并且其与 Grafana 配套使用可以呈现出非常多样化的图表配置。对于中小规模的团队来说,可以极大地减少成本,加快研发速度。

而对于个人来讲,掌握 Prometheus 可以增加你当 leader 的竞争力。 毕竟如果一个研发对自己的系统运行状况都不了解,那么他怎么做 leader,怎么带领一个团队往前冲呢?

一、概述

1.1 初识Prometheus

Prometheus 是由 SoundCloud 开发的开源监控报警系统和时序列数据库。从字面上理解,Prometheus 由两个部分组成,一个是监控报警系统,另一个是自带的时序数据库(TSDB)

2016 年,由 Google 发起的 Linux 基金会旗下的云原生计算基金会(CNCF)将 Prometheus 纳入作为其第二大开源项目。Prometheus 在开源社区也十分活跃,在 GitHub 上拥有三万多 Star,并且系统每隔一两周就会有一个小版本的更新。

1.1.1 Prometheus架构

从上图可以看到,整个 Prometheus 可以分为四大部分,分别是:

Prometheus 服务器 

Prometheus Server 是 Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。

NodeExporter 业务数据源

业务数据源通过 Pull/Push 两种方式推送数据到 Prometheus Server。

AlertManager 报警管理器

Prometheus 通过配置报警规则,如果符合报警规则,那么就将报警推送到 AlertManager,由其进行报警处理。

可视化监控界面

Prometheus 收集到数据之后,由 WebUI 界面进行可视化图标展示。目前我们可以通过自定义的 API 客户端进行调用数据展示,也可以直接使用 Grafana 解决方案来展示。

简单地说,Prometheus 的实现架构也并不复杂。其实就是收集数据、处理数据、可视化展示,再进行数据分析进行报警处理。 但其珍贵之处在于提供了一整套可行的解决方案,并且形成了一整个生态,能够极大地降低我们的研发成本。

1.2 初识Grafana

 Grafana 是一个用来展示各种各样数据的开源软件,在其官网上用这么一段话来说明其作用。

Used by thousands of companies to monitor everything from infrastructure, applications, and power plants to beehives.

数以万计的公司用 Grafana 来监控基础设施、应用。

从官网上可以看到目前有 Paypal、ebay 等公司已经在使用 Prometheus 了。

 二、快速入门

2.1 环境配置

三台机机器配置都是CenterOS7.4 64位,框架安装情况:

node1

node2

node3

Prometheus

NodeExporter

Grafana

2.2 安装Prometheus 

2.2.1 安装运行Prometheus服务端

Prometheus 服务端负责数据的收集,因此我们应该首先安装并运行 Prometheus Server。

从 https://prometheus.io/download/ 找到最新版本的Prometheus Sevrer软件包:

下载后解压,可以看到如下目录结构:

其中 data 目录是数据的存储路径,也可以通过运行时的 -- storage.tsdb.path="data/" 命令另行指定。(初次解压没有执行过是没有data目录)。

prometheus.yml 是 Prometheus的配置文件,prometheus 是运行的命令。

启动prometheus服务,其会默认加载当前路径下的prometheus.yaml文件。当然我们也可以手动指定配置文件地址:./prometheus --config.file=prometheus.yml

现在我们执行prometheus命令启动Prometheus

 [user01@node1 prometheus-2.25.2.linux-amd64]# nohup ./prometheus &

[1] 4526

[user01@node1 prometheus-2.25.2.linux-amd64]# nohup: 忽略输入并把输出追加到"nohup.out"

[user01@node1 prometheus-2.25.2.linux-amd64]# netstat -nutp | grep prometheus

tcp        0      0 192.168.5.102:49792         192.168.5.102:9090          ESTABLISHED 4526/./prometheus  

tcp        0      0 ::ffff:192.168.5.102:9090   ::ffff:192.168.5.102:49792  ESTABLISHED 4526/./prometheus   

注意:启动之后,通过查看端口号(默认为9090)验证Prometheus是否启动成功

输入http://node1:9090/可以看到如下页面,这个是 Prometheus 自带的监控管理界面

 

将Prometheus设置系统级服务参考:如何将Prometheus做成系统服务​​​​​​​

2.2.2 运行NodeExporter客户端数据源 

NodeExporter 是 Prometheus 提供的一个可以采集到主机信息的应用程序,它能采集到机器的 CPU、内存、磁盘等信息。

我们从 Download | Prometheus 获取最新的 Node Exporter 版本的二进制包。

下载解压后运行 Node Exporter,我们指定用 5080 端口运行:

 [user01@node1 node_exporter-1.1.2.linux-amd64]# nohup ./node_exporter --web.listen-address node1:5080 &

[2] 6709

[user01@node1 node_exporter-1.1.2.linux-amd64]# nohup: 忽略输入并把输出追加到"nohup.out"

[user01@node1 node_exporter-1.1.2.linux-amd64]# netstat -nutpl | grep node_exporte

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  

tcp        0      0 192.168.5.102:5080          0.0.0.0:*                   LISTEN      6709/./node_exporte  

注意:启动之后,通过查看端口号(默认为5080)验证NodeExporter是否启动成功

访问 http://node1:5080/ 可以看到以下页面:

 访问 http:// node1:5080/metrics,可以看到当前 node exporter 获取到的当前主机的所有监控数据,如下所示:

 

注意:然后同样的操作在node2和node3的机器上安装 

 2.2.3 配置 Prometheus 的监控数据源

现在我们运行了 Prometheus 服务器,也运行了业务数据源 NodeExporter。但此时 Prometheus 还获取不到任何数据,我们还需要配置下 prometheus.yml 文件,让其去拉取 Node Exporter 的数据。

我们配置一下 Prometheus 的配置文件,让 Prometheus 服务器定时去业务数据源拉取数据。编辑prometheus.yml 并在 scrape_configs 节点下添加以下内容:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['node1:9090']
  # 采集node exporter监控数据
  - job_name: 'node'
    static_configs:
      - targets: ['node1:5080', 'node2: 5080', 'node3: 5080']

上面配置文件配置了两个任务。一个是名为 prometheus 的任务,其从「node1:9090」地址读取数据。另一个是名为 node 的任务,其从「node1:5080」地址读取数据。

配置完成后,我们重新启动 Prometheus。

 [user01@node1 prometheus-2.25.2.linux-amd64]# netstat -nutpl | grep prometheus

tcp        0      0 :::9090                     :::*                        LISTEN      4526/./prometheus  

[user01@node1 prometheus-2.25.2.linux-amd64]# kill -15 4526

[user01@node1 prometheus-2.25.2.linux-amd64]# nohup ./prometheus &

[3] 8499

[1]   Done                    nohup ./prometheus

[user01@node1 prometheus-2.25.2.linux-amd64]# nohup: 忽略输入并把输出追加到"nohup.out" 

2.2.4 查询监控数据 

配置完 Prometheus 读取的数据源之后,Prometheus 便可以从 Node Exporter 获取到数据了。

Prometheus UI 是 Prometheus 内置的一个可视化管理界面,我们通过 http://node1:9090 就可以访问到该页面。

接下来我们访问 http://node1:9090 ,进入到 Prometheus Server。如果输入「up」并且点击执行按钮以后,可以看到如下结果:

可以看到 Element 处有4条记录,其中 instance 值为 node1:5080 的记录,value 是 1,这代表对应应用是存活状态

2.3 Grafana 

2.3.1 运行Grafana

 首先我们从 Download Grafana | Grafana Labs 下载对应系统的安装包,下载解压后用下面的命令启动:./grafana-server start

[user01@node1 bin]# nohup ./grafana-server start &

 [4] 11524

[user01@node1 bin]# nohup: 忽略输入并把输出追加到"nohup.out"         

[user01@node1 bin]# netstat -nutpl | grep grafana

tcp        0      0 :::3000                     :::*                        LISTEN      11524/./grafana-ser 

注意:启动之后,通过查看端口号(默认为3000)验证Grafana是否启动成功

Grafana 默认使用 3000 端口启动,我们访问:http://node1:3000 查看对应页面。

默认的账号密码是 admin/admin,登陆进去后是这样的。

2.3.2 配置数据源 

 之后我们去设置菜单添加 Prometheus 数据源:

打开如下图所示:

之后输入对应的名字和 URL 地址即可:

 

这里我们添加了一个名为「Prometheus-1」的数据源,数据获取地址为:http://node1:9090 

 2.3.3 Grafana模板中心

对于线上监控来讲,如果我们每个面板都需要自己从零开始,那么就太累了。事实上,我们用到的许多监控信息都是类似的。因此 Grafana官网 - Dashboards 模块 (https://grafana.com/grafana/dashboards)提供了下载 Dashboard 模板的功能。

Dashboards 里有许多各种类型的 Dashboard 面板,例如 JVM 监控、MySQL 数据库监控等。你只需找到合适自己的监控面板,之后根据 ID 添加即可。例如我找到的这个面板包含了各种常见的资源监控,例如:CPU、内存等。

你只需要复制它的 ID 并使用 Grafana 的 import 功能导入即可,如下图所示:

最终的效果如图所示:

三、总结

对于工作多年的研发人员,对自己负责的系统必须了然于胸。而要做到了然于胸,单靠一味的自信是不够的,必须借助一套功能强大的业务监控系统。Prometheus 作为这其中的翘楚,凭借其完善的功能、海量数据支持,可以让我们较低成本地实现业务监控。 

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值