当前位置: 首页 > 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;数据结构。 该类模板表现为底层容器的包装…...

深入解析Spring Boot启动流程:从SpringApplication.run()到应用就绪

1. 项目概述&#xff1a;为什么我们需要深入理解SpringApplication.run()如果你是一个Java开发者&#xff0c;尤其是使用Spring Boot框架的&#xff0c;那么SpringApplication.run(YourApplication.class, args)这行代码对你来说一定不陌生。它几乎是每个Spring Boot应用的启动…...

基于RAG的Obsidian智能知识库:本地部署与优化实战

1. 项目概述&#xff1a;当知识管理遇上大语言模型 如果你和我一样&#xff0c;是 Obsidian 的深度用户&#xff0c;同时又对大语言模型&#xff08;LLM&#xff09;的智能涌现能力感到着迷&#xff0c;那么你肯定也想过一个问题&#xff1a;能不能让我的知识库“活”起来&…...

仅1月Accepted!恭喜北大学者独作发表Nature子刊(IF 10.1)!

源自风暴统计网&#xff1a;一键统计分析与绘图的AI网站 引言 非协作者且是独作&#xff0c;用GBD 2023发表顶刊Nature是什么概念&#xff1f;来看今天这篇由北大学者发表的硬核文章&#xff01;GBD 2023发文依然很顶&#xff0c;郑老师团队的专属科研训练营帮你实现从0到1的…...

EmotionBook开源项目:构建可计算的情绪数据模型与可视化分析系统

1. 项目概述&#xff1a;一个为情绪寻找容器的数字实验最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“EmotionBook”。光看名字&#xff0c;你可能会联想到一本情绪日记&#xff0c;或者一个记录心情的App。但点进去之后&#xff0c;你会发现它远不止于此。这其实是一个…...

如何高效使用空洞骑士Scarab模组管理器:专业级配置实战教程

如何高效使用空洞骑士Scarab模组管理器&#xff1a;专业级配置实战教程 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab Scarab是一款专为《空洞骑士》玩家设计的专业级模组管…...

TSSP77038红外解调器:从原理到实战,打造高可靠接近传感与光束中断系统

1. 项目概述&#xff1a;从“遥控”到“感知”的红外新思路在嵌入式开发和电子制作领域&#xff0c;红外&#xff08;IR&#xff09;技术几乎是每个玩家都会接触到的老朋友。我们最熟悉的莫过于家里的电视、空调遥控器&#xff0c;它们通过发射一串调制在38KHz载波上的红外脉冲…...

Perplexity最新v2.4文档重大更新预警:3个已删除接口、2个强制迁移路径、1个即将下线的Auth Flow——错过今晚将无法兼容生产环境

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity最新v2.4文档重大更新预警总览 Perplexity v2.4 文档体系迎来结构性升级&#xff0c;核心聚焦于开发者体验一致性、API 响应语义增强及本地化支持扩展。本次更新不再仅限于补丁式修订&#x…...

AI Agent Harness Engineering 的安全攻防:你的智能体如何被欺骗、劫持与利用

AI Agent Harness Engineering 安全攻防深度解析:你的智能体如何被欺骗、劫持与利用 关键词 AI Agent安全、Harness工程、Prompt注入、工具劫持、智能体攻防、LLM安全、权限逃逸 摘要 随着AI Agent从概念验证走向大规模产业落地,作为智能体控制平面的Harness层已成为攻防…...

自行车轮POV显示:基于视觉暂留与微控制器的DIY空中光绘

1. 项目概述&#xff1a;在车轮上“画”出光之画卷几年前&#xff0c;我第一次在夜间的公园里看到一辆飞驰而过的自行车&#xff0c;它的轮辐间竟然清晰地显示着一行发光的文字和图案&#xff0c;那种瞬间的震撼感至今难忘。那不是魔法&#xff0c;而是视觉暂留原理与微控制器精…...

FigmaCN中文插件:5分钟让Figma界面变中文的终极解决方案

FigmaCN中文插件&#xff1a;5分钟让Figma界面变中文的终极解决方案 【免费下载链接】figmaCN 中文 Figma 插件&#xff0c;设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗&#xff1f;每次寻找工具都要在脑海…...