【问题标题】:Monit not working with Redis监视不与 Redis 一起使用
【发布时间】:2015-08-19 15:15:08
【问题描述】:

我正在配置Monit 来监控Redis 和Redis Sentinel。但是每次运行 Monit 时,它都会记录 Redis 和 Redis Sentinel 都没有运行并尝试运行它们,尽管它们都已经完成了。它无法启动 Redis 进程。

虽然它在系统检查和 nginx 以及其他一些进程中运行良好。

版本:

Redis: Redis server v=2.8.4 sha=00000000:0 malloc=jemalloc-3.4.1 bits=64 build=a44a05d76f06a5d9
Monit: version 5.6

这是我对 Redis 的 Monit 配置(Redis Sentinel 的配置几乎相同):

# redis
check process redis with pidfile /var/run/redis-server.pid
  group cache
  group redis
  start program = "/etc/init.d/redis-server start"
  stop program  = "/etc/init.d/redis-server stop"
  if failed host 127.0.0.1 port 6379 then restart
  if totalmem > 500 Mb then alert
  if cpu > 60% for 2 cycles then alert
  if cpu > 98% for 5 cycles then restart
  if 2 restarts within 2 cycles then alert
  depend redis_bin
  depend redis_rc

check file redis_bin with path /usr/bin/redis-server
  group redis
  include /etc/monit/templates/rootbin

check file redis_rc with path /etc/init.d/redis-server
  group redis
  include /etc/monit/templates/rootbin

这里是Monit的日志:

[PKT Aug 19 17:00:07] error    : 'redis' process is not running
[PKT Aug 19 17:00:07] info     : 'redis' trying to restart
[PKT Aug 19 17:00:07] info     : 'redis' start: /etc/init.d/redis-server
[PKT Aug 19 17:00:37] error    : 'redis' failed to start

我认为这个问题的原因是其他运行良好的进程以及所有目录和 bin 文件都归 root 所有。但是与 Redis 相关的所有内容都归“redis”组中的用户“redis”所有。这就是为什么 Monit 无法启动或停止 Redis。

但我尝试通过在启动和停止设置中添加用户来使用它:

start program = "/etc/init.d/redis-server start"
  as uid redis and gid redis
stop program  = "/etc/init.d/redis-server stop"
  as uid redis and gid redis

但这也没有用。

我在这里做错了什么?用 Monit 监控 Redis 的正确方法是什么?

【问题讨论】:

    标签: redis monit


    【解决方案1】:

    我进行了一些更改,以确保 Monit 有权启动/停止服务,并确保我拥有正确的 PID 文件,Monit 在重新启动服务后会检查该文件。就我而言,这是配置:

    # redis
    check process redis with pidfile /var/run/redis/redis-server.pid
      group cache
      group redis
      start program = "/usr/sbin/service redis-server start" with timeout 60 seconds
      stop program  = "/usr/sbin/service redis-server stop" with timeout 60 seconds
      if failed host 127.0.0.1 port 6379 then restart
      if totalmem > 500 Mb then alert
      if cpu > 60% for 2 cycles then alert
      if cpu > 98% for 5 cycles then restart
      if 2 restarts within 2 cycles then alert
      depend redis_bin
      depend redis_rc
    
    check file redis_bin with path /usr/bin/redis-server
      group redis
      include /etc/monit/templates/rootbin
    
    check file redis_rc with path /etc/init.d/redis-server
      group redis
      include /etc/monit/templates/rootbin
    
    • 生成的PID文件路径在我的机器上不一样,建议你确定是你这边的正确路径。
    • 我给了启动/停止操作 60 秒而不是默认的 30 秒
    • 附注:我使用了/usr/sbin/service redis-server 而不是/etc/init.d/redis-server,但这不应该有什么不同,我尝试了它们,它们都可以工作。

    Monit 允许在超时之前,只是为了确保它有足够的时间作为服务响应。

    输出是:

    [EST Nov 30 16:25:22] error    : 'redis' process is not running
    [EST Nov 30 16:25:22] info     : 'redis' trying to restart
    [EST Nov 30 16:25:22] info     : 'redis' start: /usr/sbin/service
    [EST Nov 30 16:27:22] info     : 'redis' process is running with pid 24864
    

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 2016-07-09
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      相关资源
      最近更新 更多