prometheus 发送恢复 值_Flink 和 Prometheus:流式应用程序的云原生监控

翻译:陆离

校对:杨乾坤(欧文) 本文描述了程序开发人员如何使用 Apache Flink 内置的 M etrics 系统 和 Prometheus结合的方式,有效的观测和监控流式应用程序。本文将介绍 Prometheus 的基本概念,适合于监控 Apache Flink 的流处理作业的原因,并通过实例来说明如何利用 Prometheus 来深入了解应用程序,对 Flink 作业的潜在问题作出告警。 为什么选择 Prometheus? Prometheus 是一个基于指标的监测系统,最初创建于 2012 年,它是完全开源的(Apache License 2),并且背后有着一个活跃的技术社区支持,去年从云原生基金会(Cloud Native Foundation)毕业,这标志着产品的成熟、稳定和生产可用。Prometheus 系统是基于度量指标的,被设计用来衡量服务的整体健康状况、行为和性能。Prometheus 具备多维的数据模型和灵活的查询语言,并且是为可靠性而设计的,可以很容易地部署在传统的或容器化的环境之中。以下是它所涉及到的一些重要概念:
  • Metrics: Prometheus 将 Metrics 定义为随时间变化的信息流,这些时间序列具有毫秒级的精确度;
  • Labels:是与支持 Prometheus 的数据模型的时间序列相关联的键值对,这与传统的度量系统可能遇到的分层数据结构不太相同;
  • Scrape: Prometheus 是一个基于“拉取”的系统,它从指定的数据源中主动获取(“scrapes”)度量数据,这些数据源以基于文本的格式在 HTTP 协议的地址上进行暴露;
  • PromQL:是 Prometheus 的查询语言,它既可用于创建仪表盘,也可用于设置在满足特定条件时触发的告警规则;
当Flink作业需要考虑度量指标和监控系统时,其实有很多选择。Flink 提供了原生支持,通过  PrometheusReporter 功能向 Prometheus 公开数据,配置这个功能非常的简单。 Prometheus 是一个很好的选择,因为通常来说,Flink 作业不是独立运行的,而是在一个很大的微服务环境中运行的。为了让 Prometheus 能够从其他更广泛的系统中获得度量指标,这里提供两种选择:支持 所有主要语言的库 ,以应用于其它语言开发的应用程序。此外,还有一系列各种各样的 输出器 ,是将第三方系统公开的度量指标(如数据库或者 Apache Kafka)作为 Prometheus 的度量指标。 Prometheus 和 Flink 的实操 这里提供了一个  Github 库 ,演示了上面所描述的整合过程。想要查看的话,先要克隆一个库,并确保环境中安装并运行了 Docker 容器:
./gradlew composeUp
首先利用工具  Gradle  创建一个 Flink 作业,并基于  Docker Compose  启动一个本地的环境,Docker Compose 启动一个运行在  Flink 作业集群 (可在http://localhost:8081上访问)中的作业和一个 Prometheus 实例(http://localhost:9090)。 b432156b67ea78910f15e015d1f1a335.png                     示例作业 Web界面中的作业曲线图和自定义的度量指标 PrometheusExampleJob 包括三个 operator,一个是生成多达 10000 个随机数,然后是一个 map 会对事件进行计数,并且创建一个值传递的柱状图。 最后一个,会丢弃这些事件,不做进一步的输出。下边显示了一些简单的代码,来自于第二个操作,把与业务逻辑相关的定制度量指标添加到 Flink 作业中,这是非常简单的事情。
class FlinkMetricsExposingMapFunction extends RichMapFunction<Integer, Integer> {  private transient Counter eventCounter;  @Override  public void open(Configuration parameters) {    eventCounter = getRuntimeContext().getMetricGroup().counter("events");  }  @Override  public Integer map(Integer value) {    eventCounter.inc();    return value;  }}
上述代码从 FlinkMetricsExposingMapFunction.java 文件中摘录的,演示了自定义的 Flink 度量指标 在Flink中配置Prometheus监控 开始用Prometheus监控Flink的时候,必须要执行以下的步骤: 1. 首先让PrometheusReporter的jar文件放在Flink集群的安装路径里(jar包是随Flink一起发布的);
cp/opt/flink/opt/flink-metrics-prometheus-1.7.2.jar /opt/flink/lib
2. 在Flink的flink-conf.yaml文件中 配置报告(reporter)参数 。所有的作业管理器和任务管理器都将公开已配置端口的度量指标;
 metrics.reporters: prom metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter metrics.reporter.prom.port: 9999
3. Prometheus需要知道从哪里获取到度量指标。在一个静态的场景中,只需在prometheus.yml文件中配置Prometheus,请看下面的代码:
scrape_configs:- job_name: 'flink'  static_configs:  - targets: ['job-cluster:9999', 'taskmanager1:9999','taskmanager2:9999']
在一些动态的场景中,我们建议使用Prometheus提供给不同平台(如Kubernetes、AWS EC2等等)的服务发现支持机制。 Prometheus现在有两个自定义的度量指标,见下图: 303c7e08a541075fa6fc112071f10d2a.png Prometheus web UI 中的度量指标实例 Flink 集群还提供了更多的技术度量指标(如检查点大小或持续时间、Kafka offset或资源消耗机制)。如果你感兴趣的话,可以查看所有作业管理器和两个任务管理器的Prometheus度量指标,它们分别在 http://localhost:9249、http://localhost:9250 和 http://localhost:9251 上显示。 要测试 Prometheus 的告警功能,通过执行如下的命令:
docker killtaskmanager1
我们的 Flink 作业可以通过 检查点 机制快速地从局部的失败中恢复。不过,大约在一分钟之后(如果告警规则中配置过了),下图中的告警将会被触发: a80b21161ac28560fc8284e7b8163952.png Prometheus web UI的报警示例. 在实际情况下,这样的告警可以通过一个名为 Alertmanager 的组件进行路由,并在分类之后发送到给系统的通知里,如电子邮件、PagerDuty或Slack等。 继续使用这个设置,并查看 http://localhost:3000(权限:admin/flink)上的  Grafana  实例,来可视化 Prometheus 的度量指标。如果有任何问题或建议,请随时在 Github 上留言。最后,不要忘记执行以下的命令以结束演示:
./gradlewcomposeDown
结论 将 Prometheus 和 Flink 结合使用,可以为有效的监测和预警 Flink 作业提供一种简洁的方法。这两个技术背后都有着非常活跃的社区,并在即将发布的版本里做了完善以及添加了新的功能。我们鼓励大家一起尝试着使用这两项技术,这可以极大地促进大家对在生产中运行的 Flink 作业的了解。 作者:Maximilian Bode https://flink.apache.org/features/2019/03/11/prometheus-monitoring.html

d2563fe6a1ca95c4e2694ea36a8aa879.png

猜你喜欢

1、基于 Flink SQL 构建实数据仓库在 OPPO 的实战

2、深入理解Flink核心技术

3、Flink 在饿了么的应用与实战

4、Uber 大数据平台的演进(2014~2019)

c71eb57a8d753ea41498dc39d5d16b79.png

d55938ce5b1312139e464b766c1b3d6a.png

76cb830ea3132621dc614a83a79e407d.png

“在看”一下,神清气爽 ceceaa3090eac9ef13a1509cd827a10a.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Prometheus 和 Grafana 监视基于 Jetty 的 Java 应用程序可以帮助你收集和分析应用程序的性能指标,并据此进行优化和调整。下面是一些基本步骤: 1. 安装 Prometheus 和 Grafana。可以从官网下载并安装它们,也可以使用 Docker 镜像启动。 2. 在应用程序中添加 Prometheus 客户端库。这个库提供了一些 API,可以让应用程序将性能指标暴露给 Prometheus。 3. 在应用程序的启动脚本中添加启动参数,以启用 Prometheus 客户端库。例如,可以添加以下参数: ``` -javaagent:/path/to/prometheus/jmx_prometheus_javaagent.jar=8080:/path/to/config.yml ``` 这个参数会启动一个 Java 代理,将应用程序的性能指标暴露给 Prometheus。8080 是代理监听的端口号,config.yml 是代理的配置文件。 4. 在 Prometheus 的配置文件中添加监控目标。例如,可以添加以下配置: ``` - job_name: 'jetty' metrics_path: '/metrics' static_configs: - targets: ['localhost:8080'] ``` 这个配置告诉 Prometheus 监视名为 "jetty" 的目标,并从该目标的 /metrics 路径获取指标。目标地址为 localhost:8080。 5. 启动应用程序Prometheus,并验证指标是否被成功收集。可以使用 Prometheus 的 Web UI 来查看指标。 6. 在 Grafana 中创建仪表盘,将应用程序的指标展示出来。可以使用 Grafana 的模板和图表来构建仪表盘。 这些步骤只是一个简单的指导,具体的实现可能因应用程序和环境的不同而有所不同。但总的来说,使用 Prometheus 和 Grafana 监视基于 Jetty 的 Java 应用程序是相对简单和方便的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值