动动手指,Prometheus 部署流程收入囊中

👈👈👈 欢迎点赞收藏关注哟

首先分享之前的所有文章 >>>> 😜😜😜
文章合集 : 🎁 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的地址和端口

修改存储介质

@ Storage | Prometheus

Prometheus 支持本地存储 ,远程存储等多种方式,如果使用 Docker 的场景,存储最好配置成远程的

java 复制代码
--web.enable-remote-write-receiver /api/v1/write

这里我也没实现过,所以具体的就不展示了

总结

这一篇完成后,整个秒杀系列就能正式开始了,后续在压力展示的时候可以直接给大家看可视化的性能界面了。

以上只是Prometheus 的基础用法,后面还会有一些高级用法可能会单章进行处理

参考

基于docker部署Prometheus_ok: run: prometheus: (pid 3044) 693s, want down, g_北城 半夏的博客-CSDN博客

prometheus.io/

相关推荐
(:满天星:)1 小时前
第31篇:块设备与字符设备管理深度解析(基于OpenEuler 24.03)
linux·运维·服务器·网络·centos
小陶来咯1 小时前
【仿muduo库实现并发服务器】Acceptor模块
运维·服务器
cui_hao_nan1 小时前
Docker后端部署
运维·docker·容器
ZZH1120KQ1 小时前
Linux系统安全及应用
linux·运维·系统安全
六毛的毛2 小时前
Springboot开发常见注解一览
java·spring boot·后端
AntBlack2 小时前
拖了五个月 ,不当韭菜体验版算是正式发布了
前端·后端·python
31535669132 小时前
一个简单的脚本,让pdf开启夜间模式
前端·后端
小扎仙森2 小时前
关于服务器宝塔转移wordperss子比主题问题
运维·服务器
小小小糖果人2 小时前
Linux云计算基础篇(5)
linux·运维·服务器
我不是哆啦A梦2 小时前
破解风电运维“百模大战”困局,机械版ChatGPT诞生?
运维·人工智能·python·算法·chatgpt