Storm Metric

article/2025/10/7 23:34:44
storm从0.9.0开始,增加了指标统计框架,用来收集应用程序的特定指标,并将其输出到外部系统。
本文中采用的监听类是LoggingMetricsConsumer,统计指标值将输出到metric.log日志文件中。
当然也可以自定义监听类,只需要实现 IMetricsConsumer接口即可,这些类可以在代码里注册(registerMetricsConsumer),也可以在 storm.yaml配置文件中注册:
topology.metrics.consumer.register:
- class: "backtype.storm.metrics.LoggingMetricsConsumer"
parallelism.hint: 1
- class: "org.mycompany.MyMetricsConsumer"
parallelism.hint: 1
argument:
- endpoint: "metrics-collector.mycompany.org"

下面简单修改storm-starter包中的例子,统计三个指标:
1、每5秒统计execute方法的调用次数
2、每1分钟统计每个单词的出现次数
3、每1分钟统计所有出现的单词的平均长度
public class ExclamationTopology {
public static class ExclamationBolt extends BaseRichBolt {
OutputCollector _collector;
//定义指标统计对象
transient CountMetric _countMetric;
transient MultiCountMetric _wordCountMetric;
transient ReducedMetric _wordLengthMeanMetric;
@Override
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
_collector = collector;
initMetrics(context);
}
@Override
public void execute(Tuple tuple) {
_collector.emit(tuple, new Values(tuple.getString(0) + "!!!"));
_collector.ack(tuple);
updateMetrics(tuple.getString(0));
}

@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("word"));
}
//初始化计数器
void initMetrics(TopologyContext context)
{
_countMetric = new CountMetric();
_wordCountMetric = new MultiCountMetric();
_wordLengthMeanMetric = new ReducedMetric(new MeanReducer());
context.registerMetric("execute_count", _countMetric, 5);
context.registerMetric("word_count", _wordCountMetric, 60);
context.registerMetric("word_length", _wordLengthMeanMetric, 60);
}

//更新计数器
void updateMetrics(String word)
{
_countMetric.incr();
_wordCountMetric.scope(word).incr();
_wordLengthMeanMetric.update(word.length());
}
}
public static void main(String[] args) throws Exception {
TopologyBuilder builder = new TopologyBuilder();
builder.setSpout("word", new TestWordSpout(), 10);
builder.setBolt("exclaim1", new ExclamationBolt(), 3).shuffleGrouping("word");
builder.setBolt("exclaim2", new ExclamationBolt(), 2).shuffleGrouping("exclaim1");
Config conf = new Config();
conf.setDebug(true);
//输出统计指标值到日志文件中
conf.registerMetricsConsumer(LoggingMetricsConsumer.class, 2);
if (args != null && args.length > 0) {
conf.setNumWorkers(3);
StormSubmitter.submitTopology(args[0], conf, builder.createTopology());
}
else {
LocalCluster cluster = new LocalCluster();
cluster.submitTopology("test", conf, builder.createTopology());
Utils.sleep(10000);
cluster.killTopology("test");
cluster.shutdown();
}
}
}
统计结果的获取与清空(源码):
***********************************************************
CountMetric
***********************************************************
public Object getValueAndReset() {
long ret = _value;
_value = 0;
return ret;
}

***********************************************************
MultiCountMetric
***********************************************************
public Object getValueAndReset() {
Map ret = new HashMap();
for(Map.Entry<String, CountMetric> e : _value.entrySet()) {
ret.put(e.getKey(), e.getValue().getValueAndReset());
}
return ret;
}

***********************************************************
ReducedMetric
***********************************************************
public Object getValueAndReset() {
Object ret = _reducer.extractResult(_accumulator);
_accumulator = _reducer.init();
return ret;
}

Storm UI界面:


metric日志内容节选——

某一台机器上的日志:
2014-04-01 00:57:38,855 64645 1396339058 ubuntu:6703 8:exclaim1 execute_count 776
2014-04-01 00:58:03,855 89645 1396339083 ubuntu:6703 8:exclaim1 execute_count 66
2014-04-01 01:01:38,878 304668 1396339298 ubuntu:6703 8:exclaim1 word_count {bertels=172, jackson=152, nathan=155, mike=155, golda=155}
2014-04-01 01:01:38,878 304668 1396339298 ubuntu:6703 8:exclaim1 word_length 5.821292775665399
2014-04-01 01:03:38,878 424668 1396339418 ubuntu:6703 8:exclaim1 word_count {bertels=161, jackson=156, nathan=151, mike=158, golda=163}
2014-04-01 01:03:38,878 424668 1396339418 ubuntu:6703 8:exclaim1 word_length 5.79467680608365
2014-04-01 01:03:48,937 434727 1396339428 ubuntu:6703 8:exclaim1 execute_count 65
2014-04-01 01:03:58,935 444725 1396339438 ubuntu:6703 8:exclaim1 execute_count 65
2014-04-01 01:05:38,879 544669 1396339538 ubuntu:6703 8:exclaim1 word_count {bertels=165, jackson=167, nathan=144, mike=146, golda=165}
2014-04-01 01:05:38,879 544669 1396339538 ubuntu:6703 8:exclaim1 word_length 5.841168996188056
另一台机器上的日志:
2014-04-01 00:57:00,934 12756 1396339020 ubuntu:6703 7:exclaim1 execute_count 95
2014-04-01 00:57:00,958 12780 1396339020 ubuntu:6702 9:exclaim2 execute_count 95
2014-04-01 00:57:00,959 12781 1396339020 ubuntu:6703 10:exclaim2 execute_count 94
2014-04-01 00:57:05,927 17749 1396339025 ubuntu:6702 6:exclaim1 execute_count 97
2014-04-01 00:57:10,948 22770 1396339030 ubuntu:6702 9:exclaim2 execute_count 99
2014-04-01 00:57:15,931 27753 1396339035 ubuntu:6703 7:exclaim1 execute_count 100
2014-04-01 00:58:55,949 127771 1396339135 ubuntu:6702 9:exclaim2 word_length 8.829391891891891
2014-04-01 00:58:55,963 127785 1396339135 ubuntu:6703 10:exclaim2 word_count {bertels!!!=250, golda!!!=216, jackson!!!=237, nathan!!!=231, mike!!!=250}
2014-04-01 00:58:55,963 127785 1396339135 ubuntu:6703 10:exclaim2 word_length 8.806587837837839
2014-04-01 00:59:55,918 187740 1396339195 ubuntu:6702 6:exclaim1 word_count {bertels=256, jackson=248, nathan=234, mike=224, golda=219}
2014-04-01 00:59:55,995 187817 1396339195 ubuntu:6703 10:exclaim2 execute_count 98
2014-04-01 01:00:00,994 192816 1396339200 ubuntu:6702 9:exclaim2 execute_count 98
2014-04-01 01:00:05,966 197788 1396339205 ubuntu:6703 7:exclaim1 execute_count 99
2014-04-01 01:00:55,949 247771 1396339255 ubuntu:6702 9:exclaim2 word_count {bertels!!!=248, golda!!!=233, jackson!!!=220, nathan!!!=241, mike!!!=240}
2014-04-01 01:00:55,965 247787 1396339255 ubuntu:6703 10:exclaim2 word_count {bertels!!!=258, golda!!!=240, jackson!!!=214, nathan!!!=258, mike!!!=215}
2014-04-01 01:00:55,965 247787 1396339255 ubuntu:6703 10:exclaim2 word_length 8.832911392405064

http://chatgpt.dhexx.cn/article/CPqWZZLn.shtml

相关文章

Beats:如何启动 Metricbeat 中的 MySQL 模块 - query Metricset

在我做之前的教程 “Observability&#xff1a;Elastic Metrics 应用介绍”&#xff0c;我发现当我尝试启动 MySQL 模块中的 query metricset 会出现错误。之后我发现官方文档也缺少相应的资料。在今天的文章中&#xff0c;我将介绍如上启动这个 metricset。在使用这个 metrics…

Metricbeat源码分析

0X00 版本信息 Golang&#xff1a;1.16.8 Metricbeat&#xff1a;7.14 0X01 Metricbeat介绍 Metricbeat quick start: installation and configuration | Metricbeat Reference [7.14] | Elastichttps://www.elastic.co/guide/en/beats/metricbeat/7.14/metricbeat-install…

Elk-Metricbeat配置Tomcat的日志分析 (Metricbeat-part3)

1, 安装软件 Metricbeat安装 请参考之前的文档链接&#xff1a; Metricbeat 8.4.0 linux 安装(Metricbeat-part1)_yangkei的博客-CSDN博客Metricbeat 能够以一种轻量型的方式&#xff0c;输送各种系统和服务统计数据&#xff0c;从 CPU 到内存&#xff0c;从 Redis 到 Nginx…

Metricbeat config file metricbeat.yml must be owned by the user identifier (uid=0) or root

Linux 上修改呢metricbeat.yml的权限&#xff0c;启动的时候报错。查了下解决方案 记录下 https://www.elastic.co/guide/en/beats/libbeat/5.3/config-file-permissions.html#config-file-permissions 简而言之就是所有者必须是root&#xff0c;然后权限必须是0644 sudo c…

Elk-Metricbeat配置Nginx的日志分析 (Metricbeat-part2)

1 情况说明&#xff1a; Metricbeat的基本安装部分可以参考&#xff1a; Metricbeat 8.4.0 linux 安装(Metricbeat-part1)_yangkei的博客-CSDN博客 下面来聊聊如何通过elkmetricbeat来监控Nginx日志。 借用网上以为大师的图就是这样子 Metricbeat 采集 Nginx 指标_叶康铭的…

metricbeat收集elasticsearch、kibana监控数据

一、kibana 1、下载metricbeat并部署到kibana所在的服务器 2、禁用 Kibana 监控指标的默认集合&#xff0c;在kibana.yml文件中增加如下配置&#xff1a; monitoring.kibana.collection.enabled: false3、从控制台或命令行&#xff0c;在生产集群上设置xpack.monitoring.col…

ELK日志采集平台(四)---轻量级采集工具metricbeat

目录 一、安装metricbeat 二、与kibana数据可视化联用 logstash是负责采集数据的&#xff0c;是入口&#xff0c;流向为logstash-> ES->kibana&#xff0c;但是它的资源消耗很大&#xff0c;有时候没那么多内存给他占用&#xff0c;同时有些定制的采集指标logstash无法…

Metricbeat安装下载,nginx模块使用

目录 MetricbeatMetricbeat组成下载启动Metricbeat Modulesystem module配置内容 Nginx Module开启Nginx Module 配置nginx module测试 Metricbeat 定期收集操作系统或应用服务的指标数据存储到Elasticsearch中&#xff0c;进行实时分析 Metricbeat组成 Metricbeat有2部分组成…

metricbeat对接kafka

在监控系统中经常用到kafka来处理数据&#xff0c;上层平台会从kafka直接取数据进行分析&#xff0c;今天分享下metricbeat监控的数据如何输出到kafka中&#xff0c;并对各配置项进行详细说明。 metricbeat环境搭建点这里 kafka环境搭建点这里 -在metricbeat配置文件中配置o…

Beats:通过 Metricbeat 实现外部对 Elastic Stack 的监控

自 Elastic 7.5 发布开始&#xff0c;通过外部监控 Elastic Stack 已经全面实施。 可以通过 Metricbeat 模块监视 Elasticsearch&#xff0c;Kibana&#xff0c;Logstash&#xff0c;APM 服务器和 Beats。 使用外部收集&#xff0c;用户现在可以收集和发送其 Elastic Stack 的…

Metricbeat 的使用

目标 统计并展示系统的信息 cpu&#xff0c; 内存等 (当然metricbeat能收集的信息种类还很多) 前提 版本&#xff1a; 5.x已经安装了ELK (elasticsearch, logstash (可选&#xff09;, kibana)安装了x-pack &#xff08;配置了对应的security&#xff09;&#xff08;可选&a…

Metricbeat 8.4.0 linux 安装(Metricbeat-part1)

Metricbeat是一款轻量型指标采集器&#xff0c;用于从系统和服务收集指标。Metricbeat 能够以一种轻量型的方式&#xff0c;输送各种系统和服务统计数据&#xff0c;从 CPU 到内存&#xff0c;从 Redis 到 Nginx&#xff0c;不一而足。将 Metricbeat 部署到您的所有 Linux、Win…

Metricbeat部署指南

官网下载metricbeat&#xff0c;https://www.elastic.co/downloads/beats/metricbeat。 解压tar包&#xff0c;tar -zxvf metricbeat-7.0.0-linux-x86_64.tar.gz。 进入目录&#xff0c;cd metricbeat-7.0.0-linux-x86_64。 编辑metricbeat配置文件metricbeat.yml&#xff1…

metricbeat的基本使用

文章目录 概述metricbeat安装metricbeat启动案例举例1&#xff1a;收集系统运行的指标数据至es举例2&#xff1a;收集es运行的指标数据至es 概述 定期收集操作系统或应用服务的指标数据存储到Elasticsearch中&#xff0c;进行实时分析 metricbeat安装 去下载页下载&#xff…

Metricbeat安装与初级使用

metricbeat作用&#xff1a; 将 Metricbeat 部署到您所有的 Linux、Windows 和 Mac 主机&#xff0c;并将它连接到 Elasticsearch 就大功告成啦&#xff1a;您可以获取系统级的 CPU 使用率、内存、文件系统、磁盘 IO 和网络 IO 统计数据&#xff0c;以及获得如同系统上 top 命令…

Metricbeat和Filebeat的安装及配置

Beats的安装及配置 一、Metricbeat的安装配置 环境准备 下载与es同版本的metricbeat&#xff0c;这里为 metricbeat-7.11.1-linux-x86_64.tar.gz 这里使用root用户进行配置及启动metricbeat 已启动对应的ES服务及Kibana服务 metricbeat的安装 这里在/路径下建立beats文件…

windows安装wget

1、下载地址&#xff1a;http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe 2、双击下载的exe&#xff0c;同意协议&#xff0c;更改安装安装目录。 其余默认安装&#xff0c;继续下一步&#xff0c;安装完成 3、设置系统环境变量 添加path变量&#xff1a;…

手动编译源代码安装wget

从wget的源代码入手&#xff0c;来完成wget在Ubuntu上的安装&#xff0c;如果你的机器上已经默认安装了wget&#xff0c;请采用apt-get remove命令先卸载掉。 解决configure: error: –with-ssl was given, but GNUTLS/SSL is not available.&#xff1b;解决error: ./stdio.h…

win10安装wget,从此可以更快的下载文件 and windows10 下 zip命令行参数详解

1.win10安装wget 1.1安装下载 GNU Wget 1.21.3 for Windows 依次如下&#xff1a; 2、将下载好的wget.exe放到 C:/windows/system32文件夹下 也可以自行放置文件&#xff0c;添加到系统路径即可 第三步&#xff1a;配置系统环境变量&#xff08;如下&#xff09;电脑-属性…

Mac安装wget流程及异常解决

目录 1.终端输入wget检查自己是否已经安装过wget,没有安装如下图 2. 安装brew 1)点击brew官网&#xff1a;官网网址 2&#xff09;将命令粘贴到终端&#xff0c;回车执行 3&#xff09;输入sudo密码。 4&#xff09;系统开始自动安装brew&#xff0c;等待晚装完成&#xf…