Flink 指标(二)

作者: Alex90 | 来源:发表于2019-05-06 17:32 被阅读5次

    报告(Reporter)

    通过 conf/flink-conf.yaml 文件配置一个或多个 Reporters 来暴露度量值给外部系统,这些 Reporter 将在作业和任务启动的时候实例化。

    • metrics.reporter.<name>.<config>:名字为 <name> 的 Reporter 的通用设置
    • metrics.reporter.<name>.class:名字为 <name> 的 Reporter class
    • metrics.reporter.<name>.interval:名字为 <name> 的 Reporter 的间隔时间
    • metrics.reporter.<name>.scope.delimiter:名字为 <name> 的 Reporter 的标识符的分隔符(默认使用 metrics.scope.delimiter
    • metrics.reporters:(可选)以逗号分隔的包含报告名称列表。默认情况下,将使用所有已配置的报告。

    所有的 Reporter 配置至少需要配置 class 属性,还有一些允许配置记录间隔。下面是一些 Reporter 的配置实例:

    metrics.reporters: my_jmx_reporter,my_other_reporter
    
    metrics.reporter.my_jmx_reporter.class: org.apache.flink.metrics.jmx.JMXReporter
    metrics.reporter.my_jmx_reporter.port: 9020-9040
    
    metrics.reporter.my_other_reporter.class: org.apache.flink.metrics.graphite.GraphiteReporter
    metrics.reporter.my_other_reporter.host: 192.168.1.1
    metrics.reporter.my_other_reporter.port: 10000
    

    包含 Reporter 的 jar 必须放到 /lib 文件夹,这样 Flink 就可以访问到这些 jar。
    可以通过继承 org.apache.flink.metrics.reporter.MetricReporter 接口来实现自己的 Reporter,如果需要定期发送记录,需要继承 Scheduled 接口。

    下面是一些支持的 Reporter:

    JMX(org.apache.flink.metrics.jmx.JMXReporter)

    不需要添加额外的依赖就可以支持 JMX Reporter,默认是不激活的。

    参数:

    • port - (可选)JMX 连接监听的端口。为了能够在一个主机上运行多个 Reporter 实例(例如,当一个 TaskManager 与 JobManager 共同使用时),建议端口范围(如 9250-9260),实际端口将显示在相关作业或 TaskManager 日志中。如果设置此设置,Flink 将为给定的端口/范围启动额外的 JMX 连接器。度量指标将在本地默认的JMX实例上显示。

    配置示例:

    metrics.reporter.jmx.class: org.apache.flink.metrics.jmx.JMXReporter
    metrics.reporter.jmx.port: 8789
    

    通过 JMX 公开的度量由域(domain)和键属性列表(key-properties)标识,这些属性一起构成对象名。

    域始终以 org.apache.flink 开头,后跟一个通用的度量标识符。与通常的标识符不同,它不受作用域格式的影响,不包含任何变量,并且在跨作业时也是常量。例子:org.apache.flink.job.task.numbytesout

    键属性列表包含与给定指标关联的所有变量的值,无论配置的作用域格式如何。例子:host=localhost,job_name=myjob,task_name=mytask

    因此,域标识一个度量类,键属性列表标识该度量的一个(或多个)实例。

    Ganglia(org.apache.flink.metrics.ganglia.GangliaReporter)

    要使用此 Reporter,必须复制 /opt/flink-metrics-ganglia-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

    参数:

    • host - 在 gmond.conf 中的 udp_recv_channel.bind 下配置的 gmond 主机地址
    • port - 在 gmond.conf 的 udp_recv_channel.port 下配置的 gmond 端口
    • tmax - 旧指标应保留多长时间的软限制
    • dmax - 旧指标应保留多长时间的硬限制
    • ttl - 传输的 UDP 包的生存时间
    • addressingMode - 要使用的 UDP 寻址模式(单播/多播)

    配置示例:

    metrics.reporter.gang.class: org.apache.flink.metrics.ganglia.GangliaReporter
    metrics.reporter.gang.host: localhost
    metrics.reporter.gang.port: 8649
    metrics.reporter.gang.tmax: 60
    metrics.reporter.gang.dmax: 0
    metrics.reporter.gang.ttl: 1
    metrics.reporter.gang.addressingMode: MULTICAST
    

    Graphite(org.apache.flink.metrics.graphite.GraphiteReporter)

    要使用此 Reporter,必须复制 /opt/flink-metrics-graphite-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

    参数:

    • host - Graphite 服务器主机地址
    • port - Graphite 服务器端口
    • protocol - 使用协议(TCP / UDP)

    配置示例:

    metrics.reporter.grph.class: org.apache.flink.metrics.graphite.GraphiteReporter
    metrics.reporter.grph.host: localhost
    metrics.reporter.grph.port: 2003
    metrics.reporter.grph.protocol: TCP
    

    Prometheus (org.apache.flink.metrics.prometheus.PrometheusReporter)

    要使用此 Reporter,必须复制 /opt/flink-metrics-prometheus-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

    参数:

    • port - (可选)Prometheus exporter 监听的端口,默认为 9249。为了能够在一个主机上运行多个报告实例(例如,当一个 TaskManager 与 JobManager 共同使用时),建议使用端口范围(如:9250-9260)。

    配置示例:

    metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter
    

    Flink 度量类型映射到 Prometheus 度量类型,如下所示:

    Flink Prometheus Description
    Counter Gauge Prometheus 计数器不能减
    Gauge Gauge Prometheus 仅支持数字和布尔类型
    Histogram Summary 分位数 .5,.75,.95,.98,.99 和 .999
    Meter Gauge The gauge exports the meter’s rate

    PrometheusPushGateway(org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter)

    要使用此 Reporter,必须复制 /opt/flink-metrics-prometheus-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

    参数:

    默认值 描述
    deleteOnShutdown true 指定是否在关闭时从 PushGateway 中删除指标。
    Host (none) PushGateway 服务器主机。
    jobName (none) 将推送指标的作业名称。
    port -1 PushGateway 服务器端口。
    randomJobNameSuffix true 指定是否应将随机后缀附加到作业名称。

    配置示例:

    metrics.reporter.promgateway.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter
    metrics.reporter.promgateway.host: localhost
    metrics.reporter.promgateway.port: 9091
    metrics.reporter.promgateway.jobName: myJob
    metrics.reporter.promgateway.randomJobNameSuffix: true
    metrics.reporter.promgateway.deleteOnShutdown: false
    

    PrometheusPushGatewayReporter 将指标推送到 Pushgateway,可由 Prometheus 抓取。

    StatsD(org.apache.flink.metrics.statsd.StatsDReporter)

    要使用此 Reporter,必须复制 /opt/flink-metrics-statsd-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。
    参数:

    • host - StatsD 服务器主机
    • port - StatsD 服务器端口

    配置示例:

    metrics.reporter.stsd.class: org.apache.flink.metrics.statsd.StatsDReporter
    metrics.reporter.stsd.host: localhost
    metrics.reporter.stsd.port: 8125
    

    Datadog(org.apache.flink.metrics.datadog.DatadogHttpReporter)

    要使用此 Reporter,必须复制 /opt/flink-metrics-datadog-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。
    Flink 指标,如任何变量 <host><job_name><tm_id><subtask_index><task_name><operator_name>,将被发送到 Datadog 作为标签。标签看起来像 host:localhostjob_name:myjobname

    参数:

    • apikey - Datadog APIKeys
    • tags - (可选)发送到 Datadog 时将应用于度量标准的全局标记。标签应仅以逗号分隔

    配置示例:

    metrics.reporter.dghttp.class: org.apache.flink.metrics.datadog.DatadogHttpReporter
    metrics.reporter.dghttp.apikey: xxx
    metrics.reporter.dghttp.tags: myflinkapp,prod
    

    Slf4j(org.apache.flink.metrics.slf4j.Slf4jReporter)

    要使用此 Reporter,必须复制 /opt/flink-metrics-slf4j-1.6.1-SNAPSHOT.jar 到 Flink 的 /lib 文件夹下。

    配置示例:

    metrics.reporter.slf4j.class: org.apache.flink.metrics.slf4j.Slf4jReporter
    metrics.reporter.slf4j.interval: 60 SECONDS
    

    系统指标

    Flink 默认会收集当前状态的指标,下文的表格中包括以下5列:

    • “Scope”列描述了生成系统范围的范围格式,比如,如果表格里面的值为“Operator”,那么“metrics.scope.operator”将作为指标的范围格式。如果表格包含使用斜线分割的多个值,那么系统将根据不同的值分别报告多个指标,比如同时包含 job- 和 taskmanagers 两个。
    • “Infix”(可选)列描述了附加哪个中缀到系统范围之后。
    • “Metrics” 列出了此系统范围和中缀注册的所有特性的名字。
    • “Description”列描述了指标测量的信息。
    • “Type”描述了指标的类型。

    请注意,“infix” 和 “Metrics” 列中所有的点根据 “metrics.delimiter” 设置变化。

    因此,为了推断指标的标识符:

    1. 先从“Scope”列获取范围格式。
    2. 如果“Infix”列有值的话,附加到范围格式后面,并根据“metrices.delimiter”设置附加相应的分隔符。
    3. 附加指标的名称。

    CPU

    Scope Infix Metrics Description Type
    Job-/TaskManager Status.JVM.CPU Load JVM CPU使用情况。 Gauge
    - - Time JVM CPU时间。 Gauge

    Memory

    Scope Infix Metrics Description Type
    Job-/TaskManager Status.JVM.Memory Heap.Used 当前使用的堆内存量(bytes)。 Gauge
    - - Heap.Committed 保证可供 JVM 使用的堆内存量(bytes)。 Gauge
    - - Heap.Max 可用于内存管理的最大堆内存量(bytes)。 Gauge
    - - NonHeap.Used 当前使用的非堆内存量(bytes)。 Gauge
    - - NonHeap.Committed 保证 JVM 可用的非堆内存量(bytes)。 Gauge
    - - NonHeap.Max 可用于内存管理的最大非堆内存量(bytes)。 Gauge
    - - Direct.Count 直接缓冲池中的缓冲区数。 Gauge
    - - Direct.MemoryUsed JVM 用于直接缓冲池的内存量(bytes)。 Gauge
    - - Direct.TotalCapacity 直接缓冲池中所有缓冲区的总容量(bytes)。 Gauge
    - - Mapped.Count 映射缓冲池中的缓冲区数。 Gauge
    - - Mapped.MemoryUsed JVM 用于映射缓冲池的内存量(bytes)。 Gauge
    - - Mapped.TotalCapacity 映射缓冲池中的缓冲区数(bytes)。 Gauge

    Threads

    Scope Infix Metrics Description Type
    Job-/TaskManager Status.JVM.Threads Count 活动线程总数。 Gauge

    GarbageCollection

    Scope Infix Metrics Description Type
    Job-/TaskManager Status.JVM.GarbageCollector <GarbageCollector>.Count 已发生的集合总数。 Gauge
    - - <GarbageCollector>.Time 执行垃圾收集所花费的总时间。 Gauge

    ClassLoader

    Scope Infix Metrics Description Type
    Job-/TaskManager Status.JVM.ClassLoader ClassesLoaded JVM 启动以来加载的类总数。 Gauge
    - - ClassesUnloaded JVM 启动以来卸载的类总数。 Gauge

    Network

    Scope Infix Metrics Description Type
    TaskManager Status.Network AvailableMemorySegments 未使用的内存段数。 Gauge
    - - TotalMemorySegments 分配的内存段数。 Gauge
    Task buffers inputQueueLength 排队的输入缓冲区数。 Gauge
    - - outputQueueLength 排队输出缓冲区的数量。 Gauge
    - - inPoolUsage 估计输入缓冲区的使用情况。 Gauge
    - - outPoolUsage 估计输出缓冲区的使用情况。 Gauge
    - Network.
    <Input/Output>.
    <gate>
    totalQueueLen 所有输入/输出通道中排队缓冲区的总数。 Gauge
    - - minQueueLen 所有输入/输出通道中的最小排队缓冲区数。 Gauge
    - - maxQueueLen 所有输入/输出通道中的最大排队缓冲区数。 Gauge
    - - avgQueueLen 所有输入/输出通道中的平均缓冲区数。 Gauge

    Cluster

    Scope Metrics Description Type
    JobManager numRegisteredTaskManagers 注册 TaskManager 的数量。 Gauge
    - numRunningJobs 正在运行的作业数量。 Gauge
    - taskSlotsAvailable 可用任务槽的数量。 Gauge
    - taskSlotsTotal 任务槽的总数。 Gauge

    Availability

    Scope Metrics Description Type
    Job restartingTime 重新启动作业所花费的时间,或当前重新启动的持续时间(ms)。 Gauge
    - uptime 作业运行的时间不间断。对于已完成的作业,返回-1(ms)。 Gauge
    - downtime 对于当前处于故障/恢复状态的作业,在此中断期间经过的时间。对于正在运行的作业返回0,对于已完成的作业返回-1(ms)。 Gauge
    - fullRestarts 自提交此作业以来完全重新启动的总次数。 Gauge

    Checkpointing

    Scope Metrics Description Type
    Job lastCheckpointDuration 完成最后一个检查点所花费的时间(ms)。 Gauge
    - lastCheckpointSize 最后一个检查点的总大小(bytes)。 Gauge
    - lastCheckpointExternalPath 存储最后一个外部检查点的路径。 Gauge
    - lastCheckpointRestoreTimestamp 在协调器上恢复最后一个检查点时的时间戳(ms)。 Gauge
    - lastCheckpointAlignmentBuffered 在最后一个检查点的所有子任务上进行对齐期间的缓冲字节数(ms)。 Gauge
    - numberOfInProgressCheckpoints 进行中检查点的数量。 Gauge
    - numberOfCompletedCheckpoints 成功完成检查点的数量。 Gauge
    - numberOfFailedCheckpoints 失败检查点的数量。 Gauge
    - totalNumberOfCheckpoints 总检查点的数量(正在进行,已完成,失败)。 Gauge
    Task checkpointAlignmentTime 最后一次屏障对齐完成所花费的时间(nanoseconds),或当前对齐到目前为止所用的时间(nanoseconds)。 Gauge

    IO

    Scope Metrics Description Type
    Job <SOURCE_ID>.
    <source_subtask_index>.
    <operator_id>.
    <operator_subtask_index>.
    latency
    从给定源子任务到算子子任务的延迟分布(ms)。 Histogram
    Task numBytesInLocal 此任务从本地源读取的总字节数。 Counter
    - numBytesInLocalPerSecond 此任务每秒从本地源读取的字节数。 Meter
    - numBytesInRemote 此任务从远程源读取的总字节数。 Counter
    - numBytesInRemotePerSecond 此任务每秒从远程源读取的字节数。 Meter
    - numBuffersInLocal 此任务从本地源读取的网络缓冲区总数。 Counter
    - numBuffersInLocalPerSecond 此任务每秒从本地源读取的网络缓冲区数。 Meter
    - numBuffersInRemote 此任务从远程源读取的网络缓冲区总数。 Counter
    - numBuffersInRemotePerSecond 此任务每秒从远程源读取的网络缓冲区数。 Meter
    - numBytesOut 此任务已发出的总字节数。 Counter
    - numBytesOutPerSecond 此任务每秒发出的字节数。 Meter
    - numBuffersOut 此任务已发出的网络缓冲区总数。 Counter
    - numBuffersOutPerSecond 此任务每秒发出的网络缓冲区数。 Meter
    Task/Operator numRecordsIn 此算子/任务已收到的记录总数。 Counter
    - numRecordsInPerSecond 此算子/任务每秒接收的记录数。 Meter
    - numRecordsOut 此算子/任务已发出的记录总数。 Counter
    - numRecordsOutPerSecond 此算子/任务每秒发送的记录数。 Meter
    - numLateRecordsDropped 此算子/任务因迟到而丢失的记录数。 Counter
    - currentInputWatermark 此算子/任务收到的最后一个水印(ms)。注意:对于具有2个输入的算子/任务,这是最后收到的水印的最小值。 Gauge
    Operator currentInput1Watermark 此算子在其第一个输入(ms)中收到的最后一个水印。注意:仅适用于具有2个输入的算子。 Gauge
    - currentInput2Watermark 此算子在其第二个输入中接收的最后一个水印(ms)。注意:仅适用于具有2个输入的算子。 Gauge
    - currentOutputWatermark 此算子发出的最后一个水印(ms)。 Gauge
    - numSplitsProcessed 此数据源已处理的InputSplits总数。 Gauge

    Connectors

    Kafka 连接器

    Scope Metrics User Variables Description Type
    Operator commitsSucceeded N / A 如果启用了偏移提交并且启用了检查点,则成功向 Kafka 提交的偏移提交总数。 Counter
    - commitsFailed N / A 如果启用了偏移提交并且启用了检查点,则 Kafka 的偏移提交失败总数。请注意,将偏移量提交回 Kafka 只是暴露消费者进度的一种方法,因此提交失败不会影响 Flink 的检查点分区偏移的完整性。 Counter
    - committedOffsets Topic,分区 对于每个分区,最后成功提交到 Kafka 的偏移量。可以通过主题名称和分区ID指定特定分区的度量标准。 Gauge
    - currentOffsets Topic,分区 消费者对每个分区的当前读取偏移量。可以通过主题名称和分区ID指定特定分区的度量标准。 Gauge

    Kinesis 连接器

    Scope Metrics User Variables Description Type
    Operator millisBehindLatest stream,shardId 对于每个 Kinesis 分片,消费者在流的头部后面的毫秒数,表示消费者当前时间落后多少。可以通过流名称和分片标识指定特定分片的度量标准。值为0表示记录处理被捕获,此时没有要处理的新记录。值-1表示该度量标准尚未报告。 Gauge
    - sleepTimeMillis stream,shardId 消费者在从 Kinesis 获取记录之前花费的毫秒数。可以通过流名称和分片标识指定特定分片的度量标准。 Gauge
    - maxNumberOfRecordsPerFetch stream,shardId 消费者在单个 getRecords 调用 Kinesis 时请求的最大记录数。 Gauge
    - numberOfAggregatedRecordsPerFetch stream,shardId 消费者在单个 getRecords 调用 Kinesis 时获取的聚合 Kinesis 记录数。 Gauge
    - numberOfDeggregatedRecordsPerFetch stream,shardId 消费者在单个 getRecords 调用 Kinesis 时获取的分解 Kinesis 记录的数量。 Gauge
    - averageRecordSizeBytes stream,shardId Kinesis 记录的平均大小(bytes),由消费者在单个 getRecords 调用中获取。 Gauge
    - runLoopTimeNanos stream,shardId 消费者在运行循环中花费的实际时间(ns)。 Gauge
    - loopFrequencyHz stream,shardId 一秒钟内调用 getRecords 的次数。 Gauge
    - bytesRequestedPerFetch stream,shardId 在一次调用 getRecords 中请求的字节数。 Gauge

    Reference:
    https://ci.apache.org/projects/flink/flink-docs-release-1.6/monitoring/metrics.html

    相关文章

      网友评论

        本文标题:Flink 指标(二)

        本文链接:https://www.haomeiwen.com/subject/mspdoqtx.html