# Howto RabbitMQ * Documentation : [RabbitMQ](https://www.rabbitmq.com/) 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 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 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](https://github.com/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](https://github.com/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 ~~~