文库网站开发建设,seochinaz查询,南通电商网站建设,响应式企业展示型网站Prometheus和Grafana都是非常流行的开源监控工具#xff0c;可以协同使用来实现对各种应用程序、系统、网络和服务器等的监视和分析。
下面对Prometheus和Grafana进行简要介绍#xff1a;
Prometheus
Prometheus是一款开源、云原生的系统和服务监控工具#xff0c;它采用p…Prometheus和Grafana都是非常流行的开源监控工具可以协同使用来实现对各种应用程序、系统、网络和服务器等的监视和分析。
下面对Prometheus和Grafana进行简要介绍
Prometheus
Prometheus是一款开源、云原生的系统和服务监控工具它采用pull模式的监控方式可以通过HTTP协议从各种Target中抓取metrics数据并存储到本地的时间序列数据库中。Prometheus提供了强大的查询语言PromQL来支持数据查询、聚合和图表绘制等操作。同时它还提供了Alertmanager组件来支持告警和通知功能可以通过配置规则实现各种复杂的告警条件和触发方式。
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 MapString, 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.EntryString, 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个不同的账户并使用MapString, 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: prometheusstatic_configs:- targets: [localhost:9090]- job_name: java_appmetrics_path: /my_metricsstatic_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{jobjava_app}[$__rate_interval])))
复制代码 到目前为止一个业务数据的监控就完成啦。大家可以照猫画虎走一个流程