首页 > 解决方案 > 如何从 Kubernetes 中运行的 Haskell 服务收集分析信息?

问题描述

我有一个用 Haskell 编写的微服务,编译器是 8.8.3。我使用--profile选项构建它并使用+RTS -p. 它运行了大约 30 分钟,有<my-service>.prof文件但它是空的(字面意思是 0 字节)。以前我是在我的本地机器上做的,我用 CTRL-C 停止服务,退出后它产生的<my-service>.prof文件不是空的。

所以,我有两个问题:

  1. 当 Haskell 微服务以最正确的方式在 Kubernetes 下运行时,如何收集 profiling 信息(以便能够读取这个 .prof 文件)?
  2. 如何将运行时参数传递给 Haskell 运行时保存此 .prof 文件的位置(如果没有这样的选项,可能有一些解决方法),对于 8.8.3 - 因为我觉得文件可能很大并且我可以使用磁盘空间问题。此外,我不知道如何在微服务运行时刷新/读取/获取此文件。我想如果我能够传递这个 .prof 文件的完整路径,那么我可以将它保存在某个永久卷上的其他位置,INT例如用信号“杀死”服务,并从卷中获取这个 .prof 文件。

当服务在 Kubernetes 中运行时,获取此 .prof 文件的常用/便捷方法是什么?

PS。我在最新版本的文档中看到了一些相关选项,但我使用的是 8.8.3

标签: haskellkubernetesprofiling

解决方案


我认为使用 GHC 进行实时分析的唯一方法是使用事件日志。您可以将Debug.Trace.traceEvent要测量的函数插入到代码中,然后-eventlog使用+RTS -l -ol <output-file-name> -RTS. 您可以使用它ghc-events-analyze来分析和可视化生成的事件日志。

GHC 8.8.3 的官方事件日志文档在这里


推荐阅读