Ale*_*yne 115 logging metrics haskell
如果我要将一个程序投入生产,我需要该程序做几件事,以便将其视为"操作化" - 即,工程师和操作人员以可测量和可验证的方式运行和维护.就我的目的而言,一个可操作的计划必须:
在Scala世界中,有很好的库可以处理至少前三个要求.例子:
至于部署,Scala世界采用的一种方法是将字节码和包含一个程序的库捆绑在一起,例如assembly-sbt,然后使用像Capistrano这样的工具将生成的包("胖JAR")推送到远程服务器通过SSH并行执行命令.这不是一个需要特定语言工具的问题,但我很好奇Haskell社区中是否存在这样的工具.
可能有Haskell库提供了我上面描述的特征.我想知道哪些库可以被认为是"最好的"; 也就是说,它是最成熟,维护良好的,常用于Haskell社区,是Haskell最佳实践的典范.
如果有任何其他库,工具或实践使Haskell代码"生产就绪",我也很想知道这些.
Don*_*art 54
这是一个很好的问题!这是第一次切割.
能够记录多个级别(例如:调试,警告等).
hslogger很容易成为最流行的日志框架.
能够收集和分享有关该计划正在进行的工作类型以及该工作需要多长时间的指标/统计数据.理想情况下,收集的指标可以采用与Ganglia等常用监控工具兼容的格式,也可以如此使用.
我不知道任何标准化的报告工具,但是,从+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
Run Code Online (Sandbox Code Playgroud)
您也可以使用机器可读的格式:
$ ./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")
]
Run Code Online (Sandbox Code Playgroud)
理想情况下,您可以通过套接字连接到正在运行的GHC运行时,并以交互方式查看这些GC统计信息,但目前这不是非常简单(需要与"rts/Stats.h"接口的FFI绑定).您可以使用ThreadScope和监视GC和线程行为来附加到进程.
类似的标志可用于增量,记录的时间和空间分析,可用于监视(例如,可以逐步构建这些图形).
hpc通过Tix类型收集大量关于程序执行的统计信息,人们已经编写了工具来按时间片记录正在执行的代码.
可配置,理想情况下通过允许更新正在运行的程序中的已配置属性而无需重新启动所述程序的系统.
有几个工具可用于此,你可以做xmonad式的状态重装; 或者通过plugins*packages或者向上移动代码hotswapping hint.其中一些比其他更具实验性.
可重复的部署
Galois最近发布了cabal-dev,这是一个用于进行可重现构建的工具(即依赖关系是作用域和控制的).
我会回应Don所说的一切,并添加一些一般建议.
例如,您可能需要考虑两个额外的工具和库:
-Wall这些都是针对代码质量的.
作为编码实践,请避免使用Lazy IO.如果您需要流式IO,请使用其中一个iteratee库,例如枚举器.如果您查看Hackage,您将看到像http-enumerator这样的库,它们使用enumerator样式来处理http请求.
至于在hackage上挑选库,有时可以帮助查看有多少包依赖于某些东西.轻松查看可以使用此网站的软件包的反向依赖关系,这反映了hackage:
如果您的应用程序最终执行紧密循环,例如处理许多请求的Web服务器,则懒惰可能是空间泄漏形式的问题.通常这是在正确的地方添加严格注释的问题.分析,经验和阅读核心是我所知道的打击这类事情的主要技巧.最好的剖析参考我所知道的是第25章的真实世界哈斯克尔.
ConfigFile示例:
# Default options
[DEFAULT]
hostname: localhost
# Options for the first file
[file1]
location: /usr/local
user: Fred
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6690 次 |
| 最近记录: |