【问题标题】:clojure.lang.ArityException: Wrong number of args (3) passed to: client$batchclojure.lang.ArityException:错误数量的 args (3) 传递给:client$batch
【发布时间】:2016-09-14 01:13:33
【问题描述】:

我不熟悉关闭并尝试设置 Riemann 来监控服务器资源和应用程序事件。我有一个 Riemann 服务器设置,并正在尝试添加一个 Riemann 客户端,它将事件转发到 Riemann 服务器。

这是我的黎曼客户端配置文件:

; -*- mode: clojure; -*-
; vim: filetype=clojure

(logging/init :file "/var/log/riemann/riemann.log")

(require 'riemann.client)

; Listen on the local interface over TCP (5555), UDP (5555), and websockets (5556)
(let [host "0.0.0.0"]
  (tcp-server :host host)
  (udp-server :host host)
  (ws-server  :host host))

; Expire old events from the index.
(periodically-expire 10 {:keep-keys [:host, :service, :tags, :state, :description, :metric]})

(let [index (index)
      downstream (batch 100 1/10
        (async-queue! :agg { :queue-size 1e3
                             :core-pool-size 4
                             :max-pool-size 32}
      (forward
        (riemann.client/tcp-client :host "10.11.5.10"))))]

  (streams ; Inbound events will be passed to these streams:
    (default :ttl 60 ; Keep events in the index for 1 minute by default.
      index
      #(info %)
      (where (service #"^riemann.*") ; Send any events with service starting with riemann downstream
        downstream))))

每次我尝试启动 Riemann 时,都会在日志中打印以下异常:

ERROR [2016-05-17 14:58:58,118] main - riemann.bin - Couldn't start
clojure.lang.ArityException: Wrong number of args (3) passed to: client$batch
  at clojure.lang.AFn.throwArity(AFn.java:437)
  at clojure.lang.AFn.invoke(AFn.java:47)
  at riemann.config$eval36.invoke(riemann.config:23)
  at clojure.lang.Compiler.eval(Compiler.java:6619)
  at clojure.lang.Compiler.load(Compiler.java:7064)
  at clojure.lang.Compiler.loadFile(Compiler.java:7020)
  at clojure.lang.RT$3.invoke(RT.java:318)
  at riemann.config$include.invoke(config.clj:285)
  at riemann.bin$_main.doInvoke(bin.clj:61)
  at clojure.lang.RestFn.applyTo(RestFn.java:137)
  at riemann.bin.main(Unknown Source)

我从 pg 中提取了这个配置文件(几乎是逐字记录)。 The Art of Monitoring by James Turnbull 中的 93 个。所以我很困惑我可能做错了什么。有人可以帮我理解为什么这个配置文件会抛出错误数量的 args 错误吗?

谢谢

【问题讨论】:

  • 澄清一下,您说的是从一台 riemann 服务器转发事件到另一台 riemann 服务器,对吧?
  • 你的代码看起来不错,你用的是什么版本的 riemann?
  • @ArthurUlfeldt 为了清楚起见,您说的是从一个 riemann 服务器到另一个 riemann 服务器的转发事件,对吗? 是的,另一台服务器正在运行 riemann 并绑定到所有接口 (0.0.0.0) 你的代码看起来不错,你用的是什么版本的 riemann? aphyr.com/riemann/riemann-0.2.4-1.noarch.rpm

标签: clojure monitoring riemann


【解决方案1】:

我知道你得到了你的答案,但在我看来,这本书的作者在这本书上对 Clojure 有一些错误,也许这并不奇怪,因为这是本书的 v0.0.1 版本。

您使用的代码的解释是“我们的绑定定义了一个名为downstream 的符号。这个符号的值是一系列流。我们的第一个流称为batch。”但是从代码中可以清楚地看出batch应该是sn-p中调用的函数(或宏)的名称。

然后它说“批处理流将事件传递到我们的async-queue! [...]”但调用async-queue! 的结果实际上是调用batch 的参数。

【讨论】:

  • rieman 评估示例中列出的函数以生成其他函数。这些返回的函数在整个文档中称为流。在您提到的段落中,他指的是通过运行 sn-p 中的代码返回的函数的行为。系统在实际处理您的事件时会“做什么”。该代码spinet是正确的并且有效。 (前提是您使用定义了batch 3-arity 函数的riemann 版本)
【解决方案2】:

您安装的 Riemann 版本很古老,您需要 0.2.11+ 才能按照该指南玩得开心。

您可以在http://riemann.io 获取 rpm

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多