👈👈👈 欢迎点赞收藏关注哟
首先分享之前的所有文章 >>>> 😜😜😜
文章合集 : 🎁 juejin.cn/post/694164...
Github : 👉 github.com/black-ant
CASE 备份 : 👉 gitee.com/antblack/ca...
一. 前言
秒杀系列已经准备开始聊应用了,但是前置模块还有监控体系未完善。
一个系统的监控我通常认为有3个层次 :
- API 监控 : 主要用于监控接口耗时和接口错误率等信息
- 硬件监控 : 包括 CPU ,内存等基础资源的监控
- 应用监控 : 主要对JVM ,连接池,容器信息进行监控
这一篇目标是基于 Prometheus 和 K8S 搭建一套监控系统,当然资金充裕可以跳过
,直接使用云服务商完善的体系即可,好用又扎实。
后续的秒杀必须使用到监控,不监控不知道性能情况,这一篇就来学习下,怎么部署系统监控。
二. 宏观
2.1 宏观概念
Prometheus 能做什么 ?
- S1 :
定期收集
来自各种数据源的度量标准数据
,包括应用系统性能,资源占用等 - S2 : 按照
时间序列将数据存储到数据库中
- S3 : 通过
特定的查询语句(PromQL)
实时查询数据数据
- 支持可视化的展示,生成看板,和 Grafana 结合使用
- 支持自定义报警功能,基于报警规则生成报警
- 支持动态发现目标,自动进行监控
- 支持监控多个数据源,同时监控多个系统
功能一览
流程是什么 ?
- S1 : Prometheus 提供了大量的
Exporter
用于将各种系统,和服务中的度量收集,首先需要安装对应系统的 exporter - S2 :
安装 Prometheus
组件 ,由 Prometheus 收集相关组件的数据 - S3 :
安装 grafana
,指定 grafana 调用对应 Prometheus 的 API - S4 :
配置 grafana
,将 API 返回的数据进行可视化的展示
有哪些 Exporter ?
- Node Exporter:Node Exporter是Prometheus的官方Exporter之一,用于监控Linux和Unix操作系统的硬件和资源使用情况,包括CPU、内存、磁盘、网络等。
- Blackbox Exporter:Blackbox Exporter用于执行网络探测,以监视远程服务的可用性和性能。 支持 HTTP ,DNS ,TCP 等等
- Docker Daemon Exporter:用于监控Docker容器的性能指标,如CPU使用率、内存使用率、网络流量等
- MySQL Exporter:用于监控MySQL数据库服务器的性能和状态,包括查询响应时间、连接数、缓冲池状态等
- Kubernetes State Metrics:用于监控Kubernetes集群的内部状态和度量标准,如Pod数量、节点状态、部署状态等
- Nginx Exporter:用于监控Nginx Web服务器的性能和状态,包括请求响应时间、连接数、缓存状态等
- Redis Exporter:用于监控Redis内存数据库的性能和状态,包括键空间的使用、命令统计等
- Elasticsearch Exporter:用于监控Elasticsearch搜索引擎的性能和集群状态,包括索引信息、节点状态等
还有很多其他的 exporter 这里就不细数了, 具体可以看官方文档 : Exporters and integrations | Prometheus
2.2 阶段总结
Prometheus 工具的使用流程基本上就出来了: 安装 exporter 抓取数据 ,Prometheus 保存这些 exporter 的信息, 最终通过 grafana 展示给前端
三. 方案详情
Prometheus 的安装有2种方式 ,Docker 和 二进制安装 :
3.1 Prometheus 安装 - Docker
- Docker 安装辅助组件
java
// 拉取相关镜像
docker pull prom/node-exporter
docker pull google/cadvisor
docker pull prom/prometheus
docker pull grafana/grafana
- node-exporter : 收集Linux服务器上的各种系统指标和性能数据
- 包括CPU使用率,内存使用率,磁盘I/O等
- cadvisor :用于监视容器的开源工具,配合 Docker , K8S 一起使用,用于容器性能监控
- 包括容器的基础性能(cpu ,内存)
- 可以生成报告,触发报警
// S1 : 启动 node-exporter 监控应用
docker run -d --name node-exporter --restart=always -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter
- 查看启动情况 : docker ps
- 查看端口情况 : netstat -anpt
- 访问应用 : http://11.22.217.211:9100/metrics
// S2 : 启用 cadvisor 监控容器
docker run --privileged=true -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk/:/dev/disk:ro -p 8080:8080 -d --name=cadvisor --restart=always google/cadvisor:latest
- 访问应用 : http://11.22.217.211:8080/metrics
- 查看容器启动日志 : docker logs 4c350f0c83a0
- 删除容器 : docker container rm 4c350f0c83a0
// 补充一 : inotify_add_watch /sys/fs/cgroup/cpuacct,cpu: no such file or directory
sudo mount -o remount,rw '/sys/fs/cgroup'
sudo ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu
- Docker 安装 Prometheus
java
// ? 如果是内部网络,可以先查询到 Docker 私网
`docker inspect -f ``'{{.Name}} - {{.NetworkSettings.IPAddress }}'` `$(docker ps -aq)`
// S1 : 先创建 Prometheus 启动需要的配置文件
mkdir /opt/prometheus
cd /opt/prometheus/
vim prometheus.yml
// S2 : 配置上面的配置文件 prometheus
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['localhost:9100']
labels:
instance: localhost
- job_name: cadvisor
static_configs:
- targets: ['localhost:8080']
labels:
instance: cAdvisor
// 启动 prometheus
docker run -d --name prometheus --restart=always -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
- 查看应用 :http://13.13.1.31:9090/graph
- 查看应用 :http://13.13.1.31:9090/targets
文件内容解析 :
- global.scrape_interval : 全局抓取间隔,每15秒获取一次数据
- global.evaluation_interval : 全局评估间隔,每15秒评估警报规则
- scrape_configs.job_name : 作业名,这里用于监控Prometheus本身
- scrape_configs.static_configs.targets : 目标,指定要监控的目标地址和端口
- rule_files : 规则报警文件
成功启动:
3.2 Prometheus 安装 - 二进制
@ 二进制部署 Prometheus - 买定灬离手 - 博客园 (cnblogs.com)
很详细,就不重复操作了,不过相对而言,自己玩一玩 Docker 就够了。
3.3 配置 grafana
java
// S1 : 创建前配置
- 创建存储文件夹 : mkdir /opt/grafana-storage
- 为文件添加权限 : chmod 777 -R /opt/grafana-storage
// S2 : 启动 grafana
docker run -d --name grafana --restart=always -p 3000:3000 --name=grafana -v /opt/grafana-storage:/var/lib/grafana grafana/grafana
// S3 : 访问 grafana
http://192.168.1.31:3000/
启动完成后,就需要配置关联了:
- S1 : 在 Connect 中添加新的连接 Source
- S2 : Source 选择 Prometheus ,配置连接信息 ,注意加 HTTP/HTTPS
- S3 : 在 Dashboards 中直接通过模板 ID 配置
模板ID 是什么 ?
- Dashboards 的界面并不是原生自带的,其中很多参数和图表都需要配置
- 为了让这些配置简化已经可以互相分享自己的模板, grafana 定义了模板 ID 的盖帘
- 我们可以通过 grafana.com/grafana/das... 查询自己喜欢的模板,然后直接通过ID进行配置
第一阶段大功告成:
四. 其他辅助功能及配置
Alertmanager
- 功能 :管理警报。可以对警报进行静音、分组和路由,以便更好地处理警报通知。
java
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093'] # Alertmanager的地址和端口
修改存储介质
Prometheus 支持本地存储 ,远程存储等多种方式,如果使用 Docker 的场景,存储最好配置成远程的
java
--web.enable-remote-write-receiver /api/v1/write
这里我也没实现过,所以具体的就不展示了
总结
这一篇完成后,整个秒杀系列就能正式开始了,后续在压力展示的时候可以直接给大家看可视化的性能界面了。
以上只是Prometheus 的基础用法,后面还会有一些高级用法可能会单章进行处理
参考
基于docker部署Prometheus_ok: run: prometheus: (pid 3044) 693s, want down, g_北城 半夏的博客-CSDN博客