graphite

定时向Graphite中写入指标项数据,指标项模拟个数3000个

使用的类库

官方文档  

dropwizard的github地址

Metric官方文档

metrics.dropwizard的GitHub地址

<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>${dropwizard.metrics.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-graphite</artifactId>
<version>${dropwizard.metrics.version}</version>
</dependency>

核心代码详解

配置Graphite地址

指定Graphite的host和port,默认时,Graphite中的carbon使用2003端口接收数据;

Graphite graphite = new Graphite(new InetSocketAddress("10.144.202.150", 2003));

模拟3000个指标项

每个指标项都有一个uuid,3000个uuid代表3000个不同的指标项

final List<String> uuids = Lists.newArrayList();

{
for (int i = 1000; i < 4000; i++) {
String uuid = "aaa" + i + "";
uuids.add(uuid);
}
}

定义Gauge指标

dropwizard.metrics支持5种指标类型,分别为:

  1. Gauge
  2. Counter
  3. Meter
  4. Histograms
  5. Timers

我们这里定义Gauge指标,需要实现Gauge接口;

使用metricValue(uuid)方法模拟每个指标项的当前值

/**
* Gauge指标
*/
class GaugeImp implements Gauge<Float> {
String uuid; public GaugeImp(String uuid) {
this.uuid = uuid;
} @Override
public Float getValue() {
return metricValue(uuid);
}
} /**
* 用于模拟指标值
*
* @param uuid
* @return
*/
private float metricValue(String uuid) {
Random random = new Random();
float value = random.nextFloat();
return value;
}

向Graphite中写入指标项

  1. 注册一个MetricRegistry:所有的指标项metrics都存在在MetricRegistry中;
  2. 注册所有需要写入的指标项:这里写入3000个Gauge指标;
  3. 使用GraphiteReporter实现向Graphite写入数据:A reporter which publishes metric values to a Graphite server.
  4. 开始定时任务,每隔5s中向Graphite中写入一次数据;
MetricRegistry registry = new MetricRegistry();
// 注册 gauge 指标
for (String uuid : uuids) {
String name = "resource." + uuid + ".size";
registry.register(name, new GaugeImp(uuid));
} //A reporter which publishes metric values to a Graphite server.
GraphiteReporter reporter = GraphiteReporter.forRegistry(registry)
.prefixedWith("openmetric")
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.filter(MetricFilter.ALL)
.build(graphite);
// 设置每隔5秒钟,向Graphite中发送一次指标值
reporter.start(5, TimeUnit.SECONDS);

写入结果截图





完整程序

完整程序

Metrics 是个什么鬼 之入门教程

【Graphite】使用dropwizard.metrics向Graphite中写入指标项数据的更多相关文章

  1. MO拆分计划行程序中写入PRODUCTIONORDERS表数据出现重复导致报错(BUG)20180502

    错误提示:ORA-00001: 违反唯一约束条件 (ABPPMGR.C0248833319_6192)ORA-06512: 在 "STG.FP_MO_SPLIT", line 19 ...

  2. 我们知道写入过程比ZooKeeper集合中的读取过程要贵,因为所有节点都需要在数据库中写入相同的数据。因此,对于平衡的环境拥有较少数量(例如3,5,7)的节点比拥有大量的节点要好。

    我们知道写入过程比ZooKeeper集合中的读取过程要贵,因为所有节点都需要在数据库中写入相同的数据.因此,对于平衡的环境拥有较少数量(例如3,5,7)的节点比拥有大量的节点要好. 组件 描述 写入( ...

  3. Python 使用 xlwings 往 excel中写入一列数据的两种方法

    1.准备一个二维列表,然后再range后面不指定任何选项,可以输出该二维列表中数据在一列中显示,如下代码: # -*- coding:utf-8 -*- import xlwings as xw li ...

  4. 通过java代码往mysql数据库中写入日期相关数据少13个小时

    通过show variables like '%time_zone%'; 查看时区: CST 时区 名为 CST 的时区是一个很混乱的时区,有四种含义: 美国中部时间 Central Standard ...

  5. VS中添加新项 数据选项卡下没有ADO.NET实体数据模型解决方案

    第一种:C:\ProgramData下面搜索EFTools找到你vs对应版本的EFTools.msi 先remove 然后再Install 重启电脑再看 第二种:如果意外地删除了 Visual Stu ...

  6. List<Map>中根据map的同一指标项数据——去重代码

    先看网络上,博客经常出现的错误代码: for(ABatchAddCheckVO aBatchAddCheckVO : addList){ dto.put("aac001",aBat ...

  7. WinForms_ListView中获取选中项数据值

    string value = listList.SelectedItems[0].SubItems[1].Text;//获取首行listview的值 string va = listList.Sele ...

  8. 服务监控 | 彻底搞懂Dropwizard Metrics一篇就够了

    Metrics是一个提供服务性能检测工具的Java类库,它提供了功能强大的性能指标工具库用于度量生产环境中的各关键组件性能. 度量类型 Metrics提供了以下几种基本的度量类型: Gauge:用于提 ...

  9. 通过I2C总线向EEPROM中写入数据,记录开机次数

    没买板子之前,用protues画过电路图,实现了通过i2c总线向EEPROM中写入和读出数据. 今天,在自己买的板子上面写关于i2c总线的程序,有个地方忘了延时,调程序的时候很蛋疼.下面说说我对I2c ...

随机推荐

  1. Oracle中nvl()、instr()、及执行多条sql事务操作

    Oracle的Nvl函数 nvl( ) 函数 从两个表达式返回一个非null 值. 语法 NVL(eExpression1, eExpression2) 参数 eExpression1, eExpre ...

  2. next_permutation函数和per_permiutation函数

    next_permutation用于求有序数组里面的下一个排序,形式为next_permutation(数组名,数组名+n)

  3. 实验吧—Web——WP之 上传绕过

    我们先上传一个png文件,发现他说必须上传后缀名为PHP的文件才可以,那么,我们尝试一下,PHP文件 但是他又说不被允许的文件类型 在上传绕过里最有名的的就是00截断,那么我们就先要抓包 在这里我们需 ...

  4. 《DSP using MATLAB》Problem 5.36

    第1小题 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  5. map遍历的几种方式和效率问题

    一.map遍历的效率 先创建一个map,添加好数据: Map<String, String> map = new HashMap<>();for (int i = 0; i & ...

  6. using python to compute production rules

    #coding=utf8 import loggingimport itertoolsimport reimport sys logger = logging.getLogger()root_form ...

  7. MySQL 5.7--多源复制(非GTID模式)

    ==================================================== 在MYSQL5.7版本中引入多源复制,一个从库允许复制多个主库的数据,每个主库被配置为一个单独 ...

  8. drone 0.8.8 集成gogs 进行ci/cd 处理

    drone 是一个不错的基于容器的ci/cd 工具,运行简单,同时插件也挺多,基本常见的轻量级的任务都是可以搞定的 环境准备 使用docker in docker docker-compose 文件 ...

  9. GBDT(Gradient Boosting Decision Tree) 没有实现仅仅有原理

                阿弥陀佛.好久没写文章,实在是受不了了.特来填坑,近期实习了(ting)解(shuo)到(le)非常多工业界经常使用的算法.诸如GBDT,CRF,topic model的一些算 ...

  10. 使用 FreeCAD 打开 KiCad 用于制作外壳

    使用 FreeCAD 打开 KiCad 用于制作外壳 先看导入后的结果. 步骤: 安装 FreeCAD 安装 KiCad StepUp Mod Addon 重启 FreeCAD(非常重要,不重启不生效 ...