Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure.lang.ArityException:传递给客户端$batch的参数(3)数目错误_Clojure_Monitoring_Riemann - Fatal编程技术网

clojure.lang.ArityException:传递给客户端$batch的参数(3)数目错误

clojure.lang.ArityException:传递给客户端$batch的参数(3)数目错误,clojure,monitoring,riemann,Clojure,Monitoring,Riemann,我不熟悉Close,并尝试设置以监视服务器资源和应用程序事件。我有一个Riemann服务器设置,正在尝试添加一个Riemann客户端,它将事件转发到Riemann服务器 这是我的Riemann客户端配置文件: ; -*- mode: clojure; -*- ; vim: filetype=clojure (logging/init :file "/var/log/riemann/riemann.log") (require 'riemann.client) ; Listen on the

我不熟悉Close,并尝试设置以监视服务器资源和应用程序事件。我有一个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)
我将此配置文件(几乎是逐字逐句)从的第93页中删除。所以我很困惑我到底做错了什么。有人能帮我理解为什么这个配置文件抛出了错误数量的args错误吗


谢谢

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


你可以在

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

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


然后它说“批处理流将事件传递到我们的
异步队列中!
[…]”,但是调用
异步队列的结果
实际上是一个调用批处理的参数。

说清楚,你说的是将事件从一台riemann服务器转发到另一台riemann服务器,对吗?你的代码看起来不错,你使用的是哪种版本的riemann?@Arthurlfeldt说清楚,您正在谈论将事件从一个riemann服务器转发到另一个riemann服务器,对吗?是的,另一台服务器正在运行riemann并绑定到所有接口(0.0.0.0)。您的代码看起来不错,您使用的是哪一版本的riemann?rieman对示例中列出的函数求值以生成其他函数。这些返回的函数在整个文档中称为流。在您提到的段落中,他指的是通过在代码段中运行代码返回的函数的行为。当系统实际处理您的事件时,它将“做”什么。该代码spinet是正确的,并且有效。(前提是使用riemann版本,该版本定义了具有3-arity的
batch
函数)