我是Monit的新手,并试图了解它是否提供了一种处理PID未知的同名多个进程的方法.我理想的Monit行为是:
观察名为"x"的每个进程,并重新启动任何内存使用率超过X的进程
如果那是不可能的,我也会满足于:
观察名为"x"的每个进程,如果其中任何内存使用量超过X,则重新启动所有进程
我看到的大多数Monit示例都依赖于PID,或者只希望一个进程具有指定的名称.
我也对其他可能比Monit更适合的工具的建议感兴趣.
谢谢!
我正在使用Telegraf / InfluxDB / Grafana注册和查看服务器的指标。有时,这些组件之一崩溃并且指标停止流入InfluxDB。
为了能够注意到发生这种情况的时间(在使用Monit重新启动服务的基础上),我想创建一个Grafana仪表板,其中每个主机都有一个singlestat面板,该面板显示最近的时间戳(或者更好的是,有多少时间自最后一个指标以来)。我还想根据singlestat的背景着色。我希望能够对任何InfluxDB指标执行此操作,因为不同的指标可能有不同的滞后原因。
现在,我已经在InfluxQL中尝试了类似的方法,但是我得到一个错误,即查询中必须至少存在一个非时间字段:
SELECT last(time) FROM "system" WHERE "load1" > -1 GROUP BY "host"
如果尝试将其更改为此,则会收到“多个系列错误”:
SELECT last(time), last("load1") FROM "system" GROUP BY "host"
我想做的事不容易做到吗?还是我遗漏了一些明显的东西?
我在设置monitrc文件时遇到了困难。我使用Capistrano在Amazon EC2上设置Monit,并使用本教程作为指导:
http://railscasts.com/episodes/375-monit
set daemon 30
set logfile /home/deployer/apps/example/shared/log/monit.log
set idfile /var/lib/monit/id
set statefile /var/lib/monit/state
set eventqueue
basedir /var/lib/monit/events
slots 100
set mailserver email-smtp.us-east-1.amazonaws.com port 587
username "amazon_username" password "amazon_password"
using TLSV1
with timeout 30 seconds
set alert alerts@example.com
set httpd port 2812
allow admin: "admin_password"
check system example_server
if loadavg(5min) > 2 for 2 cycles then alert
if memory > 95% for 2 cycles then alert
if cpu(user) > 75% for 2 cycles then alert
include /etc/monit/conf.d/*
Run Code Online (Sandbox Code Playgroud)
查看我的日志,出现以下错误:
Sendmail错误:554邮件被拒绝:电子邮件地址未验证。 …
我正在尝试在我的 postgres 上使用 monit。我的monit配置文件是
使用pidfile /var/lib/postgresql/9.3/main/postmaster.pid 检查进程postgresql
start program = "/etc/init.d/postgresql start"
stop program = "/etc/init.d/postgresql stop"
如果失败 unixsocket /var/run/postgresql/.s.PGSQL.5432 协议 pgsql 然后
如果失败就重启主机本地主机端口 5432 协议 pgsql 然后重新启动,
如果 5 次在 5 个周期内重新启动,则超时`
当我跑cat /var/lib/postgresql/9.3/main/postmaster.pid。结果是
10271
/var/lib/postgresql/9.3/main
1418738148
5432
的/ var /运行/ PostgreSQL的
本地主机
5432001 720899
但是我的 monit 不会重新启动 postgres。我指的是http://mmonit.com/wiki/Monit/ConfigurationExamples#postgresql。
谁能告诉我我做错了什么?
解决方案是替换这一行:
check process apache with pidfile /var/run/httpd.pid
Run Code Online (Sandbox Code Playgroud)
有了这条线:
check process httpd with pidfile /var/run/httpd/httpd.pid
Run Code Online (Sandbox Code Playgroud)
我还删除了'组apache'.
原帖:
在CentOS上安装Monit并为Apache(httpd)服务设置警报后,该服务不再创建/var/run/httpd.pid文件.
httpd服务IS正常运行.
最重要的是,好像这还不够,Monit将服务状态报告为:执行失败
当然,重启这种服务的唯一方法就是杀死它,因为'restart'脚本看不到任何正在运行的进程.
这些是/etc/monit.d/monitrc文件的内容:
set daemon 10
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: me@server.com }
set alert bugs@server.com
set httpd port 2812 and
# SSL ENABLE
# PEMFILE /var/certs/monit.pem
allow user:password
check process apache with pidfile /var/run/httpd.pid
group apache
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if cpu is greater …Run Code Online (Sandbox Code Playgroud) 我使用monit来监控几个进程.这些过程包括乘客实例和我编写的守护进程,为乘客实例生成pidfiles.Monit将启动这些过程没有问题.它不会阻止他们.以下是守护进程的Monit配置:
check process passenger_monitor with pidfile <%= passenger_monitor_pid %>
group <%= application %>
start program = "/bin/su - rails_apps -c 'source /home/rails_apps/.rvm/scripts/rvm; /home/rails_apps/passenger_monitor.rb'"
stop program = "/bin/kill `/bin/cat <%= passenger_monitor_pid %>`"
Run Code Online (Sandbox Code Playgroud)
这是一个通过capistrano生成的erb模板.如果我通过终端以最小的环境以root身份运行stop命令,那么它可以工作,但当我请求Monit停止进程时,我收到以下错误:
[ADT Sep 17 10:38:31] error : 'passenger_monitor' failed to stop
Run Code Online (Sandbox Code Playgroud)
我已经尝试了我能想到的一切.我无法找到或生成stop命令输出的任何日志.
当我尝试使用monit的"检查程序"检查bash脚本的退出状态时,我收到语法错误.如果我手动运行bash脚本,则不会出错.但是如果我在配置中使用我的monit check程序进行monit reload,monit会给我错误.
这是我目前的monit .conf文件 -
check program myscript with path "/etc/monit.d/script_to_run.sh"
if status != 0 then alert
Run Code Online (Sandbox Code Playgroud)
如果我将其更改为此以确保monit使用bash来解析文件...
check program myscript with path "/usr/bash /etc/monit.d/script_to_run.sh"
if status != 0 then alert
Run Code Online (Sandbox Code Playgroud)
然后我得到这个错误
Warning: Program does not exist: '"/bin/bash /etc/monit.d/script_to_run.sh"'
Run Code Online (Sandbox Code Playgroud)
即使是测试脚本也会导致错误 - 如果我在script_to_run.sh中有这个:
#!/bin/bash
exit 0
Run Code Online (Sandbox Code Playgroud)
莫妮特会抱怨
Error: syntax error 'exit'
Run Code Online (Sandbox Code Playgroud)
如果我在script_to_run.sh中有这个:
#!/bin/bash
echo "hello"
Run Code Online (Sandbox Code Playgroud)
莫妮特会抱怨
Error: syntax error 'echo'
Run Code Online (Sandbox Code Playgroud)
作为参考 - 我有monit 5.4,已经按照man monit doc中的"check program"示例,并且能够在同一台服务器上配置/使用monit"check process ...".
我已经使用 monit 来监视和重新启动 Apache 和 MySQL 几个月了,一切都工作正常,直到今天,当服务器上的某些内容导致内存利用率超过 90% 时,MySQL 停止并 monit 然后尝试不断重新启动,但是有内存不足,无法重新启动。
完整的服务器重新启动对所有内容进行了排序,因此现在再次正常运行。
我的问题是,例如,当超过 90% 时,我可以让 monit 监控服务器 RAM 利用率并释放 RAM 或重新启动服务器等吗?
我已经尝试了几个小时来配置monit,以便可以从Web浏览器从http://:2812远程访问它,但是它总是超时。我的Nexus在http :: 8081的同一实例上运行,因此我知道基本的连接方式有效:我的monitrc包含
set httpd port 2812
# use address localhost # only accept connection from localhost
allow localhost # allow localhost to connect to the server and
allow admin:monit # require user 'admin' with password 'monit'
allow 50.67.165.130 # remote host
Run Code Online (Sandbox Code Playgroud)
我试图从哪里连接远程主机。还有其他一些特殊的魔术可以远程访问monit httpd吗?
奇怪的是,这必须如此艰巨。
我有经典的情况.需要在CentOS7上为memcached配置monit.问题是,我可以在谷歌找到的所有配置包含这一行:
check process memcached with pidfile /var/run/memcached/memcached.pid
Run Code Online (Sandbox Code Playgroud)
但是,/ var/run中没有memcached.pid文件,没有/ var/run/memcached文件夹.我检查了/usr/lib/systemd/system/memcached.service
[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/memcached
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS
Run Code Online (Sandbox Code Playgroud)
因此,没有.pid文件的路径.问题是我可以在没有.pid文件的情况下检查memcached吗?第二个问题 - 可以将此.pid文件放在另一个位置吗?
monit ×10
amazon-ec2 ×1
amazon-ses ×1
apache ×1
capistrano ×1
centos7 ×1
grafana ×1
influxdb ×1
memcached ×1
memory ×1
monitoring ×1
passenger ×1
pid ×1
postgresql ×1
restart ×1
telegraf ×1