Monit 无法连接到 Solr/Jetty 实例

Monit 无法连接到 Solr/Jetty 实例

我的 Solr/Jetty 在 Ubuntu 12.04 上正常运行。我试图连接我的monitconf 来监控它,但它无法连接到服务。

我在端口上运行了 Solr ,8983并且可以通过 进行连接,但无法在我的 monit conf 文件中http://localhost:8983/solr/通过localhost127.0.0.1或进行连接。0.0.0.0

监控配置文件:

check process solr with pidfile "/var/run/jetty.pid"
start program = "/usr/sbin/service jetty start"
stop program = "/usr/sbin/service jetty stop"
    if failed host 127.0.0.1 port 8983 protocol http then restart
    if totalmem is greater than 7268 MB for 10 cycles then restart
    if 5 restarts within 5 cycles then timeout

网络状态:

root@ip-10-110-37-29:~# netstat -lnp | grep 8983
tcp        0      0 0.0.0.0:8983            0.0.0.0:*               LISTEN      16033/java

我尝试了不同的if failed行排列,但在我的日志中总是出现以下监控错误:

'solr' failed, cannot open a connection to INET[localhost:8983] via TCP

我在这里做错了什么?

答案1

我认为问题在于,较新的 Solr Web 界面使用了大量 Javascript 和其他重定向,这可能是基本monithttp 检查器无法处理的。事实证明http://localhost:8983/admin/ping,在我的多核设置中,有一个专门的页面,http://localhost:8983/solr/<MY_COLLECTION_NAME>/admin/ping

Jetty 的启动延迟也存在问题。我使用 monit 启动了 Jetty,它在 Jetty 启动并能够响应之前就立即检查并重新启动。由于我的周期时间很短(10),Jetty 停止程序命令在 Jetty 启动之前就运行了!

因此,我通过在安装 monit 脚本之前自行启动 jetty 服务器来解决这个问题,然后调整 monit 脚本以在 http 连接失败时减少重新启动的频率:

check process solr with pidfile "/var/run/jetty.pid"
start program = "/usr/sbin/service jetty start"
stop program = "/usr/sbin/service jetty stop"
    if failed host localhost port 8983 protocol http and request "/solr/<MY_COLLECTION_NAME>/admin/ping" for 3 cycles then restart
    if totalmem is greater than 1024 MB for 15 cycles then restart
    if 5 restarts within 15 cycles then timeout

相关内容