简单介绍
flink内部实现了一套metric数据收集库。 同时flink自身系统有一些固定的metric数据, 包括系统的一些指标,CPU,内存, IO 或者各个task运行的一些指标。具体包含那些指标可以查看官方文档: flink-metric
同时我们也可以利用系统的metric库在自己的代码中进行打点收集metrics数据。此外, flink提供了外部接口,可以用来导出这些metrics数据.
flink-metric库的使用
在官方的文档中有介绍, 需要继承Richfunction 才能获得对应的metric对象, 用法如下:
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;
}
}
flink-metrics导出到外部系统
在flink中, 提供了方便的metric数据导出的库,通过实现自己的reporter,可以将metrics数据导出到不同的系统.
官方提供有多种reporter库,JMX, Graphite, Slf4j... 等等. 同时,我们可以自定义实现metric库,来导入到自己的系统.
自定义reporter类
实现MetricReporter类中的open,close, notifyOfAddedMetric, notifyOfRemovedMetric方法
实现Scheduled的report方法 ,在刚方法中实现写入到其他系统的逻辑
实现CharacterFilter的 filterCharacters方法, 用于对scope进行过滤.
public class FalconReporter implements MetricReporter, CharacterFilter, Scheduled {
private static final Logger LOG =LoggerFactory.getLogger(FalconReporter.class);
private final Map<Gauge<?>, MetricTag> gauges = new ConcurrentHashMap<>();
private final Map<Counter, MetricTag> counters = new ConcurrentHashMap<>();
private final Map<Histogram, MetricTag> histograms = new ConcurrentHashMap<>();
private final Map<Meter, MetricTag> meters = new ConcurrentHashMap<>();
@Override
public String filterCharacters(String s) {
return s;
}
@Override
public void open(MetricConfig metricConfig) {
}
@Override
public void close() {
}
@Override
public void notifyOfAddedMetric(Metric metric, String s, MetricGroup metricGroup) {
}
@Override
public void notifyOfRemovedMetric(Metric metric, String s, MetricGroup metricGroup) {
}
@Override
public void report() {
}
}
配置reporter
在flink-conf.yaml中配置即可,配置如下
metrics.reporters: slf4j, jmx
metrics.reporter.slf4j.class: org.apache.flink.metrics.falcon.FalconReporter
metrics.reporter.slf4j.interval: 60 SECONDS
metrics.reporters 用于配置类型名, 自定义即可
metrics.reporter.slf4j.class: 配置对应类型的reporter类
metrics.reporter.slf4j.interval: 60 SECONDS 消息上报的间隔
metrics.reporter.slf4j.* 可以自定义配置, 可以在open(MetricConfig metricConfig)
中的获得对应的config