Install RabbitMQ on Ubuntu/Debian
- Install RabbitMQ
- Managing the RabbitMQ service/process
- Configure RabbitMQ access controls
- Configure system limits on Linux
- Configure Sensu
Install RabbitMQ
Although RabbitMQ packages are included in the distribution repositories, the included versions often lag behind the supported RabbitMQ release series.
Please see the official RabbitMQ installation guide for recommended installation strategies.
NOTE: It’s expected that if you install the rabbitmq-server
package from the repository listed in the source above, that the requisite packages for Erlang will also be installed.
Managing the RabbitMQ service/process
-
To enable the RabbitMQ service, you’ll need to install its init scripts using the
update-rc.d
utility (if you are using Ubuntu 16.04+ you will need to usesystemctl
instead):sudo update-rc.d rabbitmq-server enable
-
Start and stop the RabbitMQ service using the
service
command:sudo service rabbitmq-server start sudo service rabbitmq-server stop
Configure RabbitMQ access controls
Access to RabbitMQ is restricted by access controls (e.g. username and
password). For Sensu services to connect to RabbitMQ a RabbitMQ virtual host
(vhost
) and user credentials will need to be created.
Create a dedicated RabbitMQ vhost
for Sensu
sudo rabbitmqctl add_vhost /sensu
Create a RabbitMQ user for Sensu
sudo rabbitmqctl add_user sensu secret
sudo rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"
Configure system limits on Linux
By default, most Linux operating systems will limit the maximum number of file
handles a single process is allowed to have open to 1024
. RabbitMQ recommends
adjusting this number to 65536
for production systems, and at least 4096
for
development environments.
RabbitMQ installations running production workloads may need system limits and kernel parameters tuning in order to handle a decent number of concurrent connections and queues. The main setting that needs adjustment is the max number of open files, also known as
ulimit -n
. The default value on many operating systems is too low for a messaging broker (eg. 1024 on several Linux distributions). We recommend allowing for at least 65536 file descriptors for userrabbitmq
in production environments. 4096 should be sufficient for most development workloads.There are two limits in play: the maximum number of open files the OS kernel allows (
fs.file-max
) and the per-user limit (ulimit -n
). The former must be higher than the latter.
Source: rabbitmq.com
To adjust this limit first check if you are booted with systemd. Run:
systemctl is-system-running
If it complains that the command is not found or the output is not “running”, then please edit the configuration file found at /etc/default/rabbitmq-server
by uncommenting the last line in the file, and adjusting the ulimit value to the recommendation corresponding to the environment where RabbitMQ is running.
# This file is sourced by the rabbitmq-server service script. Its primary
# reason for existing is to allow adjustment of system limits for the
# rabbitmq-server process.
#
# Maximum number of open file handles. This will need to be increased
# to handle many simultaneous connections. Refer to the system
# documentation for ulimit (in man bash) for more information.
#
ulimit -n 65536
else run:
systemctl edit rabbitmq-server
and edit the (empty) file by inputting the following and then saving:
[Service]
LimitNOFILE=65535
Finally, to pick up the changes, run:
systemctl daemon-reload
Verifying the Limit
To verify that the RabbitMQ open file handle limit has been increase, please run:
rabbitmqctl status
Configure Sensu
The following Sensu configuration files are provided as examples. Please review the RabbitMQ reference documentation for additional information on configuring Sensu to communicate with RabbitMQ, and the reference documentation on Sensu configuration for more information on how Sensu loads configuration.
Example Standalone Configuration
- Copy the following contents to a configuration file located at
/etc/sensu/conf.d/rabbitmq.json
:{ "rabbitmq": { "host": "127.0.0.1", "port": 5672, "vhost": "/sensu", "user": "sensu", "password": "secret" } }
Example Distributed Configuration
-
Obtain the IP address of the system where RabbitMQ is installed. For the purpose of this example, we will assume
10.0.1.6
is our IP address. -
Create a configuration file with the following contents at
/etc/sensu/conf.d/rabbitmq.json
on the Sensu server and API system(s), and all systems running the Sensu client:{ "rabbitmq": { "host": "10.0.1.6", "port": 5672, "vhost": "/sensu", "user": "sensu", "password": "secret" } }