从零开始搭建Prometheus+grafana服务器组件监控系统
服务器及相关组件监控
本文档主要记录了常用企业级服务器及各种组件的监控手段和监控部署方案,使企业可以实时感知服务器组件的健康状态,并在服务器或组件出现异常时及时做出反应。
本方案采用的Prometheus+grafana的方式实现对服务器及各种组件的监控,以下内容将会带你从零开始,一步步搭建整个监控方案。监控对象包括:服务器监控(cpu、内存、磁盘等指标)、mysql监控、redis监控、kafka监控、clickhouse监控、docker容器等常用组件的监控。
为便于维护,本方案几乎所有用到的组件均采用docker进行部署,需要服务器上安装部署好了docker环境,包括
docker
和docker-compose
。
基础环境安装部署
基础环境总共包含
Prometheus
、alertmanager
和grafana
三个组件,其中,Prometheus
组件主要用于采集各监控对象的各项指标,并将其入库(Prometheus
本身就是一个数据库),alertmanager
作为Prometheus
组件的一个补充模块,负责接收来自Prometheus
组件的阈值告警信息,并将其状态推送到指定的告警组件,包括但不限于邮件
、webhook告警
等,而grafana
作为一个展示界面,可以非常灵活的展示各个指标的相关参数数据,包括但不限于各种趋势图、饼图等。
下面我将给大家展示这3个组件搭建部署方法,以及使用方法。
Prometheus安装部署
Prometheus
官方有对应的docker镜像,通过docker镜像进行部署,不仅部署起来方便,还会使系统整体上更加整洁,便于后期的维护。直接拉去对应的镜像,并将其封装打包用docker-compose
进行维护即可。具体操作如下:
-
官网获取最新Prometheus相关版本,访问Prometheus官网,点击跳转到docker界面获取下载链接
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
进入界面,得到当前最新版本镜像,如下图:
-
服务器直接拉去该镜像即可
docker pull prom/prometheus:v2.47.2
- 创建Prometheus应用目录和相关配置文件
在安装目录下创建
prometheus
目录,并且在目录中创建启动文件docker-compose.yml
和配置文件prometheus.yml
,另外创建prometheus_data
目录用于外挂到启动容器,以便Prometheus数据本地落盘.
mkdir prometheuscd prometheustouch docker-compose.yml prometheus.ymlmkdir -m 777 prometheus_data
docker-compose.yml
文件内容如下:
version: '2.4'
services:prometheus:image: prom/prometheus:v2.47.2container_name: prometheushostname: prometheusrestart: alwaysvolumes:- ./prometheus.yml:/etc/prometheus/prometheus.yml- ./prometheus_data:/prometheusports:- "9090:9090"cpus: 4
prometheus.yml
文件内容如下:
global:scrape_interval: 1mevaluation_interval: 1m
alerting:alertmanagers:- static_configs:- targets:#- 255.255.255.255:9093rule_files:- "rules/*.yml"scrape_configs:
#监控Prometheus自身- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']
- 启动应用并验证
docker-compose up -d
浏览器访问服务器9090
端口若页面可以正常加载,表明安装成功
- 停止应用并封装
docker-compose down
docker save prom/prometheus:v2.47.2 | gzip > prometheus.image.tgz
封装完成后,直接将整个Prometheus目录拷贝到生产环境启动即可。
启动命令如下:
shell docker load -i prometheus.image.tgz docker-compose up -d
alertmanager安装部署
同样的方法,从docker界面点击可以看到alertmanager最新的版本镜像
直接拉取最新镜像即可实现
docker pull prom/alertmanager:v0.26.0
创建alertmanager.yml
文件,内容设置告警模式为webhook
并指定告警url,内容如下:
global:resolve_timeout: 5mroute:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_interval: 1hreceiver: 'webhook'
receivers:- name: 'webhook'webhook_configs:- url: 'http://<告警url>'inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']
修改docker-compose.yml
文件,添加alertmanager
应用启动信息,具体如下:
version: '2.4'
services:prometheus:image: prom/prometheus:v2.47.2container_name: prometheushostname: prometheusrestart: alwaysvolumes:- ./prometheus.yml:/etc/prometheus/prometheus.yml- ./prometheus_data:/prometheusports:- "9090:9090"cpus: 4alertmanager:image: prom/alertmanager:v0.26.0container_name: prom_alertmanagerhostname: alertmanagerrestart: alwaysdepends_on:- prometheusports:- "9093:9093"volumes:- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml- ./alertmanager:/alertmanager
启动应用
docker-compose down && docker-compose up -d
浏览器访问alertmanager
应用首页
grafana安装部署
grafana组件作为可视化工具,提供了丰富的可视化界面,同时还有丰富的开源社区,可以下载到很多优质的可视化panel,极大的方便了系统运维人员。
为方便后期运维,grafana的安装方法同样采用docker进行安装,具体步骤如下:
- 获取最新镜像并拉取,访问docker官方仓库,搜索grafana,复制最新镜像并从服务器上拉取
拉取镜像 ```shell docker pull grafana/grafana:10.2.0 ``` 
- 创建应用目录并配置应用启动文件
mkdir grafana
cd grafana
mkdir data
touch docker-compose.yml
docker-compose.yml
文件内容如下:
version: '3'
services:app:image: "grafana/grafana:10.2.0"user: "root"network_mode: "host"restart: alwaysvolumes:- ./data:/var/lib/grafana
- 启动应用并访问首页
docker-compose up -d
grafana默认账号密码:
admin/admin
,登录后可以选择跳过不修改密码。
- 将Prometheus数据源导入grafana
- 导入相关监控模板
至此,服务器组件监控的基础环境搭建完成。
服务器监控
服务器监控需要安装部署node-exporter
组件,可以直接本地部署,也可以通过容器进行部署,推荐使用容器进行部署。
-
从官网上下载
node-exporter
应用的镜像包,直接通过docker-compose
进行启动。
-
创建应用并配置
docker-compose.yml
启动文件
-
拉取镜像并启动应用
拉取镜像
docker-compose pull
拉取镜像前,需要quay.io
添加到docker服务器的配置文件的insecure-registries
参数中,否则会拉取失败
启动应用
docker-compose up -d
- 配置Prometheus采集策略,修改
prometheus.yml
文件,将对应node的api端口添加到配置文件中并重启应用
通过docker inspect <容器id>
可以查看容器监听端口
prometheus.yml
配置文件中添加配置:
#监控虚拟机主机状态- job_name: 'node'static_configs:- targets: ['<服务器ip>:9100']
- 重启Prometheus
docker-compose down && docker-compose up -d
- Prometheus查看采集数据
至此,表明数据已经在正常采集
- 将对应告警策略rules添加到Prometheus,使得当服务器出现故障时,Prometheus自动触发相关告警
添加prometheus_rules
目录用于存放所有rules文件
mkdir prometheus_rules
添加prometheus_rules/nodes.yml
文件,文件内容如下:
groups:- name: 服务器自监控rules:- alert: 服务器状态expr: up{job='node'} == 0for: 60slabels:severity: errorannotations:summary: '【服务器故障】导致无法正常访问时,服务器可能已经出现宕机,需要立即处理!!!'description: '当前节点:{{ $labels.instance }} ' - alert: 服务器CPU使用率expr: round((1 - avg(rate(node_cpu_seconds_total{mode='idle'}[2m])) by (instance))*100, 0.01) > 85for: 300slabels:severity: errorannotations:summary: '【服务器】CPU使用率大于85%,需要立即关注!!!' description: '当前节点:{{ $labels.instance }},当前值{{ $value }}% '- alert: 服务器内存使用率expr: round(((node_memory_MemTotal_bytes{job="node"} - node_memory_MemAvailable_bytes{job="node"} )/node_memory_MemTotal_bytes{job="node"})*100, 0.01) > 85for: 300slabels:severity: errorannotations:summary: '【服务器】内存使用率大于85%,需要立即关注!!!' description: '当前节点:{{ $labels.instance }},当前值{{ $value }}% '- alert: 服务器磁盘使用率expr: round(((node_filesystem_size_bytes{mountpoint="/opt"} - node_filesystem_free_bytes{mountpoint="/opt"}) / node_filesystem_size_bytes{mountpoint="/opt"}) * 100, 0.01) > 85for: 60s labels:severity: errorannotations:summary: '【服务器】数据盘使用率大于85%,需要立即关注!!!' description: '当前节点:{{ $labels.instance }},数据盘挂载: {{ $labels.mountpoint }};当前值{{ $value }}% '- alert: 服务器进程数expr: node_procs_running > 800for: 60s labels:severity: errorannotations:summary: '【服务器】当前进程数大于800,需要立即关注!!!' description: '当前节点:{{ $labels.instance }};当前值{{ $value }} '- alert: 服务器文件句柄数expr: round(node_filefd_allocated / node_filefd_maximum * 100, 0.01) > 10for: 60s labels:severity: errorannotations:summary: '【服务器】句柄数使用率超过10%,请及时关注!!!' description: '当前节点:{{ $labels.instance }};当前值{{ $value }}% '
修改docker-compose.yml
启动文件,将prometheus_rules
挂载到容器中
- 重启Prometheus
docker-compose down && docker-compose up -d
-
Prometheus页面查看rules规则
可以看到部分异常指标已经被监控并且告警出来,通过webhook应用(一般定制实现,本应用有flask实现,非官方组件,由个人开发,仅供测试使用)后台的log发现告警信息已经推送至对应的webhook应用。
-
登录grafana官网,下载node对应监控dashboard文件并配置相关数据源
搜索dashboard
下载导入dashboard
至此,服务器组件监控到此结束,更多玩法可以自行到官方查阅文档
其他组件监控
其他组件的监控可以与服务器监控类型
可以到prometheus
官网下载并配置对应exporter
组件,将其配置到Prometheus的采集列表中(修改prometheus.yml
文件),配置Prometheus告警阈值rules(添加prometheus_rules文件)后方可实现对相关组件的监控。
相关文章:

从零开始搭建Prometheus+grafana服务器组件监控系统
服务器及相关组件监控 本文档主要记录了常用企业级服务器及各种组件的监控手段和监控部署方案,使企业可以实时感知服务器组件的健康状态,并在服务器或组件出现异常时及时做出反应。 本方案采用的Prometheusgrafana的方式实现对服务器及各种组件的监控&am…...

智能水厂运行与调控3D模拟仿真在线展示提高整个系统的协同效应
水厂在生活中的重要性不可忽视。它们提供清洁、安全的水源,满足人们饮用、洗浴、烹饪等基本需求,保障公共卫生,预防疾病传播;同时,水厂也促进经济发展,为工业生产和农业灌溉提供保障,吸引和支持企业的投资和…...

ts声明文件
1 背景 对于为第三方模块/库写声明文件之前,我们需要知道第三方模块/库,是否需要声明文件,或者是否已有声明文件。 若第三方模块/库,是ts编写且无声明文件, 可以使用--declaration配置选项来生成;可以在命…...
JPA联合主键使用
在实际工作中,我们会经常遇到联合主键的情况,所以我用简单例子列举JPA两种实现联合主键的方式。 1、如何通过IdClass 实现联合主键 第一步:新建一个UserInfoID类,里面是联合主键 Data Builder NoArgsConstructor AllArgsConstructor publi…...

【计算机毕设经典案例】基于微信小程序的图书管理系统
前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 👉IT源码社-SpringBoot优质案例推荐👈 👉IT源码社-小程序优质案例…...
如何制作rpm离线安装包
如何制作rpm离线安装包 在内网环境中使用rpm安装zabbix-agent-6.4.6时,发现rpm无法下载依赖 1.准备一个可以连接外网的纯净centos7环境 防止本地已有的依赖不会被重复下载 docker pull centos:7docker stop mycentos7 docker rm mycentos72.启动centos7并挂载一…...
golang中快速用melody搭建轻量的websocket服务
在Go中,可以使用gin和melody库来搭建一个轻量级的WebSocket服务。gin是一个流行的Web框架,而melody是一个用于处理WebSocket的库。以下是一个简单的示例代码,演示了如何使用gin和melody搭建WebSocket服务: package mainimport (&…...

Profinet转EtherNET/IP从站连接欧姆龙plc与西门子200smart通讯的配置方法
本案例是200smart plc与欧姆龙plc进行通讯的方法,远创智控YC-PNM-EIP网关可以读写全系列西门子 PLC 数据。一般不需要 PLC 里做特殊的设置。只需要把 PLC 的变量地址配置到网关中,网关就可以读取指定地址的数据或者写数据到指定的地址。 PLC 通过网线连接…...

elementUI el-table实现鼠标悬浮某一行,在鼠标右侧展示提示信息
背景 el-table组件中,可以通过勾选某条数据来创建单据,但是有些数据没有权限使用,就需要禁用掉勾选的功能,然后当鼠标悬浮在这一行的时候,展示类似于toolTip的提示框。 除了当鼠标悬浮在某一行,展示类似于…...

Java 使用 poi 和 aspose 实现 word 模板数据写入并转换 pdf 增加水印
本项目所有源码和依赖资源都在文章顶部链接,有需要可以下载使用 1. 需求描述 从指定位置读取一个 word 模板获取业务数据并写入该 word 模板,生成新的 word 文档将新生成的 word 文档转换为 pdf 格式对 pdf 文档添加水印 2. 效果预览 word 模板 带水印的…...

Spring Boot进阶(93):体验式教程:手把手教你整合Spring Boot和Zipkin
📣前言 分布式系统开发中,服务治理是一个比较重要的问题。为了更好地实现服务治理,需要解决服务跟踪问题,即如何对分布式系统中的服务进行监控和追踪。本文将介绍如何使用Zipkin进行服务跟踪,并结合Spring Boot进行整合…...

Lvs +keepalivede : 高可用集群
keepalived为Ivs应运而生的高可用服务。Ivs的调度器无法做高可用,于是keepalived这个软件。 实现的是调度器的高可用。 但是: keepalived不是专为Ivs集群服务的,也可以做其他代理服务器的高可用。 lvs的高可用集群:主调度器和备调度器&…...

得物 Redis 设计与实践yu
一、前言 自建 Redis 系统是得物 DBA 团队自研高性能分布式 KV 缓存系统,目前管理的 ECS 内存总容量超过数十TB,数百多个 Redis 缓存集群实例,数万多个 Redis 数据节点,其中内存规格超过 1T 的大容量集群多个。 自建 Redis 系统采…...

优咔科技创新连接方案助力高质量5G车联服务
上海优咔网络科技有限公司 CEO 闫楠 【摘要】本文就智能网联汽车对高质量5G车联服务的需求背景和行业趋势进行了分析,主要介绍采用5G双SIM卡的创新连接方案,重点讲述双SIM卡联网的端到端体系架构和技术方案,并就优咔科技全方位支撑行业领先车…...

(a /b)*c的值
系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…...
Hive 常用DML操作
本专栏案例数据集链接: https://download.csdn.net/download/shangjg03/88478038 1.加载文件数据到表 1.1 语法 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE</...

centos部署tomcat
Java Downloads | Oracle 上面是下载网址 Tomcat是由Apache开发的一个Servlet容器,实现了对Servlet和JSP的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台,安全域管理和Tomcat阀 简单来说:Tomcat…...
【Spark】配置参数关系-重要
并行度数量 并行度指所有Executor可以同时执行的Task数, 每个Executor中的一个Core(线程,虚拟核数)同时只能执行一个Task, 所以 最大并行度 Executor数量 * 每个Executor的Core数; eg:资源配…...
[Qt之“MMM dd yyyyhh:mm:ss“]时间格式
这是时间格式字符串,用于表示日期和时间的显示格式。具体解释如下: “MMM”:表示月份的缩写,例如Jan、Feb、Mar等。“dd”:表示日期的两位数,例如01、02、03等。“yyyy”:表示年份的四位数&…...

SSM宾馆客房管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目
一、源码特点 SSM 宾馆客房管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代 码和数据库,系统…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究
摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...

GraphRAG优化新思路-开源的ROGRAG框架
目前的如微软开源的GraphRAG的工作流程都较为复杂,难以孤立地评估各个组件的贡献,传统的检索方法在处理复杂推理任务时可能不够有效,特别是在需要理解实体间关系或多跳知识的情况下。先说结论,看完后感觉这个框架性能上不会比Grap…...
验证redis数据结构
一、功能验证 1.验证redis的数据结构(如字符串、列表、哈希、集合、有序集合等)是否按照预期工作。 2、常见的数据结构验证方法: ①字符串(string) 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...