readme
其实上一篇文章已经把如何操作,基本上是写全了(因为是从本文精炼出来的)本文可能更多的是补充一些关于 Prometheus 和 Grafana 的理论 ,关系等。
操作 标签:是必看,要操作的。
非必要看 标签:是非必看,是关于软件的各种理论。
PS:下文最先运行的应该是 node_exporter,然后是Prometheus,最后是Grafana。
总体架构图:
如上图,通过 mysql_exporter 获取 MySQL 的监控数据,通过 node_exporter 获得 Linux 服务器的监控数据。将获得的监控数据传到 Prometheus 中,最终通过 Grafana 展示出来,效果如下图:
0. Prometheus简介(非必要看)
多维度数据模型。 灵活的查询语言。 不依赖分布式存储,单个服务器节点是自主的。 通过基于HTTP的pull方式采集时序数据。 可以通过中间网关进行时序列数据推送。 通过服务发现或者静态配置来发现目标服务对象。 支持多种多样的图表和界面展示,比如Grafana等。
Prometheus架构图(非必要看)
说明: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解压到你的计算机上。
关于监控(非必要看)
监控系统(非必要看)
监控什么(非必要看)
配置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']
在这个配置中,我们定义了一个名为myapp
的job
,它每隔5秒钟就会监控一次localhost:8080
这个目标。
通过配置 scrape_interval
和 evaluation_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之前)
运行Prometheus(操作)
在完成了配置之后,你可以启动Prometheus。在Prometheus的根目录下,运行以下命令:
./prometheus (.exe)
这将启动Prometheus,并开始监控你在配置文件中指定的目标。
查看监控数据(操作)
一旦Prometheus开始监控你的应用程序,它就会收集各种指标数据,并将这些数据(启动后,您可以在浏览器中输入 http://localhost:9090/
,访问 Prometheus 的 UI 界面,在其中可以看到已经可以采集到的指标。)
此时如果这里报错:get context deadline exceeded,就是说明没有开放此端口,我是在阿里云上开放了就可以了
浏览器输入:http://192.168.150.123:9100/metrics,如果有类似如下数据,则表示 node_exporter 部署完成。
-----------------------------------
添加远程主机(连接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 监控数据,如下图(部分数据):
配置 Prometheus 获取监控数据(操作)
重启 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”按钮来添加你的数据源。
Grafana支持多种数据源,包括Prometheus、InfluxDB、Graphite等。选择你要使用的数据源,并填写相应的配置信息。例如,如果你要使用Prometheus作为数据源,那么你需要填写Prometheus的地址和端口号。
创建仪表盘(详文请跳转到后面 – 构建你的第一个仪表盘)(操作)
在配置好数据源之后,你可以开始创建你的第一个仪表盘了。在Grafana的Web界面中,选择左侧菜单栏的“Create” -> “Dashboard”,然后点击“Add panel”按钮来添加你的图表。
在添加图表时,你可以选择不同的展示形式,如折线图、柱状图、饼图等。你还可以选择你要展示的指标和时间范围。
查看监控数据(非必要看)
一旦你创建了你的仪表盘,在你创建了仪表盘之后,你可以查看监控数据并进行分析。在Grafana的Web界面中,你可以选择左侧菜单栏的“Dashboard”来查看你的仪表盘。
在仪表盘中,你可以看到你所选择的监控数据的可视化图表以及相应的指标。你可以根据需要对图表进行调整和修改,以便更好地展示你所关注的指标和数据。
此外,Grafana还提供了各种可视化工具和插件,以便用户自定义和扩展监控数据的展示方式。你可以在Grafana的官方网站上查找和下载这些插件,以便更好地满足你的需求。
总之,Grafana是一个功能强大的监控和分析工具,可以帮助你实时监控和分析系统的性能和运行情况。通过Grafana,你可以更好地了解你的系统,并及时采取措施来解决潜在问题和风险。
-----------------------------------
构建你的第一个仪表盘(操作)
常见问题(非必要看)
- 服务监控到底咋配置?怎样保证数据安全?
- 保证健康的服务到底应该监控些什么?
- 配置好后的仪表盘为啥消失了?
- 查询 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 也支持),但普罗米修斯几乎是标配的时序数据库,强烈建议你用。
用一张图来说明它们之间的关系:
这里,最左边的 Docker 服务会将服务的数据发送给中间的普罗米修斯(对应上文的 Prometheus-exporter
),而最右边的 Grafana 会查询中间的普罗米修斯,来展示仪表盘。
搭建你的第一个仪表盘(操作)
第 1 步 - 设置数据源(操作)
之后设置数据源 URL。请注意,Promethues 的工作原理是通过轮询一个 HTTP 请求来获取数据的,而 Grafana 在获取数据源的时候也是通过一个 HTTP 请求,因此这个地方你需要告诉 Grafana 你的 Prometheus 的数据端点是什么。
这里我们填入 http://prometheus:9090
就可以了。
//这里可能有问题 ?(我是用的localhost)(目前没问题)
(为什么不是 localhost:9090
呢?原因是,我们用了 docker-compose
起的三个服务,可以把它们想象成三台独立的服务器,因此需要用一个域名来互相通信。我们在 docker-compose.yml 中设置的普罗米修斯服务器的名字就叫 prometheus
,因此这里需要用前者。)
点确认时一定要确认出现 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 可能更详细(下面有图)) 即我们要导入的仪表盘编号即可。
然后填入你需要的信息,比如仪表盘名字等
确认之后 Grafana 就会根据你的本机信息,生成类似 CPU 负载,内存和 I/O 之类的信息。我的磁盘状况如图(监测的我自己的云服务器):
第 2 步 - 导入 Dashboard(操作)
把上面的import 改成11074
-----------------------------------(非必要看 起始位置)
第 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 的销售额好了:
-----------------------------------(非必要看 结束位置)
配置Mysql数据源(操作)
Grafana支持多种数据源,Mysql,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等。
1 配置数据源(操作)
一样是他,我们这里都是用的promethus
2 Grafana 展示 MySQL 的监控数据
在 “Import via grafana.com” 下方输入 7362:
或者在 https://grafana.com/grafana/dashboards/7362 页面下载 JSON 模板,然后点击 “Upload JSON file” 导入,然后会显示如下信息(目前还有其他一些模板,比如 https://github.com/percona/grafana-dashboards,有兴趣的可以尝试一下):
在 prometheus 选项选择之前创建的 Prometheus 数据源,点击 “Import”,会自动跳转到如下界面:
到这里,完成了 Grafana 展示 Prometheus 中 MySQL 的监控数据。
告警配置
通常在正式环境上,需要监控服务器资源的使用情况,当达到使用率超过多少时,进行告警运维人员。
此时用到grafana的Alerting功能,进行定时检查/监控指标。并根据规则去发送警告信息,集成到企业微信/钉钉等办公软件
警告形式
1、添加群机器人
创建一个钉钉/企业微信群–>添加机器人–>添加机器人后,有一个webhook地址
2、grafana 里面配置告警渠道
2.1、添加告警渠道
2.2、将该告警方式配置为默认方式
具体告警规则配置
1、选定要告警的目标
在监控面板中,点击监控指标的下拉按钮–>选择Edit
2、添加警告规则
点击Edit后,下方出现添加告警规则按钮,点击添加
3、告警规则配置
最后点击保存,例如配置的规则是每分钟进行一次检查。当CPU超过3%(具体自己根据需要配置)时,进入pengding状态,持续2分钟超过3%,则会告警通知
添加告警后,可以在列表或者监控面板,查看监控状态
企业微信对应接收到告警通知
参考文章
设置端口:
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