⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 c1n.cn/ojbYT 「airstuky」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

学习目标

如下:

  • 能够安装 prometheus 服务器
  • 能够通过安装 node_exporter 监控远程 linux
  • 能够通过安装 mysqld_exporter 监控远程 mysql 数据库
  • 能够安装 grafana
  • 能够在 grafana 添加 prometheus 数据源
  • 能够在 grafana 添加监控 cpu 负载的图形
  • 能够在 grafana 图形显示 mysql 监控数据
  • 能够通过 grafana+onealert 实现报警

任务背景

某某某公司是一家电商网站,由于公司的业务快速发展,公司要求对现有机器进行业务监控,责成运维部门来实施这个项目。

任务要求

如下:

  • 部署监控服务器,实现 7x24 实时监控
  • 针对公司的业务及研发部门设计监控系统,对监控项和触发器拿出合理意见
  • 做好问题预警机制,对可能出现的问题要及时告警并形成严格的处理机制
  • 做好监控告警系统,要求可以实现告警分级,一级报警:电话通知;二级报警:微信通知;三级报警:邮件通知
  • 处理好公司服务器异地集中监控问题,K8S 内部使用的监控系统就是普罗米修斯

任务分析

为什么要监控?答:实时收集数据,通过报警及时发现问题,及时处理。数据为优化也可以提供依据。

监控四要素:

  • 监控对象 [主机状态 服务 资源 页面,url]
  • 用什么监控 [zabbix-server zabbix-agent] => 普罗米修斯监控
  • 什么时间监控 [7x24 5x8]
  • 报警给谁 [管理员]

Prometheus 实战

Prometheus 概述

Prometheus(由 go 语言开发)是一套开源的监控&报警&时间序列数据库的组合。适合监控 docker 容器。因为 kubernetes 的流行带动了 prometheus 的发展。

https://prometheus.io/docs/introduction/overview/

时间序列数据

①什么是序列数据

时间序列数据(TimeSeries Data):按照时间顺序记录系统、设备状态变化的数据被称为时序数据。

应用的场景很多,如:

  • 无人驾驶车辆运行中要记录的经度,纬度,速度,方向,旁边物体的距离等等。每时每刻都要将数据记录下来做分析。
  • 某一个地区的各车辆的行驶轨迹数据
  • 传统证券行业实时交易数据
  • 实时运维监控数据等

②时间序列数据特点

性能好:关系型数据库对于大规模数据的处理性能糟糕。NOSQL 可以比较好的处理大规模数据,让依然比不上时间序列数据库。

存储成本低:高效的压缩算法,节省存储空间,有效降低 IO。

Prometheus 有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用 3.5byte 左右空间,上百万条时间序列,30 秒间隔,保留 60 天,大概花了 200 多 G(来自官方数据)。

③Prometheus 的主要特征

如下:

  • 多维度数据模型
  • 灵活的查询语言
  • 不依赖分布式存储,单个服务器节点是自主的
  • 以 HTTP 方式,通过 pull 模型拉去时间序列数据
  • 也可以通过中间网关支持 push 模型
  • 通过服务发现或者静态配置,来发现目标服务对象
  • 支持多种多样的图表和界面展示

④普罗米修斯架构原理

如下图:

实验环境准备

1️⃣静态 ip(要求能上外网)

2️⃣主机名

3️⃣时间同步(时间同步一定要确认一下)

4️⃣关闭防火墙,selinux

①安装 prometheus

从官网下载相应版本,安装到服务器上:

https://prometheus.io/download/

官网提供的是二进制版,解压就能用,不需要编译。

②Prometheus 界面

通过浏览器访问 http:// 服务器 IP:9090 就可以访问到 Prometheus 的主界面:

默认只监控了本机一台,点 Status→点 Targets→可以看到只监控了本机:

③主机数据展示

通过 http:// 服务器 IP:9090/metrics 可以查看到监控的数据:

在 web 主界面可以通过关键字查询监控项:

④监控远程 Linux 主机

在远程 linux 主机(被监控端 agent1)上安装 node_exporter 组件。

下载地址:

https://prometheus.io/download/

扩展:nohup 命令。如果把启动 node_exporter 的终端给关闭,那么进程也会随之关闭。nohup 命令会帮你解决这个问题。

通过浏览器访问 http:// 被监控端 IP:9100/metrics 就可以查看到 node_exporter 在被监控端收集的监控信息:

回到 Prometheus 服务器的配置文件里添加被监控机器的配置段:

回到 web 管理界面→点 Status→点 Targets→可以看到多了一台监控目标:

练习:加上本机 prometheus 的监控。答:在本机安装 node_exporter,也使用上面的方式监控起来。

⑤监控远程 MySQL

在被管理机 agent1 上安装 mysqld_exporter 组件:

回到 Prometheus 服务器的配置文件里添加被监控的 mariadb 的配置段:

回到 web 管理界面→点 Status→点 Targets→可以看到监控 mariadb 了:

Grafana 可视化图形工具

①什么是 Grafana

Grafana 是一个开源的度量分析和可视化工具,可以通过将采集的数据分析,查询,然后进行可视化的展示,并能实现报警。

网址:

https://grafana.com/

②使用 Grafana 连接 Prometheus

在 grafana 服务器上安装 grafana,下载地址:

https://grafana.com/grafana/download

通过浏览器访问 http:// grafana 服务器 IP:3000 就到了登录界面,使用默认的 admin 用户,admin 密码就可以登陆了。

下面我们把 Prometheus 服务器收集的数据做为一个数据源添加到 grafana,让 grafana 可以得到 Prometheus 的数据。

然后为添加好的数据源做图形显示:

点击保存:

最后在 dashboard 可以查看到:

匹配条件显示:

③Grafana 图形显示 MySQL 监控数据

在 grafana 上修改配置文件,并下载安装 mysql 监控的 dashboard(包含相关 json 文件,这些 json 文件可以看作是开发人员开发的一个监控模板)。

参考网址:

https://github.com/percona/grafana-dashboards

在 grafana 图形界面导入相关 json 文件:

点 import 导入后,报 prometheus 数据源找不到,因为这些 json 文件里默认要找的就是叫 Prometheus 的数据源,但我们前面建立的数据源却是叫 prometheus_data(坑啊)。

那么请自行把原来的 prometheus_data 源改名为 Prometheus 即可(注意:第一个字母 P 是大写)。

然后再回去刷新,就有数据了,如下图所示:

过段时间再看,就会有数据了,如下图所示:

④Grafana+onealert 报警

Prometheus 报警需要使用 alertmanager 这个组件,而且报警规则需要手动编写(对运维来说不友好)。所以我这里选用 grafana+onealert 报警。注意:实现报警前把所有机器时间同步再检查一遍。

先在 onealert 里添加 grafana 应用:

配置通知策略:

在 grafana 增加通知通道:

现在可以去设置一个报警来测试了(这里以我们前面加的 cpu 负载监控来做测试):

保存后就可以测试了,如果 agent1 上的 cpu 负载还没有到 0.5,你可以试试 0.1,或者运行一些程序把 agent1 负载调大。

最终能测试报警成功:

最终的邮件报警效果:

测试 MySQL 链接数报警:

⑤总结报警不成功的可能原因

如下:

  • 各服务器之间时间不同步,这样时序数据会出问题,也会造成报警出问题
  • 必须写通知内容,留空内容是不会发报警的
  • 修改完报警配置后,记得要点右上角的保存
  • 保存配置后,需要由 OK 状态变为 alerting 状态才会报警(也就是说,你配置保存后,就已经是 alerting 状态是不会报警的)
  • grafana 与 onealert 通信有问题
文章目录
  1. 1. 学习目标
  2. 2. 任务背景
  3. 3. 任务要求
  4. 4. 任务分析
  5. 5. Prometheus 实战
    1. 5.0.0.1. Prometheus 概述
    2. 5.0.0.2. 时间序列数据
    3. 5.0.0.3. 实验环境准备
    4. 5.0.0.4. Grafana 可视化图形工具