监控搭建-Prometheus
监控搭建-Prometheus
- 1、背景
- 2、目标
- 3、选型
- 4、Prometheus
- 4.1、介绍
- 4.2、架构
- 4.3、构件
- 4.4、运行机制
- 4.5、环境介绍
- 4.6、数据准备
- 4.7、网络策略
- 4.7.1、主机端口放行
- 4.7.2、设备端口放行
- 4.8、部署
- 4.9、验证
- 4.10、配置
1、背景
随着项目信息化进程的推进,操作系统、中间件、数据库的运维随着系统规模的扩大而指数级别提升,信息数据的监控在这个阶段显得尤为重要。俗话说:无监控、不运维,监控系统地位不言而喻。
2、目标
搭建一套监控系统对云服务器、数据库、中间件进行性能指标的有效话监控。
3、选型

本着选新不选旧的原则,Prometheus
4、Prometheus
4.1、介绍
Prometheus 是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。Promethus有以下特点:
- 支持多维数据模型:由度量名和键值对组成的时间序列数据
- 内置时间序列数据库TSDB
- 支持PromQL查询语言,可以完成非常复杂的查询和分析,对图表展示和告警非常有意义
- 支持HTTP的Pull方式采集时间序列数据
- 支持PushGateway采集瞬时任务的数据
- 支持服务发现和静态配置两种方式发现目标
- 支持接入Grafana
4.2、架构

4.3、构件
prometheus server 是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储以及查询。
exporter 简单说是采集端,通过 http 服务的形式保留一个 url 地址,prometheus server 通过 访问该 exporter 提供的 endpoint 端点,即可获取到需要采集的监控数据 。
AlertManager 在 prometheus 中,支持基于 PromQL 创建告警规则,如果满足定义的规则,则会产生一条 告警信息,进入 AlertManager 进行处理。可以集成邮件,微信或者通过 webhook 自定义报 警。
Pushgateway 由于 Prometheus 数据采集采用 pull 方式进行设置的, 内置必须保证 prometheus server 和 对应的 exporter 必须通信,当网络情况无法直接满足时,可以使用 pushgateway 来进行中转, 可以通过 pushgateway 将内部网络数据主动 push 到 gateway 里面去,而 prometheus 采用 pull 方式拉取 pushgateway 中数据。
4.4、运行机制
prometheus 负责从 pushgateway 和 job 中采集数据, 存储到后端 Storatge 中,可以通过 PromQL 进行查询, 推送 alerts 信息到 AlertManager。 AlertManager 根据不同的路由规则 进行报警通知。
4.5、环境介绍
| 序号 | 项目 | 版本 | 备注 |
|---|---|---|---|
| 1 | Architecture | x86_64 | 服务器架构 |
| 2 | CentOS | 7.9.2009 | 操作系统 |
| 3 | Prometheus | 2.47.0 | 监控平台 |
| 4 | Grafana | 10.1.2 | 图形化界面 |
| 5 | Node_exporter | 1.6.1 | Linux系统采集模块 |
| 6 | AlertManager | 0.26.0 | 告警模块 |
| 7 | consul_exporter | 0.9.0 | 自动服务发现模块 |
4.6、数据准备
数据准备为需要部署的程序的安排包,其中服务器架构和操作系统,未提供安装包情况,下载包获取路径主要为Promethues官网和Grafana官网下载获取。如果使用服务器直接下载太慢,可以使用磁力或其他下载工具下载后上传至服务器。
- 监控平台:Prometheus 下载
- 图形化界面工具:Ganfana 下载
- Linux系统采集模块: node_exporter 下载
- 告警模块: alertmanager 下载
- 自动服务发现: consul_exporter 下载
- 自动服务:consul 下载
- grafana 主机模板下载
部署之前将以上软件包下载至需要部署的服务器上。
4.7、网络策略
网络策略主要为需要为服务放行的端口策略,分为服务器端口放行和安全设备端口放行
| 服务 | 端口 | 备注 |
|---|---|---|
| Prometheus | 9090 | 监控平台 |
| node_exporter | 9100 | 主机数据采集 |
| Grafana | 3000 | Grafana图形界面 |
4.7.1、主机端口放行
防火墙设置
# 查看防火墙状态
systemctl status firewalld
# 启动防火墙
systemctl start firewalld
# 关闭防火墙
systemctl stop firewalld
# 重启防火墙
systemctl restart firewalld
# 设置开机启动
systemctl enable firewalld
# 设置开机不启动
systemctl disable firewalld
端口放行
firewall-cmd --zone=public --add-port=9090/tcp --permanent
# 说明
# -zone # 作用域
# -add-port=9090/tcp # 添加端口,格式为:端口/通讯协议
# -permanent 永久生效,没有此参数重启后失效# 生效配置
firewall-cmd --reload# 查看放行生效的端口
firewall-cmd --list-ports
放行端口关闭(此处不需要,了解即可)
firewall-cmd --zone=public --remove-port=9090/tcp --permanent
4.7.2、设备端口放行
云主机安全产品一般在安全组内放行,实体服务器一版在防火墙或者路由器设备进行放行。
4.8、部署
进入程序所在目录并解压软件包
cd /home
tar xf prometheus-2.47.0.linux-amd64.tar.gz
部署
mv prometheus-2.47.0.linux-amd64 /usr/local/prometheus-2.47.0
创建符号链接
ln -s /usr/local/prometheus-2.47.0 /usr/local/prometheus
创建prometheus存储目录
mkdir /usr/local/prometheus/data
创建服务文件
vi /usr/lib/systemd/system/prometheus.service
[Unit]
Description=https://prometheus.io[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus \
--storage.tsdb.path=/usr/local/prometheus/data \
--config.file=/usr/local/prometheus/prometheus.yml[Install]
WantedBy=multi-user.target
启动prometheus服务
systemctl start prometheus
查看prometheus服务
# systemctl status prometheus
● prometheus.service - https://prometheus.ioLoaded: loaded (/usr/lib/systemd/system/prometheus.service; disabled; vendor preset: disabled)Active: active (running) since Sat 2023-09-23 14:37:38 CST; 3h 35min agoMain PID: 4243 (prometheus)CGroup: /system.slice/prometheus.service└─4243 /usr/local/prometheus/prometheus --storage.tsdb.path=/usr/local/prometheus/data --config....Sep 23 14:37:38 devops prometheus[4243]: ts=2023-09-23T06:37:38.549Z caller=head.go:760 level=info comp...nt=0
Sep 23 14:37:38 devops prometheus[4243]: ts=2023-09-23T06:37:38.549Z caller=head.go:797 level=info comp…8827ms
Sep 23 14:37:38 devops prometheus[4243]: ts=2023-09-23T06:37:38.551Z caller=main.go:1045 level=info fs_...AGIC
Sep 23 14:37:38 devops prometheus[4243]: ts=2023-09-23T06:37:38.551Z caller=main.go:1048 level=info msg...ted"
Sep 23 14:37:38 devops prometheus[4243]: ts=2023-09-23T06:37:38.551Z caller=main.go:1229 level=info msg....yml
Sep 23 14:37:43 devops prometheus[4243]: ts=2023-09-23T06:37:43.603Z caller=main.go:1266 level=info msg="Co…µs
Sep 23 14:37:43 devops prometheus[4243]: ts=2023-09-23T06:37:43.603Z caller=main.go:1009 level=info msg...ts."
Sep 23 14:37:43 devops prometheus[4243]: ts=2023-09-23T06:37:43.603Z caller=manager.go:1009 level=info ......"
Sep 23 17:38:09 devops prometheus[4243]: ts=2023-09-23T09:38:09.607Z caller=compact.go:523 level=info c...68ms
Sep 23 17:38:09 devops prometheus[4243]: ts=2023-09-23T09:38:09.611Z caller=head.go:1298 level=info com...09ms
Hint: Some lines were ellipsized, use -l to show in full.
查看服务端口
服务文件方式查看
cat /usr/local/prometheus/prometheus.yml
# my global config
global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# Alertmanager configuration
alerting:alertmanagers:- static_configs:- targets:# - alertmanager:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:# - "first_rules.yml"# - "second_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name: "prometheus"# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ["localhost:9090"]
其中targets: [“localhost:9090”]处为设置的prometheus服务使用的端口
进程占用端口查看
# netstat -nltp|grep prometheus
tcp6 0 0 :::9090 :::* LISTEN 4243/prometheus
查看端口占用为9090
4.9、验证
浏览器中输入配置服务器的IP地址和9090
http://ip:9090

点击菜单Status—Targets 查看prometheus部署的目标服务的信息
4.10、配置
配置文件介绍
vi /usr/local/promethues/prometheus.yml
# my global config
global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# Alertmanager configuration
alerting:alertmanagers:- static_configs:- targets:# - alertmanager:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:# - "first_rules.yml"# - "second_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name: "prometheus"# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ["localhost:9090"]
配置文件查看
启动配置会加载配置文件,启动之前使用如下命令查看配置文件的正确性
cd /usr/local/prometheus
./promtool check config prometheus.yml
Checking prometheus.ymlSUCCESS: prometheus.yml is valid prometheus config file syntax
以上为prometheus平台的搭建,后续会针对主机、数据库和中间件的监控进行进一步的设置和使用。
相关文章:
监控搭建-Prometheus
监控搭建-Prometheus 1、背景2、目标3、选型4、Prometheus4.1、介绍4.2、架构4.3、构件4.4、运行机制4.5、环境介绍4.6、数据准备4.7、网络策略4.7.1、主机端口放行4.7.2、设备端口放行 4.8、部署4.9、验证4.10、配置 1、背景 随着项目信息化进程的推进,操作系统、…...
指纹浏览器开发指南-EasyBR
想开发一款指纹浏览器,指纹浏览器名字叫做EasyBR,大致构思了下开发的步骤。 EasyBR指纹浏览器开发指南: 后台技术、前端技术和指纹修改 简介: EasyBR指纹浏览器是一款旨在提供个性化服务和广告定位的浏览器,通过收…...
qml入门
window import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.5Window { //root控件,父窗口是主界面width: 640height: 480visible: true//相对于父控件的偏移量x: 100y:100minimumWidth: 400 //最小宽度minimumHeight: 300 //最小高度ma…...
一文熟练使用python修改Excel中的数据
使用python修改Excel中的内容 1.初级修改 1.1 openpyxl库的功能: openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,例如Xlwings。openpyxl是一个比较综合的工具,能…...
java Spring Boot在配置文件中关闭热部署
之前更大家一起搭建了一个热部署的开发环境 但是 大家要清楚一个情况 我们线上程序运行突然内部发生变化这是不可能的。 所以 他就只会对我们开发环境有效 是否开启 我们可以通过 application配置文件来完成 我这里是yml格式的 参考代码如下 spring:devtools:restart:enabled…...
【物联网】Arduino+ESP8266物联网开发(一):开发环境搭建 安装Arduino和驱动
ESP8266物联网开发 1.开发环境安装 开发软件下载地址: 链接: https://pan.baidu.com/s/1BaOY7kWTvh4Obobj64OHyA?pwd3qv8 提取码: 3qv8 1.1 安装驱动 将ESP8266连接到电脑上,安装ESP8266驱动CP210x 安装成功后,打开设备管理器,…...
自定义UI对象转流程节点
自定义UI对象转流程节点 实体自定义对象转bpmn activitiy学习 (动态加签,动态流程图,指定节点跳转,指定多人节点跳转) 前端页面仿的这个 提供一个思路 实体 ActivitiValueVo import io.swagger.annotations.ApiModel; import io.swagger.a…...
P1-P5_动手学深度学习-pytorch(李沐版,粗浅的笔记)
目录 预告 1.学习深度学习的关键是动手 2.什么是《动手学深度学习》 3.曾经推出的版本(含github链接) 一、课程安排 1.目标 2.内容 3.上课形式 4.你将学到什么 5.资源 二、深度学习的介绍 1.AI地图 2.深度学习在一些应用上…...
Android Studio修改模拟器AVD Manger目录
Android Studio修改虚拟机AVD Manger目录 1、在AS的设备管理器Device Manager中删除原来创建的所有虚拟机(Android Virtual Device); 2、新建一个自定义的AVD目录,例如:D:\Android\AndroidAVD 3、在高级系统设置中增加…...
STM32--MQ2烟雾传感器
本文主要介绍STM32F103C8T6和烟雾传感器模块的控制算法 简介 烟雾模块选用MQ-2气体传感器,根据传感器的电导率随空气中可燃气体浓度的增加而增大的特性检测空气中可燃气体,然后将电导率的变化转换成对应的电信号 MQ系列烟雾传感分类如下: 该…...
GitHub要求开启2FA,否则不让用了。
背景 其实大概在一个多月前,在 GitHub 网页端以及邮箱里都被提示:要求开启 2FA ,即双因子认证;但是当时由于拖延症和侥幸心理作祟,直接忽略了相关信息,毕竟“又不是不能用”。。 只到今天发现 GitHub 直接…...
Python 编程基础 | 第三章-数据类型 | 3.6、元组
一、元组 Python 的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。 1、创建元组 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可,例如: tup1 (physics, ch…...
2023/10/7 -- ARM
【程序状态寄存器读写指令】 1.指令码以及格式 mrs:读取CPSR寄存器的值 mrs 目标寄存器 CPSR:读取CPSR的数值保存到目标寄存器中msr:修改CPSR寄存器的数值msr CPSR,第一操作数:将第一操作数的数值保存到CPSR寄存器中//修改CPSR寄存器,也就表示程序的状…...
yolov5加关键点回归
文章目录 一、数据1)数据准备2)标注文件说明 二、基于yolov5-face 修改自己的yolov5加关键点回归1、dataloader,py2、augmentations.py3、loss.py4、yolo.py 一、数据 1)数据准备 1、手动创建文件夹: yolov5-face-master/data/widerface/tr…...
untitle
实用的科研图形美化处理教程分享 显微照片排版标记 除了统计图表之外,显微照片也是文章中必不可少的实验结果呈现方式。除了常规实验的各种组织切片照片,在空间转录组文章中显微照片更是常见。显微照片的呈现方式也是有讲究的,比如对照片…...
《论文阅读》监督对抗性对比学习在对话中的情绪识别 ACL2023
《论文阅读》监督对抗性对比学习在对话中的情绪识别 前言摘要相关知识最坏样本干扰监督对比学习生成式对抗网络纳什均衡琴森香农散度范式球模型架构监督对抗性对比学习模型结构图实验结果问题前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文…...
2023-10-07 LeetCode每日一题(股票价格跨度)
2023-10-07每日一题 一、题目编号 901. 股票价格跨度二、题目链接 点击跳转到题目位置 三、题目描述 设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(…...
聊聊分布式架构04——RPC通信原理
目录 RPC通信的基本原理 RPC结构 手撸简陋版RPC 知识点梳理 1.Socket套接字通信机制 2.通信过程的序列化与反序列化 3.动态代理 4.反射 思维流程梳理 码起来 服务端时序图 服务端—Api与Provider模块 客户端时序图 RPC通信的基本原理 RPC(Remote Proc…...
维吉尼亚密码
维吉尼亚密码属于多表代换密码 其中A<–>0,B<–>1,…,Z<–>25,则每个密钥K相当于一个长度为m的字母串,称为密钥字。维吉尼亚密码一次加密m个明文字母。 示例:设m6,密钥字为…...
ubuntu20.04挂载拓展盘保姆级流程
背景:跑模型玩时,发现机子硬盘太小了,搞个1t固态作为挂载盘。以下为操作全流程记录 1、开始root权限操作 sudo su若进不去,考虑是否给root设置过密码,新系统第一次进入需要设置密码。 进入成功: rooty:…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
