Install RabbitMQ on RHEL/CentOS
- Install Erlang (the RabbitMQ runtime)
- Install RabbitMQ
- Managing the RabbitMQ service/process
- Configure RabbitMQ access controls
- Configure system limits on Linux
- Configure Sensu
NOTE: Sensu Support is available for RabbitMQ versions 3.6.4 and newer (on Erlang version 19.3 or newer).
Install Erlang (the RabbitMQ runtime)
RabbitMQ runs on the Erlang runtime, so before you can install and run RabbitMQ, you’ll need to install Erlang.
Although Erlang runtime packages are included in the RPM repositories for most distributions, the included versions often lag behind what is supported by RabbitMQ releases. Per the RabbitMQ Erlang version requirements documentation:
Erlang/OTP versions older than 19.3 are not supported by currently maintained RabbitMQ release series.
As a result, you will probably get better results installing a newer version of Erlang from an alternative source. Please see the Erlang version requirements documentation for information on selecting and installing a compatible version of the Erlang runtime.
Install RabbitMQ
Although RabbitMQ packages are included in the RPM-based distribution repositories, the included versions often lag behind the supported RabbitMQ release series.
Please see the official RabbitMQ installation guide for recommended installation strategies.
Managing the RabbitMQ service/process
-
Install the RabbitMQ init scripts using the
chkconfig
utility:sudo chkconfig rabbitmq-server on
-
Start and stop the RabbitMQ service using the installed init scripts: NOTE: The
service
command will not work on CentOS 5, the sysvinit script must be used, e.g.sudo /etc/init.d/rabbitmq-server start
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, please edit the configuration file found at
/etc/defaults/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
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" } }