问题/TLDR;
是否有 Sensu 替代方案(即基于 RabbitMQ 的操作系统监控代理/服务器)在中央监控服务器上而不是在受监控的客户端服务器(如 Sensu 和 Nagios 所做的)上定义其警报阈值?
RabbitMQ 是必需的,所以恐怕没有 Zabbix 等。
背景:
我有一个大型环境(Windows 和 RHEL),我无法安装编排工具(Puppet 等),因此应将安装的服务数量保持在最低限度。
我正在研究是否可以开发一个单一的代理来收集系统信息、中继日志(到 Logstash)并报告资源消耗。它将所有这些值推送到 RabbitMQ,然后 Logstash 可以订阅日志,监控服务可以订阅资源指标(并从中创建警报),CMDB 系统可以订阅系统信息等。
但是,我只想接收有关资源消耗的信息并在监控服务器上创建警报,而不必更改每个服务器上的阈值来更改警报阈值。
我不可能是唯一一个找到这么有用的代理的人......
澄清:
如果Sensu 监控下的服务器磁盘不足,Sensu 代理会检查磁盘空间,将其与该服务器上定义的 CRITICAL 阈值进行比较,如果超过阈值,则通过 RabbitMQ 向中央监控服务器发送 CRITICAL 警报. 要在没有 Puppet 之类的情况下更改阈值,需要登录到服务器(对吗?)
我希望这样做的方式是,当监控代理检查其磁盘空间时,它只是通过 RabbitMQ 将可用磁盘量(或已用磁盘和总数等)发送到中央服务器,然后将该值与阈值进行比较在中央服务器上定义,并在必要时发送警报。
如果需要更改阈值,可以在中央服务器上更改它,或者可以比较来自多个服务器的多个值以创建警报。
这是我对 Sensu 的主要问题,尽管我理解与 Nagios 兼容的决定。
如果不需要中央服务器 -> 监控服务器流量,那也是可取的。我想可以在中央服务器将阈值发送给代理的地方进行混搭,然后代理将它们作为“本地”运行。环境网络使这变得异常棘手。
感谢任何人可能有的任何想法!
我可以使用 rabbitmqctl 获得消费者数量,如下所示:
# rabbitmqctl list_queues name consumers | grep q-firewall-plugin
q-firewall-plugin 2
Run Code Online (Sandbox Code Playgroud)
但是当使用 API url 时:
/api/queues/%2F/q-firewall-plugin
Run Code Online (Sandbox Code Playgroud)
它回应:
{
"consumer_details":[],
"name":"q-firewall plugin",
"vhost":"/",
"durable":true,
"auto_delete":false,
"arguments":{"x-ha-policy":"all"},
"node":"rabbit@infra-rabbitmq-2"
}
Run Code Online (Sandbox Code Playgroud)
我期待在consumer_details. 我究竟做错了什么 ?
当队列长度超过阈值时,Celery 有没有办法发出事件?我想使用该事件来启动 EC2 实例。
我们有两个队列用于 Celery 中的两个不同任务。这些队列之一具有需要在自动缩放组中启动实例的任务。在处理一种任务的第一个自动缩放组中,我们总是有一个实例在运行。然后可以轻松地使用 Amazon CloudWatch 启动另一个实例。但是对于另一个自动缩放组,如果没有任务,我们不希望它有任何实例,因为很多时候该组可能没有要执行的任务。因此,只有当此任务的 Celery 队列长度超过给定阈值时,我们才希望在此自动缩放组中启动一个实例。这样做的好方法是什么?
该环境由两个 2012R2 虚拟机组成,它们在其队列上以高可用性(ha-all)运行 RabbitMQ。我使用 Veeam 创建作为 DR 策略一部分发送到异地的快照备份。
我看到的是 Veeam 备份发生时集群的间歇性故障。当集群中断时,它会导致 Mnesia 事件被记录或有时会导致一个节点完全关闭自身。我认为问题在于 Veeam 如何对 VM 进行闪烁,在这种情况下,它基本上会暂停 VM 片刻,然后继续运行。当此 blip 发生时,两个节点都会看到另一个消失,并且辅助节点立即将自己提升为主节点。两个主人一看到对方就跑(字面意思是几秒钟后),他们撞头,集群破裂。
我在net_ticktime 此处阅读并实施了 300 秒,认为这将有助于使集群对短暂的 Veeam 光点更具弹性,但它似乎没有帮助。当一个节点看到另一个消失时,辅助节点立即将自己提升为主节点,并且似乎不使用该net_ticktime设置。
Mnesia 错误示例:
Mnesia('rabbit@Node01'): ** ERROR ** mnesia_event got {inconsistent_database, running_partitioned_network, 'rabbit@Node02'}
Run Code Online (Sandbox Code Playgroud)
有没有其他人经历过这种情况或类似的事情?RabbitMQ 或 Erlang 是否有额外的配置设置可能有助于使集群对节点之间的连接丢失的小点具有更强的弹性?
为了在 AWS 环境中对 rabbitmq 进行集群,我尝试了所有可以想到的组合。但回顾一下:
主机名不匹配是唯一的难题。节点本身认为它的主机名分别是“q1”或“q2”。当我尝试将容器的主机名设置为主机的私有 dns 名称(以便它可以连接到另一个节点)时,容器中的兔子实例崩溃了。不低于如何hostname产生q2但我炮击了亚马逊私人 dns?
root@q2:~# hostname
q2
root@q2:~# exit
christian@q2:~$ logout
Connection to ip-10-0-3-101.us-west-2.compute.internal closed.
Run Code Online (Sandbox Code Playgroud)
我正在使用最新的rabbitmq docker 镜像。
docker run -d --restart always --hostname q1 --name rabbitmq -p 4369:4369 -p 15671:15671 -p 25672:25672 -p 15672:15672 -p 5672:5672 -e RABBITMQ_HIPE_COMPILE=1 -e RABBITMQ_ERLANG_COOKIE='ilikecookies' rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)
服务启动就好了
root@q1:~# curl -I localhost:15672
HTTP/1.1 200 OK
Content-Length: 1419
Content-Type: …Run Code Online (Sandbox Code Playgroud) 在 RabbitMQ 3.5.7 Ubuntu 16.04 上。
我只想在本地主机上实现 RabbitMq 管理插件,这个想法是使用隧道从我用来使用 SSH 连接到我的服务器的计算机到达 RabbitMq 管理 Web GUI。
我发现这个线程似乎记录了所有要做的事情。
这是我所做的:我编辑了/etc/rabbitmq/rabbitmq-env.conf,它看起来像这样:
export RABBITMQ_CONFIG_FILE="/etc/rabbitmq/rabbitmq.config"
# Defaults to rabbit. This can be useful if you want to run more than one node
# per machine - RABBITMQ_NODENAME should be unique per erlang-node-and-machine
# combination. See the clustering on a single machine guide for details:
# http://www.rabbitmq.com/clustering.html#single-machine
#NODENAME=rabbit
# By default RabbitMQ will bind to all interfaces, on IPv4 and IPv6 if
# available. Set …Run Code Online (Sandbox Code Playgroud) 当我通过以下命令在突触中安装 rabbitMQ 时
sudo apt-get install rabbitmq-server
Run Code Online (Sandbox Code Playgroud)
它返回一个错误:
Starting rabbitmq-server: FAILED - check /var/log/rabbitmq/startup_log, _err
rabbitmq-server.
invoke-rc.d: initscript rabbitmq-server, action "start" failed.
dpkg: error processing rabbitmq-server (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
rabbitmq-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)
转到日志,它说以下内容:
Error: {cannot_connect_to_epmd,"herman-desktop",address}
Run Code Online (Sandbox Code Playgroud)
而我/etc/hosts的定义如下:
127.0.0.1 localhost.localdomain localhost
::1 herman-desktop localhost6.localdomain6 localhost6
127.0.1.1 herman-desktop
Run Code Online (Sandbox Code Playgroud)
我需要做什么来解决这个问题?
我尝试使用以下命令启动rabbitmq:
/etc/init.d/rabbitmq-server start
Run Code Online (Sandbox Code Playgroud)
然后我得到
Starting rabbitmq-server: TIMEOUT - check /var/log/rabbitmq/startup_{log,err}
rabbitmq-server.
Run Code Online (Sandbox Code Playgroud)
我检查了 startup_log 和 startup_err 但它们没有显示任何内容。有什么建议?
我有一个需要连接到 AD 的 rabbitmq 服务器。
配置是使用 puppet rabbitmq 模块设置的,有一些小的手动更改(日志级别):
% This file managed by Puppet
% Template Path: rabbitmq/templates/rabbitmq.config
[
{rabbit, [
{auth_backends, [rabbit_auth_backend_internal, rabbit_auth_backend_ldap]},
{tcp_listen_options,
[binary,
{packet, raw},
{reuseaddr, true},
{backlog, 128},
{nodelay, true},
{exit_on_close, false}]
},
{default_user, <<"guest">>},
{default_pass, <<"guest">>}
]},
{kernel, [
]}
,
{rabbitmq_management, [
{listener, [
{port, 15672}
]}
]}
,
% Configure the LDAP authentication plugin
{rabbitmq_auth_backend_ldap, [
{other_bind, anon},
{servers, ["ldap"]},
{user_dn_pattern, "CN=Rabbitmq LDAP User,OU=Service Accounts,DC=very,DC=chill,DC=domain"},
{use_ssl, false},
{port, 389},
{log, network}
]} …Run Code Online (Sandbox Code Playgroud) 我有一个向 RabbitMQ 发送消息的 API。
我在 HAProxy 后面有一个高可用性 RabbitMQ 集群。
当我对 API 进行负载测试时,我开始看到很多这样的内容:
Recovering from a network failure...
Exception in the reader loop: AMQ::Protocol::EmptyResponseError: Empty response received from the server.
在我的独角兽日志中。
如果我通过 haproxy 直接连接到 RabbitMQ,我不会。我哪里出错了,我的 haproxy 配置如下所示:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#debug
#quiet
user haproxy
group haproxy
defaults
log global
mode http
retries 3
timeout client 50s
timeout connect 10s
timeout server 50s
option dontlognull
option forwardfor
option httplog
option redispatch …Run Code Online (Sandbox Code Playgroud) rabbitmq ×10
ubuntu ×2
amazon-ec2 ×1
autoscaling ×1
celery ×1
debian ×1
docker ×1
erlang ×1
haproxy ×1
installation ×1
ldap ×1
load-testing ×1
monitoring ×1
openldap ×1
ubuntu-14.04 ×1
ubuntu-16.04 ×1
veeam ×1