Prometheus - Grafana 监控 MysqlD && Linux服务器 详细版

readme

其实上一篇文章已经把如何操作,基本上是写全了(因为是从本文精炼出来的)本文可能更多的是补充一些关于 Prometheus 和 Grafana 的理论 ,关系等。

操作 标签:是必看,要操作的。
非必要看 标签:是非必看,是关于软件的各种理论。
PS:下文最先运行的应该是 node_exporter,然后是Prometheus,最后是Grafana。
总体架构图:

image-20230410171629435

如上图,通过 mysql_exporter 获取 MySQL 的监控数据,通过 node_exporter 获得 Linux 服务器的监控数据。将获得的监控数据传到 Prometheus 中,最终通过 Grafana 展示出来,效果如下图:
image-20230410171723214

0. Prometheus简介(非必要看)

多维度数据模型。 灵活的查询语言。 不依赖分布式存储,单个服务器节点是自主的。 通过基于HTTP的pull方式采集时序数据。 可以通过中间网关进行时序列数据推送。 通过服务发现或者静态配置来发现目标服务对象。 支持多种多样的图表和界面展示,比如Grafana等。

Prometheus架构图(非必要看)

image-20230410134244492

说明:prometheus 直接或通过pushgateway抓取数据。将数据存储在本地,并对这些数据运行规则,以便从现有数据聚合和记录新时间序列,或者生成警报。grafana等可用于可视化数据。

Prometheus组件说明(非必要看)

prometheus Server: 根据配置完成数据采集, 服务发现以及数据存储。

Push Gateway : 为应对部分push场景提供的插件,监控数据先推送到 Push Gateway 上,然后再由 Prometheus Server 端采集 pull 。用于存在时间较短,可能在 Prometheus 来 pull 之前就消失了的 jobs (若 Prometheus Server 采集间隔期间,Push Gateway 上的数据没有变化, Prometheus Server 将采集到2次相同的数据,仅时间戳不同)

Exporters(探针): 是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。

Alertmanager: Prometheus server 主要负责根据基于PromQL的告警规则分析数据,如果满足PromQL定义的规则,则会产生一条告警,并发送告警信息到Alertmanager,Alertmanager则是根据配置处理告警信息并发送。

**常见的接收方式有:**电子邮件,webhook 等。Alertmanager三种处理告警信息的方式:分组,抑制,静默。

1. 下载和安装Prometheus(操作)

首先,你需要下载和安装Prometheus。你可以从Prometheus的官方网站(https://prometheus.io/)下载最新版本的二进制文件。下载好后,你需要将Prometheus解压到你的计算机上。

image-20230410132154306

关于监控(非必要看)

监控系统(非必要看)

image-20230410133441317

监控什么(非必要看)

配置Prometheus(操作)

在解压Prometheus之后,你需要配置Prometheus以监控你的应用程序。在Prometheus的根目录下,你会找到一个名为prometheus.yml的文件。这个文件包含了Prometheus的配置信息。

你需要编辑这个文件,添加你要监控的目标。在这个文件中,你需要定义一个或多个job。每个job表示你要监控的目标。对于每个job,你需要指定一个target,它表示你要监控的应用程序的地址和端口号。

例如,假设你要监控一个名为myapp的应用程序,它运行在localhost上的8080端口,那么你的prometheus.yml文件应该如下所示:

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'myapp'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:8080']

在这个配置中,我们定义了一个名为myappjob,它每隔5秒钟就会监控一次localhost:8080这个目标。

通过配置 scrape_intervalevaluation_interval 设置采样时间和评估时间,以控制指标的精度和延迟。

连接我自己云服务器的样例(操作)

这个9100端口是下面下载后运行在云服务器上的默认端口。

-----------------------------------

添加远程主机(连接linux云服务器)(监控云服务器)(操作)

1.官网下载node_exporter安装包,官网下载地址如下: https://prometheus.io/download/

将 node_exporter 传到需要监控的 MySQL 机器上,进行解压:

sdo utar -zxvf node_exporter-1.5.0.linux-amd64.tar.gz -C /opt/

创建软链接:

sudo ln -s /opt/node_exporter-1.5.0.linux-amd64/ /opt/node_exporter

启动

sudo nohup /opt/node_exporter/node_exporter &(下载完了就可以运行了,运行在Prometheus之前)

image-20230410132108155

运行Prometheus(操作)

在完成了配置之后,你可以启动Prometheus。在Prometheus的根目录下,运行以下命令:

./prometheus (.exe)

这将启动Prometheus,并开始监控你在配置文件中指定的目标。

查看监控数据(操作)

一旦Prometheus开始监控你的应用程序,它就会收集各种指标数据,并将这些数据(启动后,您可以在浏览器中输入 http://localhost:9090/,访问 Prometheus 的 UI 界面,在其中可以看到已经可以采集到的指标。)

此时如果这里报错:get context deadline exceeded,就是说明没有开放此端口,我是在阿里云上开放了就可以了

image-20230410132558121

浏览器输入:http://192.168.150.123:9100/metrics,如果有类似如下数据,则表示 node_exporter 部署完成。

image-20230410173154189

-----------------------------------

添加远程主机(连接mysql服务器)(监控mysql服务器)(操作)

部署 mysqld_exporter 组件(操作)

首先在https://prometheus.io/download/中找到对应的 mysqld_exporter 版本。

将 mysqld_exporter 传到需要监控的 MySQL 机器上,进行解压:

sudo tar zxvf mysqld_exporter-0.14.0.linux-amd64.tar.gz -C /opt

创建软链接

sudo ln -s /opt/mysqld_exporter-0.14.0.linux-amd64/ /opt/mysqld_exporter

在 MySQL 上创建监控用户

create user ‘exporter’@‘localhost’ IDENTIFIED BY ‘112233lml!’;

GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON . TO ‘exporter’@‘localhost’;

新建一个配置文件:

sudo vim /opt/mysqld_exporter/mysqld_exporter.cnf

配置 MySQL 监控用户信息:

[client]
user=exporter
password=112233lml!

启动 mysqld_exporter

sudo nohup /opt/mysqld_exporter/mysqld_exporter --config.my-cnf=/opt/mysqld_exporter/mysqld_exporter.cnf &

浏览器输入:http://192.168.150.123:9104/metrics,可获得 MySQL 监控数据,如下图(部分数据):

image-20230410173625695

配置 Prometheus 获取监控数据(操作)

image-20230412152701225

重启 prometheus

-----------------------------------

配置Prometheus的告警规则(文章最后面有详细设置)

Prometheus支持基于指标的告警规则,以便在监控数据达到特定阈值时发送告警通知。你可以通过Prometheus的prometheus.yml文件来配置告警规则,并通过Alertmanager来发送告警通知。在告警规则中,你可以设置阈值、告警级别和告警通知方式等。

分隔符 || 集成Prometheus和Grafana(非必要看)

Prometheus和Grafana是两个常用的监控和分析工具,它们可以很好地协同工作来实现更高效的监控和分析。你可以通过Prometheus提供的API来将监控数据传递给Grafana,并利用Grafana的可视化工具来展示和分析数据。通过Prometheus和Grafana的集成,你可以更好地了解你的系统运行情况,并及时采取措施来解决问题和风险。

总之,Prometheus是一个功能强大的监控和分析工具,可以帮助你实时监控和分析系统的性能和运行情况。通过Prometheus,你可以更好地了解你的系统,并及时采取措施来解决潜在问题和风险。

Prometheus的监控展现图通常是基于Grafana进行展示的。Grafana是一款开源的数据可视化工具,它可以方便地将Prometheus收集到的监控数据展示为各种形式的图表。

2. Grafana简介(非必要看)

Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表,并且带有告警功能。

Grafana 不对数据源作假设,它支持以下各种数据,也就是说如果你的数据源是以下任意一种,它都可以帮助生成仪表

(不管你用什么语言)。

Grafana 支持的数据源(非必要看)

  • Prometheus 本文中的例子,你没听过也没关系不影响阅读,把它想象成带时间戳的 MySQL 就好
  • Graphite
  • OpenTSDB
  • InfluxDB
  • MySQL/PostgreSQL
  • Microsoft SQL Server
  • 等等

特点(非必要看)

①可视化:快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化指标和日志。

②报警:可视化地为最重要的指标定义警报规则。Grafana将持续评估它们,并发送通知。

③通知:警报更改状态时,它会发出通知。接收电子邮件通知。

④动态仪表盘:使用模板变量创建动态和可重用的仪表板,这些模板变量作为下拉菜单出现在仪表板顶部。

⑤混合数据源:在同一个图中混合不同的数据源!可以根据每个查询指定数据源。这甚至适用于自定义数据源。

⑥注释:注释来自不同数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记。

⑦过滤器:过滤器允许您动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询。

3. 安装和使用Grafana(操作)

下载和安装Grafana(操作)

首先,你需要从Grafana的官方网站(https://grafana.com/grafana/download)下载最新版本的二进制文件。下载好后,你需要将Grafana解压到你的计算机上。(我下载的windows的)

启动Grafana(操作)

在解压Grafana之后,你需要启动Grafana。在Grafana的根目录下,运行以下命令:

./bin/grafana-server web

这将启动Grafana,并将其运行在默认端口3000上。你可以在浏览器中访问http://localhost:3000来访问Grafana的Web界面。

(

默认端口:3000

地址:http://ip:3000

初始管理员账号:admin,密码:admin

)

配置数据源(操作)

在访问Grafana的Web界面之后,你需要配置Grafana的数据源。数据源是Grafana用来获取监控数据的来源。在Grafana的Web界面中,选择左侧菜单栏的“Configuration” -> “Data Sources”,然后点击“Add data source”按钮来添加你的数据源。

image-20230410141131265

Grafana支持多种数据源,包括Prometheus、InfluxDB、Graphite等。选择你要使用的数据源,并填写相应的配置信息。例如,如果你要使用Prometheus作为数据源,那么你需要填写Prometheus的地址和端口号。

创建仪表盘(详文请跳转到后面 – 构建你的第一个仪表盘)(操作)

在配置好数据源之后,你可以开始创建你的第一个仪表盘了。在Grafana的Web界面中,选择左侧菜单栏的“Create” -> “Dashboard”,然后点击“Add panel”按钮来添加你的图表。

image-20230410141450914

在添加图表时,你可以选择不同的展示形式,如折线图、柱状图、饼图等。你还可以选择你要展示的指标和时间范围。

查看监控数据(非必要看)

一旦你创建了你的仪表盘,在你创建了仪表盘之后,你可以查看监控数据并进行分析。在Grafana的Web界面中,你可以选择左侧菜单栏的“Dashboard”来查看你的仪表盘。

在仪表盘中,你可以看到你所选择的监控数据的可视化图表以及相应的指标。你可以根据需要对图表进行调整和修改,以便更好地展示你所关注的指标和数据。

此外,Grafana还提供了各种可视化工具和插件,以便用户自定义和扩展监控数据的展示方式。你可以在Grafana的官方网站上查找和下载这些插件,以便更好地满足你的需求。

总之,Grafana是一个功能强大的监控和分析工具,可以帮助你实时监控和分析系统的性能和运行情况。通过Grafana,你可以更好地了解你的系统,并及时采取措施来解决潜在问题和风险。

-----------------------------------

构建你的第一个仪表盘(操作)

常见问题(非必要看)

  1. 服务监控到底咋配置?怎样保证数据安全?
  2. 保证健康的服务到底应该监控些什么?
  3. 配置好后的仪表盘为啥消失了?
  4. 查询 Query 又该咋写?

注意,在之后的所有步骤中,你的 docker 应该处于运行状态。

在这里我们启动了三个服务(非必要看)

  • Prometheus 普罗米修斯时序数据库,用来存储和查询你的监控数据
  • Promethues-exporter 一个模拟数据源,用来监控你本机的状态,比如有几个 CPU,CPU 的负载之类
  • Grafana 本尊

到这里,你的 Grafana 就已经搭起来了。注意到 Docker 的配置文件中我们创建了三个服务,这三个服务之间分别有什么关系呢?

或者说,Grafana 和时序数据库,数据源之间有什么关系呢?请看下文 Grafana 工作原理

Grafana 工作原理(非必要看)

上面说到,Grafana 是一个仪表盘,而仪表盘必然是用来显示数据的。

Grafana 本身并不负责数据层,它只提供了通用的接口,让底层的数据库可以把数据给它。而我们起的另一个服务,叫 Prometheus (中文名普罗米修斯数据库)则是负责存储和查询数据的。

也就是说,Grafana 每次要展现一个仪表盘的时候,会向 Prometheus 发送一个查询请求。

那么配置里的另一个服务 Prometheus-exporter 又是什么呢?

这个就是你真正监测的数据来源了,Prometheus-exporter 这个服务,会查询你的本地电脑的信息,比如内存还有多少、CPU 负载之类,然后将数据导出至普罗米修斯数据库。

在真实世界中,你的目的是监控你自己的服务,比如你的 Web 服务器,你的数据库之类。

那么你就需要在你自己的服务器中把数据发送给普罗米修斯数据库。当然,你完全可以把数据发送给 MySQL (Grafana 也支持),但普罗米修斯几乎是标配的时序数据库,强烈建议你用。

用一张图来说明它们之间的关系:

image-20230410143304743

这里,最左边的 Docker 服务会将服务的数据发送给中间的普罗米修斯(对应上文的 Prometheus-exporter),而最右边的 Grafana 会查询中间的普罗米修斯,来展示仪表盘。

搭建你的第一个仪表盘(操作)

第 1 步 - 设置数据源(操作)

image-20230410143639667

之后设置数据源 URL。请注意,Promethues 的工作原理是通过轮询一个 HTTP 请求来获取数据的,而 Grafana 在获取数据源的时候也是通过一个 HTTP 请求,因此这个地方你需要告诉 Grafana 你的 Prometheus 的数据端点是什么。

这里我们填入 http://prometheus:9090 就可以了。

//这里可能有问题 ?(我是用的localhost)(目前没问题)

(为什么不是 localhost:9090 呢?原因是,我们用了 docker-compose 起的三个服务,可以把它们想象成三台独立的服务器,因此需要用一个域名来互相通信。我们在 docker-compose.yml 中设置的普罗米修斯服务器的名字就叫 prometheus,因此这里需要用前者。)

image-20230410143854979

点确认时一定要确认出现 Data source is working 这个检测,这时表明你的 Grafana 已经跟普罗米修斯说上话了。(直接save)

第 2 步 - 导入 Dashboard(操作)

在 Grafana 里,仪表盘的配置可以通过图形化界面进行,但配置好的仪表盘是以 JSON 存储的。这也就是说,如果你把你的 JSON 数据分享出去,别人导入就可以直接导入同样的仪表盘(前提是你们的监测数据一样)。

对于我们的例子来说,回忆一下,因为我们用了 prometheus-exporter 也就是本机的系统信息监控,那么我们可以先找一个同样用了这个数据源的仪表盘。在 Grafana 网站上,你其实可以找到很多别人已经做好的仪表,可以用来监测非常多标准化的服务。

Grafana 的仪表盘市场:https://grafana.com/grafana/dashboards

比如说针对以下一些服务的标准仪表盘就可以在这里找到

  • JVM
  • Spring Boot
  • MySQL 监控
  • Laravel 监控

那么,这里我们就用一个标准的仪表盘:https://grafana.com/grafana/dashboards/1860

在左侧的加号里,点 Import 即导入,在出现的界面中填入 1860(下面还有一个11074 可能更详细(下面有图)) 即我们要导入的仪表盘编号即可。

image-20230410145428784

然后填入你需要的信息,比如仪表盘名字等

image-20230410145444452

确认之后 Grafana 就会根据你的本机信息,生成类似 CPU 负载,内存和 I/O 之类的信息。我的磁盘状况如图(监测的我自己的云服务器):

image-20230410145516109

第 2 步 - 导入 Dashboard(操作)

把上面的import 改成11074

image-20230411102604599

-----------------------------------(非必要看 起始位置)

第 3 步 - 生成和创建新的仪表盘(目前就用了上面默认的)(操作)

最后,在上面导入信息的基础上,你就可以开始创建和你的服务、业务相关的仪表盘了。

但在这步之前,你需要先在你的服务中开始记录一些数据。

如何用 Prometheus 查询数据(目前就用了上面默认的)(操作)

普罗米修斯包括所有其它时序数据库通常都会定义一个查询语言,比如说 PromQL。

cpu使用率:
100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100)
 
内存使用率:
100-(node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes)/node_memory_MemTotal_bytes*100
 
磁盘使用率:
100 - (node_filesystem_free_bytes{mountpoint="/data01",fstype=~"ext4|xfs"} / node_filesystem_size_bytes{mountpoint="/data01",fstype=~"ext4|xfs"} * 100)
 
下载带宽:(指定某一个网卡)
irate(node_network_receive_bytes_total{device='eth0'}[5m])
 
上传带宽:(指定某一个网卡)
irate(node_network_transmit_bytes_total{device='eth0'}[5m])
 
服务器负载:
node_load1
node_load5
node_load15

如何手动生成一个仪表盘(操作)

假设你已经按上面的步骤生成了一个基本的仪表盘,那么现在可以开始手动添加仪表盘了。同样是点左侧的加号,点 Dashboard 就可以进入添加仪表盘的界面。

这里我们选择一个数据叫 scrape_duration_seconds,先不用管它的含义是什么,就当它是双 11 的销售额好了:

image-20230410151037255

-----------------------------------(非必要看 结束位置)

配置Mysql数据源(操作)

Grafana支持多种数据源,Mysql,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等。

1 配置数据源(操作)

一样是他,我们这里都是用的promethus

image-20230412152852091

2 Grafana 展示 MySQL 的监控数据

在 “Import via grafana.com” 下方输入 7362:

或者在 https://grafana.com/grafana/dashboards/7362 页面下载 JSON 模板,然后点击 “Upload JSON file” 导入,然后会显示如下信息(目前还有其他一些模板,比如 https://github.com/percona/grafana-dashboards,有兴趣的可以尝试一下):
image-20230411103029396

在 prometheus 选项选择之前创建的 Prometheus 数据源,点击 “Import”,会自动跳转到如下界面:

image-20230411103138799

到这里,完成了 Grafana 展示 Prometheus 中 MySQL 的监控数据。

告警配置

通常在正式环境上,需要监控服务器资源的使用情况,当达到使用率超过多少时,进行告警运维人员。

此时用到grafana的Alerting功能,进行定时检查/监控指标。并根据规则去发送警告信息,集成到企业微信/钉钉等办公软件

image-20230411104653645

警告形式

1、添加群机器人

创建一个钉钉/企业微信群–>添加机器人–>添加机器人后,有一个webhook地址

image-20230411104735043

2、grafana 里面配置告警渠道

2.1、添加告警渠道

image-20230411104908681

2.2、将该告警方式配置为默认方式

image-20230411104929307

具体告警规则配置

1、选定要告警的目标

在监控面板中,点击监控指标的下拉按钮–>选择Edit

image-20230411105015166

2、添加警告规则

点击Edit后,下方出现添加告警规则按钮,点击添加

image-20230411105036850

3、告警规则配置

image-20230411105056734

image-20230411105109531

最后点击保存,例如配置的规则是每分钟进行一次检查。当CPU超过3%(具体自己根据需要配置)时,进入pengding状态,持续2分钟超过3%,则会告警通知

添加告警后,可以在列表或者监控面板,查看监控状态

image-20230411105135548image-20230411105146040image-20230411105158037

image-20230411105211940企业微信对应接收到告警通知

image-20230411105250666

参考文章

设置端口:
firewall-cmd --list-ports ##列出开放的端口
firewall-cmd --add-port=9090/tcp --permanent #永久添加 9090 端口
firewall-cmd --add-port=9100/tcp --permanent #永久添加 9100 端口
firewall-cmd --add-port=9104/tcp --permanent #永久添加 9104 端口
firewall-cmd --list-ports #列出开放的端口
systemctl stop firewalld #关闭防火墙
systemctl start firewalld #开启防火墙
systemctl status firewalld #查看防火墙状态
systemctl restart firewalld #重启防火墙

参考文章:https://blog.csdn.net/liyanbin1214/article/details/125373510

参考文章:https://blog.csdn.net/easylife206/article/details/114312284

参考文章:https://blog.csdn.net/ok_shuai/article/details/128950355

参考文章:https://blog.csdn.net/weixin_43997319/article/details/124983451

参考文章:https://blog.csdn.net/qq_38571773

猜你喜欢

转载自blog.csdn.net/weixin_62700590/article/details/130124573