Login Logout

HowtoRabbitMQ

Howto RabbitMQ

RabbitMQ est un système de gestion de file d’attentes. Il est écrit en Erlang et implémente le protocole AMQP (Advanced Message Queuing Protocol). Il est notamment utile pour gérer des tâches asynchrones.

Installation

# apt install rabbitmq-server
# rabbitmqctl status

 {running_applications,[{rabbit,"RabbitMQ","3.3.5"},
                        {mnesia,"MNESIA  CXC 138 12","4.12.3"},
                        {os_mon,"CPO  CXC 138 46","2.3"},
                        {xmerl,"XML parser","1.3.7"},
                        {sasl,"SASL  CXC 138 11","2.4.1"},
                        {stdlib,"ERTS  CXC 138 10","2.2"},
                        {kernel,"ERTS  CXC 138 10","3.0.3"}]},
 {os,{unix,linux}},
 {erlang_version,"Erlang/OTP 17 [erts-6.2] [source] [64-bit] [smp:4:4] [async-threads:30] [kernel-poll:true]\n"},

Configuration

La configuration par défaut de RabbitMQ est souvent utilisable en l’état, sans besoin de modification.

Si l’on doit modifier la configuration, voici les fichiers :

  • /etc/rabbitmq/rabbitmq-env.conf : variables d’environnement pour RabbitMQ
  • /etc/rabbitmq/rabbitmq.config : options pour RabbitMQ
  • /etc/default/rabbitmq-server : configuration système (ulimit)

Variables d’environnement pour RabbitMQ

Il faut donc créer le fichier :

# touch /etc/rabbitmq/rabbitmq-env.conf
# chmod 600 /etc/rabbitmq/rabbitmq-env.conf
# chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq-env.conf

Différentes variables RABBITMQ_* sont utilisables :

RABBITMQ_NODE_PORT=672
RABBITMQ_SERVER_ERL_ARGS="+K true +A30 +P 1048576 -kernel inet_default_connect_options [{nodelay,true}]"

Options pour rabbitmq.config

Il faut donc créer le fichier :

# touch /etc/rabbitmq/rabbitmq.config
# chmod 600 /etc/rabbitmq/rabbitmq.config
# chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.config

Différentes options sont utilisables (voir /usr/share/doc/rabbitmq-server/rabbitmq.config.example.gz pour un exemple).

Si l’on veut que RabbitMQ n’écoute que sur l’interface localhost :

[
  {rabbit, [
    {tcp_listeners, [{"127.0.0.1", 5672},
                     {"::1",       5672}]}
  ]}
].

Configuration système

/etc/default/rabbitmq-server :

ulimit -n 2048

Management RabbitMQ

rabbitmqctl

# rabbitmqctl status
# rabbitmqctl list_connections
# rabbitmqctl list_queues

Activation de l’interface web de management

Pour activer l’interface web de management :

# rabbitmq-plugins enable rabbitmq_management
# chown rabbitmq:rabbitmq /etc/rabbitmq/enabled_plugins
# systemctl restart rabbitmq-server
# rabbitmqctl add_user admin PASSWORD
# rabbitmqctl set_user_tags admin administrator

On a ainsi accès à l’interface web via http://127.0.0.1:15672/

On peut aussi mettre en place un proxy via Nginx :

location /rabbitmq/ {
    proxy_pass http://127.0.0.1:15672/;
    include proxy_params;
}                                       

Activation CLI

https://www.rabbitmq.com/management-cli.html

On peut installer un binaire permettant d’avoir un mode CLI pour RabbitMQ :

$ wget localhost:15672/cli/rabbitmqadmin > rabbitmqadmin
$ chmod +x rabbitmqadmin

avec ~/.rabbitmqadmin.conf :

[default]
username = admin
password = PASSWORD

On a ainsi des commandes disponibles :

$ rabbitmqadmin list users
$ rabbitmqadmin list queues
$ rabbitmqadmin help subcommands

Sauvegarde

À l’aide du CLI :

$ rabbitmqadmin export rabbitmq.dump
Exported definitions for localhost to "rabbitmq.dump"

Munin

On utilise rabbitmq_connections (merci ask) :

$ wget https://raw.githubusercontent.com/ask/rabbitmq-munin/master/rabbitmq_connections
$ chmod +x rabbitmq_connections
$ ./rabbitmq_connections

Attention, rabbitmq_connections utilise la commande rabbitmqctl vous devez donc adapter le script ou configurer /etc/munin/plugin-conf.d/munin-node ainsi :

[rabbitmq_connections]
user rabbitmq
EOT

Nagios

On utilise check_rabbitmq (merci CaptPhunkosis) :

# apt install python-requests
$ wget https://raw.githubusercontent.com/CaptPhunkosis/check_rabbitmq/master/check_rabbitmq
$ chmod +x check_rabbitmq
$ ./check_rabbitmq -a connection_count -C 100 -W 80

Attention, check_rabbitmq utilise la commande sudo rabbitmqctl vous devez donc adapter le script ou configurer sudo.

nagios ALL = (rabbitmq) NOPASSWD: /usr/sbin/rabbitmqctl list_connections
nagios ALL = (rabbitmq) NOPASSWD: /usr/sbin/rabbitmqctl list_queues
nagios ALL = (rabbitmq) NOPASSWD: /usr/sbin/rabbitmqctl list_status