博客/工程

立即获得普罗米修斯Grafana仪表盘指标的灵丹妙药PromEx图书馆

2021年4月28日6分钟

亚历克斯Koutmos目前Whoosh.io创始工程师。后迷上了光束阅读灵丹妙药行动Saša Jurić2015年,自2016年以来,他一直与药剂专业。亚历克斯还发布灵丹妙药博客https://akoutmos.com和常规药剂在Twitter上提示# MyElixirStatus标签下。当亚历克斯并不在BeamRadio播客,他认为几包Hex.pm灵丹妙药库上。

我一直使用Grafana近四年了,在那个时候我自带工具,它已经成为我的应用程序可观测性的需要。特别是现在Grafana还允许您查看日志和跟踪,您可以很容易地通过Grafana都可观测性浮出水面的三大支柱。因此,当我开始工作的灵丹妙药PromEx图书馆,拥有Grafana是最终目标指标仪表板完全可以理解。简而言之,PromEx是一个库,旨在提供普罗米修斯指标和Grafana仪表板许多流行的灵丹妙药生态系统库,并需要不到5分钟。看看PromEx利用Grafana,让我们深入PromEx架构和看到的哪些部分Grafana它使用HTTP API。

PromEx罩下

而Grafana和普罗米修斯不耦合的任何一个特定的编程语言或生态系统,我相信PromEx将不可能没有Erlang和灵丹妙药社区工具中可用梁遥测GitHub组织。这个GitHub组织提供的工具库作者在Erlang和灵丹妙药社区一个一致的接口,可以表面内部图书馆活动。这些遥测事件可以用于结构化格式日志,捕捉普罗米修斯指标,甚至形成OpenTelemetry跟踪的基础。所有图书馆用户需要做的是把这些遥测的事件处理程序,以及任何时间触发的事件,用户的调用回调,并将任何与事件相关的测量数据和元数据。下面是一个灵丹妙药的代码片段所示(从百老汇库):

#库发布指标一样:defp emit_start_event(名称、start_time消息)做元数据= %{名称:名称、消息:消息}= %{时间:start_time}:测量遥测。执行([:百老汇:处理器、:开始),测量,元数据)结束#,你可以连接到任意事件一样::遥测。附加(“handler_id”,[:百老汇:处理器、:开始],fn _event_name, event_measurement,元数据,_config - > IO.inspect (" # {metadata.name}开始处理一条消息# {measurements.time}”)结束,nil)

在写这篇文章的时候,有134库Hex.pm利用遥测和前面提到的工具。这意味着所有这些134库表面内部事件在一个统一的和容易消耗格式。与此一致的基础,PromEx提供了插件式框架,您可以附加普罗米修斯指标收藏家追随这些遥测事件按菜单点菜。例如,假设我们有一个凤凰城web应用程序也通过利用Postgres星质并且作业处理库奥班。使用PromEx,我们可以创建一个配置模块高度遥测处理程序中的所有这些库遥测事件暴露需要时尚(插件中定义的函数):

defmodule MyCoolApp。PromEx用PromEx, otp_app:: web_app @impl真正def插件(PromEx.Plugins。应用程序,PromEx.Plugins。梁,{PromEx.Plugins。凤凰城, router: MyCoolAppWeb.Router}, {PromEx.Plugins.Ecto, repos: [MyCoolApp.Repo]}, {PromEx.Plugins.Oban, oban_supervisors: [Oban]} ] end @impl true def dashboard_assigns do [ datasource_id: "prometheus" ] end @impl true def dashboards do [ {:prom_ex, "application.json"}, {:prom_ex, "beam.json"}, {:prom_ex, "phoenix.json"}, {:prom_ex, "ecto.json"}, {:prom_ex, "oban.json"} ] end end

只有五行代码在我们的插件功能,我们已经为我们的应用程序普罗米修斯指标(依赖性,正常运行时间等),Erlang虚拟机,凤凰城(我们的web框架),星质(数据库库),奥班(我们的工作处理库)。所以Grafana领带到哪里呢?解压缩,在下一节中,我们讨论了仪表板的功能。

利用Grafana HTTP API

我的一个最大的痛点在处理监控解决方案的开发和部署仪表板。bob彩票中奖计划它将永远是一个手动过程去我Grafana实例已部署应用程序后,调整现有的可视化和添加新的内容。此外,仪表板从来没有任何源代码控制系统的一部分你可以没有代码评审PromQL查询的视觉效果,以确保你是可视化的正确的事情。最后,从未有任何流程整个环境的促进Grafana仪表板应用程序从DEV - >分段- >刺激。在我看来,仪表板的生命周期应该结合应用程序的生命周期考虑到仪表板表面度量特定版本的应用程序。

解决这些难点,PromEx附带相应的Grafana仪表盘指标被形象化的每个插件(您也可以编写自己的插件/仪表盘和杠杆PromEx自身的插件/仪表盘一样)。因此,作为PromEx发布的新版本,你自动获得新普罗米修斯指标和Grafana仪表板而无需做任何事情。在引擎盖下,PromEx利用Grafana仪表板API上传的仪表板应用程序初始化你永远不必担心上传或编辑仪表板。此外,通过注释API,PromEx还将注释仪表板所以你可以当一个应用程序实例的生命周期标记开始,当它停了下来。这意味着你可以有像这样的仪表板和零努力从你的结束:

PromEx接下来是什么?

有几件事PromEx目前在审查中,包括:

  • 可选的包装Grafana代理和监督下PromEx,所以指标可以通过remote_write推到远程普罗米修斯实例的应用程序。
  • 添加额外的插件库。方PromEx目前有6个插件,但与134年社区图书馆使用遥测,还有更多的工作要做。
  • 结合OpenTelemetry Erlang /长生不老药项目和提供支持范本

结论

虽然PromEx是专为Erlang /灵丹妙药的生态系统,我相信这里采用的模式适用于许多其他语言和生态系统。Grafana HTTP API功能丰富,允许您使用Grafana仪表板的主机工具为了得到细粒度控制仪表板如何部署。的另一个好处是,Grafana在本地运行在您的机器上,您可以更新您的仪表板添加新功能在开发阶段和有信心,事情应该时推出。