【Flink metric(1)】Flink指标系统的系统性知识:获取metric以及注册自己的metric

文章目录

    • [一. Registering metrics:向flink注册新自己的metrics](#一. Registering metrics:向flink注册新自己的metrics)
      • [1. 注册metrics](#1. 注册metrics)
      • [2. Metric types:指标类型](#2. Metric types:指标类型)
        • [2.1. Counter](#2.1. Counter)
        • [2.2. Gauge](#2.2. Gauge)
        • [2.3. Histogram(ing)](#2.3. Histogram(ing))
        • [2.4. Meter](#2.4. Meter)
    • [二. Scope:指标作用域](#二. Scope:指标作用域)
      • [1. User Scope](#1. User Scope)
      • [2. System Scope ing](#2. System Scope ing)
      • [3. User Variables](#3. User Variables)
    • [三. Reporter ing](#三. Reporter ing)
    • [四. System metrics ing](#四. System metrics ing)
    • [五. REST API integration](#五. REST API integration)
    • [六. Dashboard integration](#六. Dashboard integration)

本文我们通过官网来整体了解下flink 指标系统的系统性支持

本文主要关注:

  • 如何注册自定义指标,如何进行更新指标数据
  • 指标定义的层级:即指标的scope
  • 简单介绍,指标如何报告给外部系统、有哪些系统指标
  • 指标如何通过REST API获取
  • 在flink UI上创建Dashboard的方法

Flink exposes a metric system that allows gathering and exposing metrics to external systems.

flink 暴露了一个指标系统,可以收集和暴露指标给外部系统。

一. Registering metrics:向flink注册新自己的metrics

1. 注册metrics

任何继承了RichFunction 的用户函数,都可以通过调用:getRuntimeContext().getMetricGroup() ,来访问flink的metric system。方法返回的MetricGroup可以用来创建和注册新的指标。

2. Metric types:指标类型

flink支持 Counters, Gauges, Histograms and Meters.等四种指标类型。

2.1. Counter

计数器 (Counter) 用于计数某个指标。

  • 可以使用 inc()/inc(long n)dec()/dec(long n) 方法来增加或减少当前值。
  • 可以通过在 MetricGroup 上调用 counter(String name) 来创建并注册一个计数器。
java 复制代码
public class MyMapper extends RichMapFunction<String, String> {
  private transient Counter counter;

  @Override
  public void open(Configuration config) {
    this.counter = getRuntimeContext()
      .getMetricGroup()
      .counter("myCounter");
  }

  @Override
  public String map(String value) throws Exception {
    this.counter.inc();
    return value;
  }
}

你也可以自己实现counter。

java 复制代码
public class MyMapper extends RichMapFunction<String, String> {
  private transient Counter counter;

  @Override
  public void open(Configuration config) {
    this.counter = getRuntimeContext()
      .getMetricGroup()
      .counter("myCustomCounter", new CustomCounter());
  }

  @Override
  public String map(String value) throws Exception {
    this.counter.inc();
    return value;
  }
}
2.2. Gauge

可以提供任何数据类型,要使用Gauge你必须要实现Gauge接口,可以返回任何类型。

java 复制代码
public class MyMapper extends RichMapFunction<String, String> {
  private transient int valueToExpose = 0;

  @Override
  public void open(Configuration config) {
    getRuntimeContext()
      .getMetricGroup()
      .gauge("MyGauge", new Gauge<Integer>() {
        @Override
        public Integer getValue() {
          return valueToExpose;
        }
      });
  }

  @Override
  public String map(String value) throws Exception {
    valueToExpose++;
    return value;
  }
}
2.3. Histogram(ing)

直方图(Histogram)用于测量长整型值的分布情况。

可以通过在 MetricGroup 上调用 histogram(String name, Histogram histogram) 来注册一个直方图。

java 复制代码
public class MyMapper extends RichMapFunction<Long, Long> {
  private transient Histogram histogram;

  @Override
  public void open(Configuration config) {
    this.histogram = getRuntimeContext()
      .getMetricGroup()
      .histogram("myHistogram", new MyHistogram());
  }

  @Override
  public Long map(Long value) throws Exception {
    this.histogram.update(value);
    return value;
  }
}

ing

2.4. Meter

一个 Meter 用于测量平均吞吐量。

  • 可以使用 markEvent() 方法注册一个事件的发生。同时发生多个事件可以使用 markEvent(long n) 方法注册。
  • 在 MetricGroup 上调用 meter(String name, Meter meter) 来注册一个 Meter。

二. Scope:指标作用域

每个度量指标都被分配了一个标识符和一组键值对,用于报告该度量指标。

这个标识符基于三个组件:在注册度量指标时的用户定义名称,一个可选的用户定义作用域,以及一个系统提供的作用域。

例如,如果 A.B 是系统作用域,C.D 是用户作用域,E 是名称,那么度量指标的标识符将是 A.B.C.D.E。

你可以通过在 Flink 配置文件中设置 metrics.scope.delimiter 键来配置标识符使用的分隔符(默认为 .)。

1. User Scope

你可以通过调用 MetricGroup#addGroup(String name),MetricGroup#addGroup(int name),或者 MetricGroup#addGroup(String key, String value) 来定义用户作用域。

我们通过 MetricGroup#getMetricIdentifier 和 MetricGroup#getScopeComponents 方法返回的内容。

java 复制代码
counter = getRuntimeContext()
  .getMetricGroup()
  .addGroup("MyMetrics")
  .counter("myCounter");

counter = getRuntimeContext()
  .getMetricGroup()
  .addGroup("MyMetricsKey", "MyMetricsValue")
  .counter("myCounter");

2. System Scope ing

3. User Variables

你可以通过调用 MetricGroup#addGroup(String key, String value) 来定义一个用户变量。

这个方法会影响 MetricGroup#getMetricIdentifier、MetricGroup#getScopeComponents 和 MetricGroup#getAllVariables() 返回的内容。

java 复制代码
counter = getRuntimeContext()
  .getMetricGroup()
  .addGroup("MyMetricsKey", "MyMetricsValue")
  .counter("myCounter");

三. Reporter ing

Flink 支持用户将 Flink 的各项运行时指标发送给外部系统。

四. System metrics ing

默认情况下,Flink会收集多个度量指标,这些指标能够深入了解当前的状态。

五. REST API integration

度量指标可以通过监控REST API查询。以下是可用端点列表及其示例JSON响应。

序号 metric类型 API
1 特定实体的metric - /jobmanager/metrics - /taskmanagers/<taskmanagerid>/metrics - /jobs/<jobid>/metrics - /jobs/<jobid>/vertices/<vertexid>/subtasks/<subtaskindex>
2 实体的聚合metric - /taskmanagers/metrics - /jobs/metrics - /jobs/<jobid>/vertices/<vertexid>/subtasks/metrics - /jobs/<jobid>/vertices/<vertexid>/jm-operator-metrics
3 实体子集上聚合的metric - /taskmanagers/metrics?taskmanagers=A,B,C - /jobs/metrics?jobs=D,E,F - /jobs/<jobid>/vertices/<vertexid>/subtasks/metrics?subtask=1,2,3

六. Dashboard integration

可以在仪表板中可视化每个任务或操作符收集的度量指标。在作业的主页面上,选择"Metrics"选项卡。在顶部图表中选择一个任务后,您可以使用"添加度量指标"下拉菜单选择要显示的度量指标。如下图:

  • 任务度量指标列出为<子任务索引>.<度量名称>。
  • 操作符度量指标列出为 <子任务索引>.<操作符名称>.<度量名称>
  • 每个度量指标将显示为单独的图表,其中 x 轴代表时间,y 轴表示测量值。
  • 所有图表每隔10秒自动更新一次,在导航到其他页面时仍会继续更新。
  • 可视化的度量指标数量没有限制,但是只有数值型度量指标可以被可视化显示。
相关推荐
老蒋新思维1 天前
创客匠人:认知即资产 ——AI 时代创始人 IP 知识变现的底层逻辑
网络·人工智能·网络协议·tcp/ip·重构·创始人ip·创客匠人
白帽子黑客罗哥1 天前
渗透测试技术:从入门到实战的完整指南
网络·安全·web安全·渗透测试·漏洞挖掘·网络安全培训
北邮刘老师1 天前
【智能体互联协议解析】ACPs/AIP为什么还在用“落后”的“中心化”架构?
网络·人工智能·架构·大模型·智能体·智能体互联网
winfield8211 天前
MCP 协议详解
开发语言·网络·qt
sdszoe49221 天前
IP地址规划与VLSM技术
网络·网络协议·tcp/ip·vlsm·ip地址规划
m0_569531011 天前
《K8s 网络入门到进阶:Service 与 Ingress 原理、部署方案及核心区别对比》
网络·容器·kubernetes
广东大榕树信息科技有限公司1 天前
当运维管理面临挑战时,如何借助动环监控系统提升响应能力?
运维·网络·物联网·国产动环监控系统·动环监控系统
狂奔的sherry1 天前
WIFI后端功能问题解决
网络
yimengsama1 天前
VMWare虚拟机如何连接U盘
linux·运维·服务器·网络·windows·经验分享·远程工作
Xの哲學1 天前
Linux NAT 深度剖析: 从设计哲学到实现细节
linux·服务器·网络·架构·边缘计算