当前位置: 首页 > news >正文

面试官:如何搭建Prometheus和Grafana对业务指标进行监控?

Prometheus和Grafana都是非常流行的开源监控工具,可以协同使用来实现对各种应用程序、系统、网络和服务器等的监视和分析。

下面对Prometheus和Grafana进行简要介绍:

  1. Prometheus

Prometheus是一款开源、云原生的系统和服务监控工具,它采用pull模式的监控方式,可以通过HTTP协议从各种Target中抓取metrics数据,并存储到本地的时间序列数据库中。Prometheus提供了强大的查询语言(PromQL)来支持数据查询、聚合和图表绘制等操作。同时,它还提供了Alertmanager组件来支持告警和通知功能,可以通过配置规则实现各种复杂的告警条件和触发方式。

  1. Grafana

Grafana是一款开源的监控可视化和数据分析软件,它支持将来自多个数据源的时间序列数据转换为丰富的图表和仪表板,以实时监控和分析各种指标和性能指标。Grafana 的用户可以轻松创建和编辑仪表板、将不同数据源的指标数据组合到一起显示、应用多种过滤器和渲染选项来定制化仪表板的显示方式以及定义警报功能等,从而实现根据需要快速了解应用程序的状态和性能指标以及进行数据分析。

通过将Prometheus和Grafana结合使用,您可以有效地监控和管理各种应用程序和系统的状态和性能指标,从而更好地掌握系统的运行状况并快速发现故障。

本人使用mac电脑安装Prometheus和Grafana,下载可自行根据自己的环境进行,思路才是最重要的。

安装Prometheus:

// 安装
brew install prometheus// 启动
brew services start prometheus
复制代码

默认端口为9090:

重点:

有了Prometheus后,我们要思考一个问题就是,数据从哪里来?

要了解数据是程序push过来的,还是Prometheus去拉取的,很关键。

package com.example.demo.monitor;/*** @author caozhixin* @date 2023/4/8 13:10*/
import io.prometheus.client.Counter;
import io.prometheus.client.Gauge;
import io.prometheus.client.exporter.HTTPServer;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;public class BankAccountSystem {// 存储每个银行账户的当前余额private static final Map<String, Double> accountBalances = new HashMap<>();// 创建一个Counter指标来表示已经从每个账户取款的次数private static final Counter withdrawals = Counter.build().name("bank_account_withdrawals_total").help("Total number of account withdrawals.").labelNames("account_number") // 为了方便查询,使用名为"account_number"的标签分别标识每个账户的指标.register();// 创建一个Gauge指标来表示每个账户的当前余额private static final Gauge accountBalance = Gauge.build().name("bank_account_balance").help("Current balance for each account.").labelNames("account_number") // 同样使用名为"account_number"的标签来标识每个账户的指标.register();public static void main(String[] args) throws IOException {// Start the HTTP server and expose metrics endpoint.// 启动一个HTTP服务器,并暴露/metrics端点以便Prometheus从中获取指标数据HTTPServer server = new HTTPServer(8080);Random random = new Random();// 初始化10个不同的银行账户,并对每个账户进行一次初始余额的设置for (int i = 1; i <= 10; i++) {String accountNumber = "ACCT" + i;double initialBalance = random.nextDouble() * 100000;accountBalances.put(accountNumber, initialBalance);// 使用set方法将每个账户的初始余额设置为Gauge指标的值,同时使用"labelValues"参数传递与之对应的"account_number"标签值accountBalance.labels(accountNumber).set(initialBalance);}// 模拟一些账户活动while (true) {try {Thread.sleep(5000); // 等待5秒钟} catch (InterruptedException e) {e.printStackTrace();}// 对于每个银行账户,随机从中扣除一些资金,并更新相应的指标数据for (Map.Entry<String, Double> entry : accountBalances.entrySet()) {String accountNumber = entry.getKey();double currentBalance = entry.getValue();double withdrawAmount = random.nextDouble() * 100;if (withdrawAmount > currentBalance) {withdrawAmount = currentBalance; // 不能透支,如果取款金额超过了当前余额,那么就只能全部取出}currentBalance -= withdrawAmount;accountBalances.put(accountNumber, currentBalance);withdrawals.labels(accountNumber).inc(); // 增加该账户的Counter指标值(表示已经从这个账户中取过款)accountBalance.labels(accountNumber).set(currentBalance); // 更新该账户的Gauge指标值(表示当前余额)}}}
}
复制代码

在此示例中,我们模拟了一个银行账户管理系统,有10个不同的账户,并使用Map<String, Double>来存储每个账户的当前余额。我们还创建了两个指标:一个Counter bank_account_withdrawals_total表示已经从每个账户取款的次数,带有一个名为account_number的标签;一个Gauge bank_account_balance 表示每个账户的当前余额,也带有一个account_number标签。

在无限循环中,我们模拟了一些账户活动,随机从每个账户中扣除一些资金,并更新相应的指标数据。这样,我们就可以通过Prometheus监视银行账户活动并生成警报。

我们可以从Java程序启动的8080看到对应的Prometheus格式数据:

下一步就是我们怎样让Prometheus进程把这些数据抓取过去,这一步很简单,就是在prometheus.yml配置的(安装后的文件路径自己找)。

global:scrape_interval: 15sscrape_configs:- job_name: "prometheus"static_configs:- targets: ["localhost:9090"]- job_name: 'java_app'metrics_path: '/my_metrics'static_configs:- targets: ['localhost:8080']复制代码

把这个java程序的Prometheus客户端端口配置上去即可。

这时候我们就可以到Prometheus的面板去看下是否有数据。

到目前为止,我们已经完成了Prometheus把Java产生的业务数据导入啦。

接下来就是处理Grafana获取Prometheus数据。

// 安装
brew install grafana// 启动
brew services start grafana
复制代码

Grafana默认端口为3000

这个时候,我们的思路就是怎样去获取Prometheus数据。

Grafana在页面上提供了配置数据源的交互。

支持的数据源很多,按需配置。

这里我们直接把url配置上即可,生产环境的话,需要考虑的更多,比如安全性之类的,配置密钥证书。

数据源配置完了,就剩下面板啦。

选择你想处理的指标和统计口径

也可以直接使用PromQL语句:

round(sum by(account_number) (increase(bank_account_balance{job="java_app"}[$__rate_interval])))
复制代码

到目前为止,一个业务数据的监控就完成啦。大家可以照猫画虎走一个流程!!

相关文章:

面试官:如何搭建Prometheus和Grafana对业务指标进行监控?

Prometheus和Grafana都是非常流行的开源监控工具&#xff0c;可以协同使用来实现对各种应用程序、系统、网络和服务器等的监视和分析。 下面对Prometheus和Grafana进行简要介绍&#xff1a; Prometheus Prometheus是一款开源、云原生的系统和服务监控工具&#xff0c;它采用p…...

SQL Server 创建登录账号、创建用户名并为数据库赋予db_owner权限

服务器级的固定角色及其权限 sysadminsysadmin 固定服务器角色成员可以在服务器执行任何操作serveradminserveradmin 固定服务器角色的成员可以更该服务器范围的配置选项和关闭服务器sercurityadmin sercurityadmin 固定服务器角色的成员管理登录名及其属性,他们可以grant、de…...

离散数学_第二章:基本结构:集合、函数、序列、求和和矩阵(1)

集合与函数2.1 集合 2.1.1 集合的基本概念 2.1.2 集合的表示方法 2.1.3 文氏图 2.1.4 证明集合相等 2.1.5 集合的大小 ——基 2.1.6 幂集 2.1.7 集族、指标集 2.1.8 笛卡尔积 2.1.9 容斥原理2.1 集合 2.1.1 集合的基本概念 定义1&#xff1a;集合 是不同对象的一个无序的聚…...

ChatGPT想干掉开发人员,做梦去吧

很多人都发现ChatGPT可以做一些代码相关的工作&#xff0c;不仅可以写一些基础的类似python、java、js的代码段&#xff0c;还可以做一定量的调优&#xff0c;于是就开始担忧起来&#xff0c;到哪天我的开发工作会不会被ChatGPT这个工具给取代了&#xff1f; 目录 1. ChatGPT…...

尚硅谷大数据技术Hadoop教程-笔记04【Hadoop-MapReduce】

视频地址&#xff1a;尚硅谷大数据Hadoop教程&#xff08;Hadoop 3.x安装搭建到集群调优&#xff09; 尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】尚硅谷大数据技术Hadoop教程-笔记02【Hadoop-入门】尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】尚硅谷大数据技术Ha…...

Linux信号sigaction / signal

Linux信号sigaction / signal 文章目录Linux信号sigaction / signal目的函数原型struct sigaction信号枚举值ISO C99 signals.Historical signals specified by POSIX.New(er) POSIX signals (1003.1-2008, 1003.1-2013).Nonstandard signals found in all modern POSIX system…...

坦克大战第一阶段代码

package tanke.game;import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Vector;//为了监听键盘事件&#xff0c;实现keylistener public class mypanel extends JPanel implements KeyListener …...

博客系统前端实现

目录 1.预期效果 2.实现博客列表页 3.实现博客正文页 4.实现博客登录页 5.实现博客编辑页面 1.预期效果 对前端html,css,js有大致的了解后,现在我们实现了一个博客系统的前端页面.一共分为四个页面没分别是:登陆页面,博客列表页,博客正文页,博客编辑页 我们看下四个界面…...

ChatGPT技术原理、研究框架,应用实践及发展趋势(附166份报告)

​ 一、AI框架重要性日益突显&#xff0c;框架技术发展进入繁荣期&#xff0c;国内AI框架技术加速发展&#xff1a; 1、AI框架作为衔接数据和模型的重要桥梁&#xff0c;发展进入繁荣期&#xff0c;国内外框架功能及性能加速迭代&#xff1b; 2、Pytorch、Tensorflow占据AI框…...

【屏幕自适应页面适配问题】CSS的@media,为了适应1440×900的屏幕,使用@media解决问题

文章目录bug修改实例CSS3 media 查询CSS 多媒体查询&#xff0c;适配各种设备尺寸bug修改实例 <template><div id"deptAllDown" style"height: 400px;width:880px"/> </template>为了适应1440900的屏幕&#xff0c;使用media解决问题 …...

一篇文章理解堆栈溢出

一篇文章理解堆栈溢出引言栈溢出ret2text答案ret2shellcode答案ret2syscall答案栈迁移答案堆溢出 unlink - UAF堆结构小提示向前合并/向后合并堆溢出题答案引言 让新手快速理解堆栈溢出&#xff0c;尽可能写的简单一些。 栈溢出 代码执行到进入函数之前都会记录返回地址到SP…...

优化模型验证关键代码27:多旅行商问题的变体-多起点单目的地问题和多汉密尔顿路径问题

目录 1 多起点单目的地问题(Multiple departures single destination mTSP) 1.1 符号列表 1.2 数学模型 1.4 解的可视化结果...

快速搭建第一个SpringCloud程序

目录 1、Spring Boot项目脚手架快速搭建 1.1 生成工程基本配置 1.2 生成工程。 1.3 导入开发工具&#xff08;此处为Idea&#xff09; 1.4 运行代码 1.5 验证是否能访问 2、Spring Cloud环境搭建 2.1 版本匹配问题 2.2 Spring Cloud环境测试 3、引入Eureka Server 3…...

【离散数学】图论

1、有n个点没有边 零图 2、有1个点没有边 平凡图 3、含有平行边的图 多重图 4、简单图 不含有平行边和自回环的图 5、任意两个结点之间都有边 完全图 6、环贡献 两度 7、所有顶点的度数之和等于边数的两倍 8、在有向图中所有顶点的出度之和 或者 入度之和 等于边数 9、度数为…...

代码随想录算法训练营第三十七天-贪心算法6| 738.单调递增的数字 968.监控二叉树 总结

738.单调递增的数字 贪心算法 题目要求小于等于N的最大单调递增的整数&#xff0c;那么拿一个两位的数字来举例。 例如&#xff1a;98&#xff0c;一旦出现strNum[i - 1] > strNum[i]的情况&#xff08;非单调递增&#xff09;&#xff0c;首先想让strNum[i - 1]--&#…...

【Linux】线程中的互斥锁、条件变量、信号量(数据安全问题、生产消费模型、阻塞队列和环形队列的实现)

文章目录1、线程互斥1.1 线程间频繁切换导致的问题1.2 使用互斥锁1.3 互斥锁的原理1.4 线程中的数据安全问题2、线程同步之条件变量2.1 生产消费模型2.2 条件变量概念和调用函数2.3 阻塞队列的实现3、线程同步之信号量3.1 理解信号量3.2 信号量接口3.3 环形队列的实现4、小结1、…...

MySQL8.0的安装和配置

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…...

LinuxGUI自动化测试框架搭建(三)-虚拟机安装(Hyper-V或者VMWare)

&#xff08;三&#xff09;-虚拟机安装&#xff08;Hyper-V或者VMWare&#xff09;1 Hyper-V安装1.1 方法一&#xff1a;直接启用1.2 方法二&#xff1a;下载安装1.3 打开Hyper-V2 VMWare安装注意&#xff1a;Hyper-V或者VMWare只安装一个&#xff0c;只安装一个&#xff0c;只…...

改进YOLO系列:数据增强扩充(有增强图像和标注),包含copypaste、翻转、cutout等八种增强方式

这里写目录标题 一、简介二、数据增强方法介绍复制-粘贴(Copy-paste)翻转(Flip)Cutout加噪声(Noise)亮度调整(Brightness)平移(Shift)旋转(Rotation)裁剪(Crop)copy-paste的代码一、简介 数据增强是一种通过对原始数据进行随机变换、扰动等操作来生成新的训练样…...

c++11 标准模板(STL)(std::stack)(一)

定义于头文件 <stack> template< class T, class Container std::deque<T> > class stack;std::stack 类是容器适配器&#xff0c;它给予程序员栈的功能——特别是 FILO &#xff08;先进后出&#xff09;数据结构。 该类模板表现为底层容器的包装…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...