记一次Prometheus完整监控案例

发布于:2022-10-13 ⋅ 阅读:(560) ⋅ 点赞:(0)

 

      时间过得真快,又是一周过去了。自上周转载了一篇关于普罗米休斯的文章后,有点心血来潮,因为在去年也曾浅浅研究过,关于普罗米休斯的文章网上有很多,但是很多都参差不齐,对于初学者或者小白来说,估计很难看懂。今天它来了,希望这篇文章能让大家对普罗米休斯有初步的认识,能够独立搭建第一套简单的监控系统。

      关于什么是普罗米修斯,它的优势、组件架构以及应用场景,还是直接看官网怎么说(下面的这段简介摘抄自中文文档:https://prometheus.fuckcloudnative.io/

 

 

一、Prometheus简介

 

什么是 Prometheus?

Prometheus 是由前 Google 工程师从 2012 年开始在 Soundcloud 以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了 Prometheus 作为监控告警工具。Prometheus 的开发者和用户社区非常活跃,它现在是一个独立的开源项目,可以独立于任何公司进行维护。为了证明这一点,Prometheus 于 2016 年 5 月加入 CNCF 基金会,成为继 Kubernetes 之后的第二个 CNCF 托管项目。

 

Prometheus 的优势

Prometheus 的主要优势有:

  • 由指标名称和和键/值对标签标识的时间序列数据组成的多维数据模型。

  • 强大的查询语言 PromQL。

  • 不依赖分布式存储;单个服务节点具有自治能力。

  • 时间序列数据是服务端通过 HTTP 协议主动拉取获得的。

  • 也可以通过中间网关来推送时间序列数据。

  • 可以通过静态配置文件或服务发现来获取监控目标。

  • 支持多种类型的图表和仪表盘。

 

 

Prometheus 的组件

Prometheus 生态系统由多个组件组成,其中有许多组件是可选的:

  • Prometheus Server 作为服务端,用来存储时间序列数据。

  • 客户端库用来检测应用程序代码。

  • 用于支持临时任务的推送网关。

  • Exporter 用来监控 HAProxy,StatsD,Graphite 等特殊的监控目标,并向 Prometheus 提供标准格式的监控样本数据。

  • alartmanager 用来处理告警。

  • 其他各种周边工具。

其中大多数组件都是用 Go 编写的,因此很容易构建和部署为静态二进制文件。

 

 

Prometheus 的架构

Prometheus 的整体架构以及生态系统组件如下图所示:

 

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1

 

Prometheus Server 直接从监控目标中或者间接通过推送网关来拉取监控指标,它在本地存储所有抓取到的样本数据,并对此数据执行一系列规则,以汇总和记录现有数据的新时间序列或生成告警。可以通过 Grafana 或者其他工具来实现监控数据的可视化。

 

Prometheus 适用于什么场景

 

Prometheus 适用于记录文本格式的时间序列,它既适用于以机器为中心的监控,也适用于高度动态的面向服务架构的监控。在微服务的世界中,它对多维数据收集和查询的支持有特殊优势。Prometheus 是专为提高系统可靠性而设计的,它可以在断电期间快速诊断问题,每个 Prometheus Server 都是相互独立的,不依赖于网络存储或其他远程服务。当基础架构出现故障时,你可以通过 Prometheus 快速定位故障点,而且不会消耗大量的基础架构资源。

 

 

 

Prometheus 不适合什么场景

Prometheus 非常重视可靠性,即使在出现故障的情况下,你也可以随时查看有关系统的可用统计信息。如果你需要百分之百的准确度,例如按请求数量计费,那么 Prometheus 不太适合你,因为它收集的数据可能不够详细完整。这种情况下,你最好使用其他系统来收集和分析数据以进行计费,并使用 Prometheus 来监控系统的其余部分。

 

 

     好了,通过上面的这一大段,相信大家已经对普罗米休斯有了第一印象,我这里再简单概述一下。普罗米休斯是一个很牛叉的监控系统,有很完善的社区,能够完成指标数据采集时间序列存储多维度查询PromQL)、可视化展现。换句话说,普罗米休斯能完成监控数据的采集、入库、查询、可视化呈现。

     作为一个监控系统,他到底能监控什么?

  •  
  •  
  •  
  •  
###系统监控CPU、内存,磁盘,网卡流量,TCP状态,进程数等### 应用监控MySQL、Redis、MongoDB、JVM、K8S、Nginx等

     当然,普罗米休斯的监控能力远不止这些,上面仅列举了大家所熟知的一些监控案例,如果感兴趣,建议多逛逛社区,社区内容真的非常丰富!

     好了,废话说完了,终于要到了实操环节,下面的才是真的干货。

 

二、kpi目标

 

通过普罗米修斯+mysql_exporter+Grafana 实现对mysql各项指标的可视化监控

 

三、环境准备

 

1、装有linux虚拟机的笔记本电脑一台

2、linux虚拟机中安装mysql

3、服务规划

      由于租不起服务器+家里老电脑配置较低,所有的服务均部署在一台里虚拟机上,当然不仅仅是为了省事,最大的原因还是qiong。如果有条件,还是建议大家多台实例分别安装部署,这样更能模拟出实际线上环境。

ps: 注意exporter组件需安装在被监控主机上,比如这次试验中的mysql_exporter必须得跟mysql安装在同一台虚拟机中。

  •  
  •  
  •  
  •  
  •  
192.168.17.133:9090  Prometheus 服务192.168.17.133:3000  Grafana 服务
192.168.17.133:9104  mysql_exporter 服务192.168.17.133:3306  mysql 服务

 

 

四、Prometheus安装部署

 

总共两个步骤,如果你有linux基础,那就是分分钟的事

1、下载安装包,上传服务器

  •  
  •  
### 官网地址https://prometheus.io/download/

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

2、解压安装

  •  
  •  
  •  
  •  
  •  
  •  
## 解压tar xzvf prometheus-2.29.2.linux-amd64.tar.gz## 重命名mv prometheus-2.29.2.linux-amd64 prometheus## 进入目录cd prometheus

3、查看配置文件:prometheus.yml文件

 后面的exporter服务配置,以及监控组件均将配置在这个配置文件中,可以看到,普罗米休斯服务默认端口为9090,这里我们直接使用默认的配置,先不做修改。

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

4、后台启动prometheus

  •  
./prometheus --config.file="/usr/local/prometheus/prometheus.yml" &

5、浏览器访问 192.168.17.133:9090

成功访问到Prometheus 的web客户端,启动成功!

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

6、点击status->targets,可查看普罗米休斯当前的监控项,由于还未配置任何其他的监控项,下面的targets列表中,只有本机。

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

五、mysql_exporter安装部署

 

1、下载插件

  •  
https://prometheus.io/download/

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1

 

 

2、上传mysql服务器并解压安装

ps:注意一定是安装在被监控服务器

 

  •  
  •  
  •  
  •  
  •  
  •  
## 解压tar xzvf node_exporter-1.2.2.linux-amd64.tar.gz## 重命名mv mysqld_exporter-0.13.0.linux-amd64 mysqld_exporter## 进入目录cd mysqld_exporter

 

3、新建.my.cnf配置文件

ps:注意这个文件没有,需要新建

  •  
  •  
  •  
  •  
  •  
  •  
## 新建文件 vi .my.cnf ## 配置本机的mysql用户名密码[client]user=rootpassword=123456

 

4、启动服务

使用nohup 后台启动

  •  
nohup ./mysqld_exporter --config.my-cnf="./.my.cnf" &

新建启动脚本,方便下次启动服务

  •  
  •  
[root@localhost mysqld_exporter]# vi start.sh nohup ./mysqld_exporter --config.my-cnf="./.my.cnf" &

查看nohup.out日志

  •  
tail -100f nohup.out

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

5、查看服务进程

  •  
  •  
  •  
[root@localhost mysqld_exporter]# ps -ef|grep mysqld_exporter root     115077  14620  0 18:22 pts/1    00:00:00 ./mysqld_exporter --config.my-cnf=./.my.cnfroot     116050  14620  0 18:24 pts/1    00:00:00 grep --color=auto mysqld_exporter

 

6、测试指标采集

  •  
curl localhost:9104/metrics

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

通过curl命令,可get到mysq服务的各项指标,这代表mysql_exporter已正常运行。

 

7、配置prometheus

进入prometheus目录‍

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
[root@localhost monitor]# cd prometheus[root@localhost prometheus]# ll总用量 167988drwxr-xr-x. 2 994 3434       38 2月  18 2021 console_librariesdrwxr-xr-x. 2 994 3434      173 2月  18 2021 consolesdrwxr-xr-x. 5 994 root      104 8月  30 17:53 data-rw-r--r--. 1 994 3434    11357 2月  18 2021 LICENSE-rw-r--r--. 1 994 3434     3420 2月  18 2021 NOTICE-rwxr-xr-x. 1 994 3434 91044140 2月  17 2021 prometheus-rw-r--r--. 1 994 3434     1012 8月  30 17:51 prometheus.yml-rwxr-xr-x. 1 994 3434 80948693 2月  17 2021 promtool-rwxrwxrwx. 1 994 root       44 8月  30 17:52 startup.sh[root@localhost prometheus]# vi prometheus.yml

修改 prometheus.yml 配置文件

新增脚本配置:

  •  
  •  
  •  
- job_name: mysqld_exporter        static_configs:        - targets: ['localhost:9104']

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

8、重启prometheus服务

重启成功之后,查看Targets,你会发现,现在targets列表中多了一项,是的没错,mysql_exporter已经注册进来了。

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

查看下仪表盘,随便输入并选择一项mysql的指标,点击execute查询,可以看到指标数据查询正常,切换到Graph,指标可视化展现也ok

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

      好的,大功告成,现在已经普罗米休斯,已经能正常监控采集mysql的指标数据,并且通过自带的ui界面,可以对数据进行查询以及简单的展示。

通过观察我们可以看到,普罗米休斯自带的ui,可视化效果并不是特别友好,反正看着没有高大上的感觉。

     所以该Grafana上场了,接下来看看Grafana的安装配置。

 

六、Grafana安装部署

1、官网下载

  •  
https://grafana.com/get/?tech=target&plcmt=top-nav&cta=downloads-B-easiest-way

2、上传服务器+yum安装

  •  
yum -y install grafana-7.4.2-1.x86_64.rpm

 

3、安装包默认信息

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
## 二进制文件/usr/sbin/grafana-server## init.d 脚本/etc/init.d/grafana-server## 环境变量文件/etc/sysconfig/grafana-server## 配置文件/etc/grafana/grafana.ini## 启动项grafana-server.service## 日志文件/var/log/grafana/grafana.log## 默认配置的sqlite3数据库/var/lib/grafana/grafana.db

 

4、开启服务

  •  
  •  
  •  
  •  
## 启动服务systemctl start grafana-server## 设置服务开机自启systemctl enable grafana-server

5、查看服务进程

  •  
  •  
  •  
  •  
  •  
[root@localhost grafana]# ps -ef|grep grafana-servergrafana    1235      1  0 19:33 ?        00:00:01 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid --packaging=rpm cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins cfg:default.paths.provisioning=/etc/grafana/provisioningroot      28770   4241  0 20:27 pts/0    00:00:00 grep --color=auto grafana-server[root@localhost grafana]# ss -naltp|grep grafanaLISTEN     0      128         :::3000                    :::*                   users:(("grafana-server",pid=1235,fd=9))

 

6、浏览器访问:http://192.168.17.133:3000/

首次登陆默认账号密码:admin/admin,

登录成功之后需要重置密码,首页长这样

 

 

7、新建数据源

 

 

 

选择Prometheus数据源

 

 

填写数据源名称

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

点击左下按钮,保存测试

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

显示 Data source is working,表示成功连接到我们的普罗米修斯服务,接下来,就是数据查询+可视化呈现了

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

8、下载仪表盘模板,并导入

访问官网:

  •  
https://grafana.com/grafana/dashboards?tech=target&plcmt=top-nav&cta=downloads-B-easiest-way

 

 

点击Dashboards:

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

在dashboard页面,有各式各样的grafana仪表盘模板,可通过左下角的过滤条件去检索想要的模板,选择好模板后,可下载为json文件(更推荐这种方式)

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

 

下载完json模板之后,回到我们的grafana界面,导入下载好的mysql监控模板

 

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

填写基本信息,选择刚刚建好的数据源,点击import

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

9、炫酷的仪表盘出现了

通过仪表盘我们可以非常直观的看到mysql的各项指标数据,界面非常炫酷,确实比普罗米修斯自带的UI强了许多

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

 

 

 

     总结一下,今天的文章分享了普罗米休斯+mysql_exporter+grafana 实现mysql指标可视化监控的完整案例,内容不是很干,但是我的嘴很干,喝口水准备睡觉了。

     最后,今天的知识点,你get到了吗?如果觉得不错,可以点一下关注,实在不行点个赞也行。