logging - 哪些是运行程序的最佳 Haskell 库?

标签 logging haskell metrics

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。


7年前关闭。







Improve this question




如果我要将一个程序投入生产,我需要该程序做几件事,以便将其视为“可操作的”——即工程师和操作人员以可测量和可验证的方式运行和维护。就我的目的而言,一个可操作的程序必须:

  • 能够在多个级别记录(例如:调试、警告等)。
  • 能够收集和共享有关程序正在执行的工作类型以及该工作需要多长时间的指标/统计数据。理想情况下,收集的指标以与常用监控工具(如 Ganglia)兼容的格式提供。 , 或者可以这么说。
  • 是可配置的,理想情况下是通过一个系统,该系统允许在不重新启动所述程序的情况下更新正在运行的程序中的配置属性。
  • 可以以可重复的方式部署到远程服务器。

  • 在 Scala 世界中,有很好的库可以处理至少前三个需求。例子:
  • Logula用于记录。
  • MetricsOstrich用于收集和报告指标。
  • ConfiggyFig用于配置。

  • 至于部署,Scala 世界采用的一种方法是将构成程序的字节码和库与 assembly-sbt 之类的东西捆绑在一起。 ,然后使用 Capistrano 之类的工具将生成的包(“胖 JAR”)推送到远程服务器通过 SSH 并行执行命令。这不是需要特定语言工具的问题,但我很好奇 Haskell 社区中是否存在这样的工具。

    可能有提供我上面描述的特征的 Haskell 库。我想知道哪些可用的库被认为是“最好的”;也就是说,它们是最成熟、维护良好、在 Haskell 社区中常用的,并且是 Haskell 最佳实践的典范。

    如果有任何其他库、工具或实践可以使 Haskell 代码“生产就绪”,我也很想知道这些。

    最佳答案

    这是一个很好的问题!这是第一个剪辑。

    Be able to log at multiple levels (ex: debug, warning, etc.).



    hslogger很容易成为最流行的日志框架。

    Be able to collect and share metrics/statistics about the types of work the program is doing and how long that work is taking. Ideally, the collected metrics are available in a format that's compatible with commonly-used monitoring tools like Ganglia, or can be so munged.



    但是,我不知道有任何标准化的报告工具,从 +RTS -s 中提取报告。流(或通过分析输出标志)是我过去做过的事情。
    $ ./A +RTS -s
    64,952 bytes allocated in the heap
    1 MB total memory in use
     %GC time       0.0%  (6.1% elapsed)
     Productivity 100.0% of total user, 0.0% of total elapsed
    

    您也可以以机器可读的格式获取它:
    $ ./A +RTS -t --machine-readable
    
     [("bytes allocated", "64952")
     ,("num_GCs", "1")
     ,("average_bytes_used", "43784")
     ,("max_bytes_used", "43784")
     ,("num_byte_usage_samples", "1")
     ,("peak_megabytes_allocated", "1")
     ,("init_cpu_seconds", "0.00")
     ,("init_wall_seconds", "0.00")
     ,("mutator_cpu_seconds", "0.00")
     ,("mutator_wall_seconds", "0.00")
     ,("GC_cpu_seconds", "0.00")
     ,("GC_wall_seconds", "0.00")
     ]
    

    理想情况下,您可以通过套接字连接到正在运行的 GHC 运行时,并以交互方式查看这些 GC 统计信息,但目前这并不容易(需要将 FFI 绑定(bind)到“rts/Stats.h”接口(interface))。您可以使用 ThreadScope 附加到进程。并监控 GC 和线程行为。

    类似的标志可用于增量记录 timespace profiling,可用于监控(例如,这些 graphs 可以增量构建)。

    hpc 通过其 Tix 收集大量有关程序执行的统计信息类型,人们有written tools按时间片记录正在执行的代码。

    Be configurable, ideally via a system that allows configured properties in running programs to be updated without restarting said programs.



    有几个工具可以做到这一点,你可以做 xmonad 风格的状态重载;或通过 plugins 升级到代码热交换* 包或 hint .其中一些比其他的更具实验性。

    Reproducible deployments



    伽罗瓦最近发布 cabal-dev ,这是一种用于进行可重现构建的工具(即依赖关系是范围和受控的)。

    关于logging - 哪些是运行程序的最佳 Haskell 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5808825/

    相关文章:

    haskell - 无法使用单个元素创建类型级列表

    java - 使用 yammer 指标计时器获得一分钟的速率

    java - logback不打印方法名称

    java - 重写 Camel 和 log4j

    haskell - 使用 GHC < 8.0 : "phase ` C pre-processor' failed"with "missing binary operator before token " ("" 的 Doctest

    haskell - 在 GHC 7.6 下工作的代码的歧义检查和自由覆盖条件失败

    mongodb - 批量读取 Mongo DB 的最佳方式 - 有这样的东西吗?

    c# - 如何测量 NDepend 中的 RFT 指标?

    javascript - 日志记录会要求单独的良好实践还是杂乱无章?

    python - 如何在matlab中进行日志记录: anything similar to logging like python