likes
comments
collection
share

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

作者站长头像
站长
· 阅读数 10

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

一. 前言

秒杀系列已经准备开始聊应用了,但是前置模块还有监控体系未完善。

一个系统的监控我通常认为有3个层次

  • API 监控 : 主要用于监控接口耗时和接口错误率等信息
  • 硬件监控 : 包括 CPU ,内存等基础资源的监控
  • 应用监控 : 主要对JVM ,连接池,容器信息进行监控

这一篇目标是基于 Prometheus 和 K8S 搭建一套监控系统,当然资金充裕可以跳过,直接使用云服务商完善的体系即可,好用又扎实。

后续的秒杀必须使用到监控,不监控不知道性能情况,这一篇就来学习下,怎么部署系统监控。

二. 宏观

2.1 宏观概念

Prometheus 能做什么 ?

  • S1 : 定期收集来自各种数据源的度量标准数据 ,包括应用系统性能,资源占用等
  • S2 : 按照时间序列将数据存储到数据库中
  • S3 : 通过特定的查询语句(PromQL)实时查询数据数据

  • 支持可视化的展示,生成看板,和 Grafana 结合使用
  • 支持自定义报警功能,基于报警规则生成报警
  • 支持动态发现目标,自动进行监控
  • 支持监控多个数据源,同时监控多个系统

功能一览

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

流程是什么 ?

  • 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 安装辅助组件
// 拉取相关镜像
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
// ? 如果是内部网络,可以先查询到 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 : 规则报警文件

成功启动:

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

3.2 Prometheus 安装 - 二进制

@ 二进制部署 Prometheus - 买定灬离手 - 博客园 (cnblogs.com)

很详细,就不重复操作了,不过相对而言,自己玩一玩 Docker 就够了。

3.3 配置 grafana

// 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/

启动完成后,就需要配置关联了:

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

  • S1 : 在 Connect 中添加新的连接 Source
  • S2 : Source 选择 Prometheus ,配置连接信息 ,注意加 HTTP/HTTPS
  • S3 : 在 Dashboards 中直接通过模板 ID 配置

模板ID 是什么 ?

  • Dashboards 的界面并不是原生自带的,其中很多参数和图表都需要配置
  • 为了让这些配置简化已经可以互相分享自己的模板, grafana 定义了模板 ID 的盖帘
  • 我们可以通过 grafana.com/grafana/das… 查询自己喜欢的模板,然后直接通过ID进行配置

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

第一阶段大功告成:

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

四. 其他辅助功能及配置

Alertmanager

  • 功能 :管理警报。可以对警报进行静音、分组和路由,以便更好地处理警报通知。

alerting: 
    alertmanagers: 
    - static_configs: 
        - targets: ['alertmanager:9093'] # Alertmanager的地址和端口

修改存储介质

@ Storage | Prometheus

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

--web.enable-remote-write-receiver /api/v1/write

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

总结

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

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

参考

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

prometheus.io/

转载自:https://juejin.cn/post/7293412552485437478
评论
请登录