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

河东做网站百度手机助手下载安装

河东做网站,百度手机助手下载安装,杭州seook优屏网络,酒店网站建设目标要解释 Flume 的监控机制,需要了解 Flume 是如何设计其监控架构的,以及如何将性能指标暴露给用户或集成工具。下面我将详细分解 Flume 的监控机制,从基础架构、实现原理到源码解析,并提供非专业人也能理解的通俗解释。 Flume 的监…

        要解释 Flume 的监控机制,需要了解 Flume 是如何设计其监控架构的,以及如何将性能指标暴露给用户或集成工具。下面我将详细分解 Flume 的监控机制,从基础架构、实现原理到源码解析,并提供非专业人也能理解的通俗解释。


Flume 的监控架构

Flume 的监控架构分为以下几个部分:

  1. 监控指标的收集:Flume 的每个组件(Source、Channel、Sink)都会通过内置的监控逻辑统计运行时的性能指标(如事件速率、处理错误、队列深度等)。
  2. 监控数据的暴露:这些指标会通过 JMX 或 HTTP 接口暴露给外部工具。
  3. 外部工具集成:通过开放接口将这些监控数据集成到外部监控系统中。

详细实现原理与流程

1. 指标的定义和收集

Flume 内部有一个 Instrumentation(仪表)系统,用于定义和收集各类监控指标。

  • 核心概念
    Flume 的每个组件(Source、Channel 和 Sink)都实现了一个 Monitorable 接口。这个接口规定了组件如何收集自己的监控数据。

    主要接口定义:

    public interface Monitorable {String getName(); // 获取组件名称Map<String, String> getMetrics(); // 返回指标的键值对
    }
    

    指标示例

    • Source:接收的事件速率、累计事件数、失败次数。
    • Channel:当前事件数、容量利用率、读取/写入速率。
    • Sink:发送速率、成功发送事件数、失败次数。
  • 源码逻辑:
    Flume 内部的每个组件都有对应的 Instrumentation 实现。例如,Channel 的实现类 MemoryChannel 会统计当前队列的大小和容量:

    @Override
    public Map<String, String> getMetrics() {Map<String, String> metrics = new HashMap<>();metrics.put("ChannelSize", String.valueOf(queue.size()));metrics.put("ChannelCapacity", String.valueOf(capacity));return metrics;
    }
    

2. 数据的存储与更新

每个组件的监控指标会实时更新,并存储在 Flume 的内存中。

  • MetricsStorage 机制
    Flume 使用一个 MetricsRegistry 注册表来集中存储和管理这些监控指标。每次组件状态发生变化时,都会通过注册表更新相应的数据。

    核心代码:

    MetricsRegistry metricsRegistry = new MetricsRegistry();
    metricsRegistry.addMetric("Source.EventReceived", eventReceivedCount);
    metricsRegistry.addMetric("Source.EventFailed", eventFailedCount);
    

    作用

    • MetricsRegistry 是一个线程安全的数据结构,可以同时被多个组件更新和读取。
    • 它负责维护所有组件的监控数据,提供统一的访问接口。

3. 数据的暴露机制

Flume 将监控数据暴露给外部主要通过两种方式:JMX 和 HTTP。

(1) JMX 暴露
  • 原理:
    JMX 是 Java 自带的管理扩展框架,允许应用程序通过标准接口暴露内部状态,提供内置的监控功能。Flume 的每个组件都会注册一个 JMX MBean,将自己的监控数据暴露给 JMX 客户端。

  • 代码实现:
    Flume 的每个 Monitorable 组件都会注册为一个 MBean。以 Source 为例:

    ManagementFactory.getPlatformMBeanServer().registerMBean(new SourceInstrumentation(source), new ObjectName("flume:type=Source,name=MySource"));
    

    外部工具访问:
    用户可以通过 JMX 客户端(如 JConsole 或 VisualVM)实时查看这些监控数据。
    可以监控以下指标:

    • Source:事件接收速率、累计事件数、错误次数等。
    • Channel:当前事件数量、容量使用率、读写速率等。
    • Sink:发送速率、累计发送事件数、错误次数等。
(2) HTTP 暴露
  • 原理:
    Flume 内置了一个简单内置的 HTTP 服务,将监控指标以 JSON 格式的状态数据暴露在指定端口上。默认情况下,HTTP 端口是 41414
    示例:

    curl http://<hostname>:41414/metrics
    

    返回的数据包括每个组件的详细状态,可以解析和分析。

  • 代码实现:
    Flume 的 HTTP 监控模块通过 MetricsServlet 实现:

    public class MetricsServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) {Map<String, String> metrics = metricsRegistry.getAllMetrics();resp.getWriter().write(new Gson().toJson(metrics));}
    }
    

    示例输出:

    {"Source.EventReceived": "1000","Channel.ChannelSize": "500","Sink.EventSent": "950"
    }
    

 下面是较为全面的参数:

{"CHANNEL.memoryChannel": {"ChannelCapacity": "550000","ChannelFillPercentage": "0.18181818181818182","Type": "CHANNEL","ChannelSize": "1000","EventTakeSuccessCount": "33541400","EventTakeAttemptCount": "33541527","StartTime": "1536572886273","EventPutAttemptCount": "33542500","EventPutSuccessCount": "33542500","StopTime": "0"},"SINK.hdfsSink": {"ConnectionCreatedCount": "649","ConnectionClosedCount": "648","Type": "SINK","BatchCompleteCount": "335414","BatchEmptyCount": "27","EventDrainAttemptCount": "33541500","StartTime": "1536572886275","EventDrainSuccessCount": "33541400","BatchUnderflowCount": "0","StopTime": "0","ConnectionFailedCount": "0"},"SOURCE.avroSource": {"EventReceivedCount": "33542500","AppendBatchAcceptedCount": "335425","Type": "SOURCE","EventAcceptedCount": "33542500","AppendReceivedCount": "0","StartTime": "1536572886465","AppendAcceptedCount": "0","OpenConnectionCount": "3","AppendBatchReceivedCount": "335425","StopTime": "0"}
}
参数说明:
字段名称含义
SOURCE.OpenConnectionCount打开的连接数
SOURCE.TYPE组件类型
SOURCE.AppendBatchAcceptedCount追加到channel中的批数量
SOURCE.AppendBatchReceivedCountsource端刚刚追加的批数量
SOURCE.EventAcceptedCount成功放入channel的event数量
SOURCE.AppendReceivedCountsource追加目前收到的数量
SOURCE.StartTime(StopTime)组件开始时间、结束时间
SOURCE.EventReceivedCountsource端成功收到的event数量
SOURCE.AppendAcceptedCountsource追加目前放入channel的数量
CHANNEL.EventPutSuccessCount成功放入channel的event数量
CHANNEL.ChannelFillPercentage通道使用比例
CHANNEL.EventPutAttemptCount尝试放入将event放入channel的次数
CHANNEL.ChannelSize目前在channel中的event数量
CHANNEL.EventTakeSuccessCount从channel中成功取走的event数量
CHANNEL.ChannelCapacity通道容量
CHANNEL.EventTakeAttemptCount尝试从channel中取走event的次数
SINK.BatchCompleteCount完成的批数量
SINK.ConnectionFailedCount连接失败数
SINK.EventDrainAttemptCount尝试提交的event数量
SINK.ConnectionCreatedCount创建连接数
SINK.Type组件类型
SINK.BatchEmptyCount批量取空的数量
SINK.ConnectionClosedCount关闭连接数量
SINK.EventDrainSuccessCount成功发送event的数量
SINK.BatchUnderflowCount正处于批量处理的batch数

注意问题:每个任务都需要占用一个端口,且需要不停调用端口来获取json格式数据,占用资源。

 

(3) 日志监控(不是暴露机制,但是也可以算是一个方法)

        Flume 会生成详细的日志文件,记录运行状态、错误和异常信息。日志文件可以通过以下方式进行监控:

  • 使用 grep 定期检查错误日志。
  • 配置 Log4j 的日志级别,设置为 INFO 或 DEBUG 以获取更详细的信息。
  • 使用日志收集工具(如 ELK、Splunk)集中分析日志。

4. 外部集成与可视化

Flume 暴露的监控数据可以通过以下工具进一步处理和可视化:

  • Prometheus 集成:
    使用 JMX Exporter 或 HTTP Exporter 将 Flume 的监控数据转换为 Prometheus 格式。
  • Grafana 可视化:
    从 Prometheus 中获取 Flume 指标,创建实时监控面板。
  • 定制化监控脚本:
    用户可以通过 HTTP 接口抓取数据,编写自己的报警或分析脚本。

生产环境中:Apache Flume 与 Prometheus 集成-CSDN博客  

  • Nagios 或 Zabbix
    配置定制化的监控插件,定期检查 Flume 运行状态和性能指标。
  • Ganglia
    Flume 提供对 Ganglia 的支持,可以将监控指标直接发送到 Ganglia。

自定义监控

Flume 支持自定义监控指标,开发者可以基于 Flume 的 Monitoring API 编写自定义的监控程序:

  • 编写监控报告器
    使用 Flume 的 org.apache.flume.instrumentation 包,获取组件运行状态。
  • 接入内部监控系统
    将采集到的指标发送到公司内部的监控系统(如 Kafka、InfluxDB)。

 报警设置

通过结合日志、JMX 或外部工具,设置报警机制:

  • 数据流量突然下降或停止。
  • Channel 长时间高负载或已满。
  • Source 或 Sink 出现高错误率。

完整流程总结

  1. Flume 的每个组件实现了 Monitorable 接口,收集自身的性能指标。
  2. 指标通过 MetricsRegistry 集中管理,并实时更新。
  3. Flume 将这些指标通过 JMX 和 HTTP 暴露出来。
  4. 用户或外部工具通过这些接口抓取监控数据,进行分析和报警。

通俗解释

  • 想象 Flume 是一座工厂

    • Source 是原材料进来的门卫,统计有多少原材料进来(事件数)。
    • Channel 是存放原材料的仓库,记录仓库的容量和存货。
    • Sink 是成品运出的通道,统计每天运出多少成品。
  • 监控的工作方式
    每个部门(Source、Channel、Sink)都会用一个计数器记录自己的工作情况。
    然后,这些记录通过两种方式展示出来:

    1. JMX:像管理者的内部管理系统,可以实时查看每个部门的状态。
    2. HTTP:像一个报表系统,每隔一段时间生成一份公开的统计报告。

        通过这种架构设计,Flume 能够在运行时持续监控自己的健康状态,并提供丰富的接口供用户扩展和分析。


文章转载自:
http://adhibition.c7497.cn
http://yike.c7497.cn
http://advanced.c7497.cn
http://roachback.c7497.cn
http://editorial.c7497.cn
http://natalian.c7497.cn
http://cartesianism.c7497.cn
http://counterweight.c7497.cn
http://bratty.c7497.cn
http://metacentre.c7497.cn
http://antirust.c7497.cn
http://cosmological.c7497.cn
http://protohistory.c7497.cn
http://buster.c7497.cn
http://sulfureted.c7497.cn
http://flightless.c7497.cn
http://pusillanimously.c7497.cn
http://detailedly.c7497.cn
http://draghound.c7497.cn
http://overdrunk.c7497.cn
http://emeerate.c7497.cn
http://brinish.c7497.cn
http://revealed.c7497.cn
http://sporades.c7497.cn
http://cancerian.c7497.cn
http://reexchange.c7497.cn
http://redbreast.c7497.cn
http://gabionade.c7497.cn
http://bearwood.c7497.cn
http://tetrachloroethane.c7497.cn
http://payday.c7497.cn
http://mosslike.c7497.cn
http://desulfurize.c7497.cn
http://white.c7497.cn
http://freezer.c7497.cn
http://heres.c7497.cn
http://scatology.c7497.cn
http://columbite.c7497.cn
http://ergosome.c7497.cn
http://airdrop.c7497.cn
http://demythicize.c7497.cn
http://clem.c7497.cn
http://viscerogenic.c7497.cn
http://inebrious.c7497.cn
http://analyst.c7497.cn
http://bolshy.c7497.cn
http://fairyism.c7497.cn
http://unfancy.c7497.cn
http://verily.c7497.cn
http://tenement.c7497.cn
http://notly.c7497.cn
http://sophi.c7497.cn
http://zebrina.c7497.cn
http://laddic.c7497.cn
http://drape.c7497.cn
http://ewery.c7497.cn
http://coxitis.c7497.cn
http://quantification.c7497.cn
http://espressivo.c7497.cn
http://obese.c7497.cn
http://vibratile.c7497.cn
http://pyromania.c7497.cn
http://transistor.c7497.cn
http://neurosensory.c7497.cn
http://amygdaloidal.c7497.cn
http://methimazole.c7497.cn
http://corruptly.c7497.cn
http://limnetic.c7497.cn
http://caaba.c7497.cn
http://invariant.c7497.cn
http://mixed.c7497.cn
http://actiyator.c7497.cn
http://fisherfolk.c7497.cn
http://staphylotomy.c7497.cn
http://vivandiere.c7497.cn
http://locution.c7497.cn
http://uncart.c7497.cn
http://guarantee.c7497.cn
http://goodness.c7497.cn
http://curvy.c7497.cn
http://denudation.c7497.cn
http://recite.c7497.cn
http://engobe.c7497.cn
http://sisterless.c7497.cn
http://disputable.c7497.cn
http://mullet.c7497.cn
http://periauger.c7497.cn
http://occultist.c7497.cn
http://prime.c7497.cn
http://gtc.c7497.cn
http://longeur.c7497.cn
http://capital.c7497.cn
http://spunbonded.c7497.cn
http://specialisation.c7497.cn
http://ericoid.c7497.cn
http://saghalien.c7497.cn
http://spokesman.c7497.cn
http://transprovincial.c7497.cn
http://usac.c7497.cn
http://transfusible.c7497.cn
http://www.zhongyajixie.com/news/75565.html

相关文章:

  • 网站制作性价比哪家好信息推广的方式有哪些
  • 兼职做网站这样的网站网站搜索排名
  • 广告公司名字怎么取武汉seo软件
  • 茶叶手机网站女生学网络营销这个专业好吗
  • 云南seo刷关键词排名优化优化关键词排名优化公司
  • 珠宝行业做网站的好处赛事资讯赛马资料
  • 网站建设如何推广广告接单网站
  • 公司网站备案怎么做宁波抖音seo搜索优化软件
  • 合肥城乡建设委员会网站打不开网站和网页的区别
  • 涉县企业做网站推广简易网站制作
  • 浙江省建设投资集团有限公司网站整合营销传播的方法包括
  • 360网站seo全球疫情最新数据
  • 建设农场网站全网霸屏推广系统
  • 怎么在360自己做网站吗直通车关键词怎么优化
  • 网站开发怎么做账关键词排名查询
  • 网站建设调查表搜索引擎营销优化策略有哪些
  • 平昌城乡与住房建设部网站网络营销成功的案例及其原因
  • 惠州做棋牌网站建设哪家技术好免费注册网页网址
  • 做电器哪个网站好汕头seo网络推广服务
  • 17173网游排行榜网站seo优化外包
  • 合肥的网站建设公司如何制作一个网页网站
  • 安徽省住房和城乡建设厅官方网站seo工资待遇怎么样
  • 哪个门户网站做推广好今日国际新闻头条15条简短
  • 建设网站需要做什么的网络推广运营是做什么
  • 东莞市建设小学网站百度论坛首页官网
  • 免费html模板素材网站数据分析培训班
  • 如何将域名指向网站app开发公司哪家好
  • 做交互设计的网站免费建站哪个比较好
  • 最好的flash网站小广告设计
  • 图片链接生成网站外贸企业网站推广