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

张春  金牌会员 | 2024-8-22 04:09:59 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 571|帖子 571|积分 1713

本文我们通过官网来整体了解下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) 来创建并注册一个计数器。
  1. public class MyMapper extends RichMapFunction<String, String> {
  2.   private transient Counter counter;
  3.   @Override
  4.   public void open(Configuration config) {
  5.     this.counter = getRuntimeContext()
  6.       .getMetricGroup()
  7.       .counter("myCounter");
  8.   }
  9.   @Override
  10.   public String map(String value) throws Exception {
  11.     this.counter.inc();
  12.     return value;
  13.   }
  14. }
复制代码
你也可以本身实现counter。
  1. public class MyMapper extends RichMapFunction<String, String> {
  2.   private transient Counter counter;
  3.   @Override
  4.   public void open(Configuration config) {
  5.     this.counter = getRuntimeContext()
  6.       .getMetricGroup()
  7.       .counter("myCustomCounter", new CustomCounter());
  8.   }
  9.   @Override
  10.   public String map(String value) throws Exception {
  11.     this.counter.inc();
  12.     return value;
  13.   }
  14. }
复制代码
 
2.2. Gauge

可以提供任何数据类型,要使用Gauge你必须要实现Gauge接口,可以返回任何类型。
  1. public class MyMapper extends RichMapFunction<String, String> {
  2.   private transient int valueToExpose = 0;
  3.   @Override
  4.   public void open(Configuration config) {
  5.     getRuntimeContext()
  6.       .getMetricGroup()
  7.       .gauge("MyGauge", new Gauge<Integer>() {
  8.         @Override
  9.         public Integer getValue() {
  10.           return valueToExpose;
  11.         }
  12.       });
  13.   }
  14.   @Override
  15.   public String map(String value) throws Exception {
  16.     valueToExpose++;
  17.     return value;
  18.   }
  19. }
复制代码
 
2.3. Histogram(ing)

直方图(Histogram)用于测量长整型值的分布情况。
   可以通过在 MetricGroup 上调用 histogram(String name, Histogram histogram) 来注册一个直方图。
  1. public class MyMapper extends RichMapFunction<Long, Long> {
  2.   private transient Histogram histogram;
  3.   @Override
  4.   public void open(Configuration config) {
  5.     this.histogram = getRuntimeContext()
  6.       .getMetricGroup()
  7.       .histogram("myHistogram", new MyHistogram());
  8.   }
  9.   @Override
  10.   public Long map(Long value) throws Exception {
  11.     this.histogram.update(value);
  12.     return value;
  13.   }
  14. }
复制代码
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 方法返回的内容。
  1. counter = getRuntimeContext()
  2.   .getMetricGroup()
  3.   .addGroup("MyMetrics")
  4.   .counter("myCounter");
  5. counter = getRuntimeContext()
  6.   .getMetricGroup()
  7.   .addGroup("MyMetricsKey", "MyMetricsValue")
  8.   .counter("myCounter");
复制代码
 
2. System Scope ing

 
3. User Variables

你可以通过调用 MetricGroup#addGroup(String key, String value) 来定义一个用户变量。
   这个方法会影响 MetricGroup#getMetricIdentifier、MetricGroup#getScopeComponents 和 MetricGroup#getAllVariables() 返回的内容。
  1. counter = getRuntimeContext()
  2.   .getMetricGroup()
  3.   .addGroup("MyMetricsKey", "MyMetricsValue")
  4.   .counter("myCounter");
复制代码
 
三. Reporter ing

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

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

度量指标可以通过监控REST API查询。以下是可用端点列表及其示例JSON相应。
序号metric类型API1特定实体的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秒主动更新一次,在导航到其他页面时仍会继承更新。
  • 可视化的度量指标数量没有限定,但是只有数值型度量指标可以被可视化显示。
   

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表