环境:CentOS7.5
配置:
准备基础环境:
安装最小化的系统,root密码为redhat
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.60.130
GATEWAY=192.168.60.2
[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl stop NetworkManager && systemctl disable NetworkManager
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
[root@localhost ~]# vi /etc/sysconfig/selinux
SELINUX=disabled
[root@localhost ~]# mkdir /etc/yum.repos.d/bak
[root@localhost ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/
[root@localhost ~]# vi /etc/yum.repos.d/iso.repo
[cdrom]
name=cdrom
baseurl=file:///mnt/cdrom
gpgcheck=0
enable=1
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# echo '/dev/cdrom /mnt/cdrom iso9660 defaults 0 0' >>/etc/fstab
[root@localhost ~]# mount -a
[root@localhost ~]# vi /etc/yum.repos.d/CentOS-163-Base.repo
[base]
name=CentOS-$releasever - Base - 163.com
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7#released updates
[updates]
name=CentOS-$releasever - Updates - 163.com
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - 163.com
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - 163.com
baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7[root@localhost ~]# yum repolist
repolist: 26,169
[root@localhost ~]# yum install -y ntp vim net-tools tcpdump strace sysstat iotop pciutils lsof telnet lrzsz dos2unix psmisc tree wget bash-completio
[root@localhost ~]# hostnamectl set-hostname allinone
[root@allinone ~]# vim /etc/hosts
127.0.0.1 allinone
::1 allinone
[root@localhost ~]# poweroff
做快照,克隆新的虚拟机
安装,启动服务
[root@allinone ~]# yum install epel-release -y
[root@allinone ~]# yum -y install rabbitmq-server[root@allinone ~]# systemctl start rabbitmq-server
[root@allinone ~]# systemctl enable rabbitmq-server
Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.### 修改guest用户密码
[root@allinone ~]# rabbitmqctl change_password guest guest
Changing password for user "guest" ...
...done.### 开启web管理插件
[root@allinone ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.
[root@allinone ~]# systemctl restart rabbitmq-server[root@allinone ~]# vim /etc/hosts
127.0.0.1 allinone
192.168.60.129 allinone
登录web管理页面:
管理用户及权限:
[root@allinone ~]# rabbitmqctl help
Usage:
rabbitmqctl [-n <node>] [-q] <command> [<command options>]
[root@allinone ~]# rabbitmqctl add_user tracer redhat
Creating user "tracer" ...
...done.
[root@allinone ~]# rabbitmqctl set_permissions tracer ".*" ".*" ".*"
Setting permissions for user "tracer" in vhost "/" ...
...done.
[root@allinone ~]# rabbitmqctl list_users
Listing users ...
guest [administrator]
tracer []
...done.
RabbitMQ有一个可跟踪所有消息的内置功能,称为Firehose Tracer。开启后,进入系统的所有消息都将复制到amq.rabbitmq.trace这个交换(Exchange)
以下,用脚本抓取消息队列中的消息:
[root@allinone ~]# ll pika-0.10.0.tar.gz
-rw-r--r-- 1 root root 82642 Jul 27 14:58 pika-0.10.0.tar.gz
[root@allinone ~]# tar -xf pika-0.10.0.tar.gz
[root@allinone ~]# cd pika-0.10.0/
[root@allinone pika-0.10.0]# python setup.py install
[root@allinone pika-0.10.0]# cd
[root@allinone ~]# vim rmq_trace.py
#!/usr/bin/env python'''
Maintained at: https://gitlab.com/mweetman/rmq-trace
'''from __future__ import print_function
import getopt
import json
import sys
import pika
def usage():
print('Usage: %s OPTIONS' % sys.argv[0])
print('\nOPTIONS:')
print(' [-u] (--user) user with permissions on amq.rabbitmq.trace exchange')
print(' [-p] (--password) password for trace user')
print(' [-t] (--target) IP RabbitMQ is bound to')
print(' [-h] (--help) print this message')
def callback(ch, method, properties, body):
print("[*] routing key: %s\n node: %s\n headers: %s\n body:\n%s\n" % (
method.routing_key,
properties.headers["node"],
properties.headers["routing_keys"],
json.loads(body),
))
def main():
try:
opts, args = getopt.getopt(sys.argv[1:], "u:p:t:h", ["user=", "password=", "target=", "help"])
except getopt.GetoptError as err:
print(str(err))
usage()
return 1
for opt, arg in opts:
if opt in ("-u", "--user"):
user = arg
elif opt in ("-p", "--password"):
password = arg
elif opt in ("-t", "--target"):
target = arg
elif opt in ("-h", "--help"):
usage()
return 0
else:
assert False, '<*> unhandled option'
return 1# set defaults if unspecified
try:
user
except:
user = 'guest'
print("> using 'guest' as the username")try:
password
except:
print("> using 'guest' as the password")
password = 'guest'try:
target
except:
target = 'localhost'
print("> connecting to 'localhost'")# connect to RabbitMQ
credentials = pika.PlainCredentials(user, password)
connection = pika.BlockingConnection(pika.ConnectionParameters(
target,
5672,
'/',
credentials))
channel = connection.channel()
queue_name = "firehose"
result = channel.queue_declare(queue=queue_name, exclusive=False)channel.queue_bind(exchange='amq.rabbitmq.trace',
queue=queue_name,
routing_key="#")channel.basic_consume(callback,
queue=queue_name,
no_ack=True)channel.start_consuming()
if __name__ == "__main__":
rc = main()
exit(rc)
[root@allinone ~]# ./rmq_trace.py -u tracer -p redhat -t 127.0.0.1 >/tmp/rabbit.trace
配置rabbitmqadmin工具
[root@allinone ~]# rabbitmqctl set_user_tags tracer administrator
Setting tags for user "tracer" to [administrator] ...
...done.
[root@allinone ~]# rabbitmqctl list_users
Listing users ...
guest [administrator]
tracer [administrator]
...done.
[root@allinone ~]# cat .rabbitmqadmin.conf
[default]
hostname = 127.0.0.1
port = 5672
username = tracer
password = redhat[root@allinone ~]# chmod +x /var/lib/rabbitmq/mnesia/rabbit@allinone-plugins-expand/rabbitmq_management-3.3.5/priv/www/cli/rabbitmqadmin
[root@allinone ~]# /var/lib/rabbitmq/mnesia/rabbit@allinone-plugins-expand/rabbitmq_management-3.3.5/priv/www/cli/rabbitmqadmin help config
Usage
=====
rabbitmqadmin [options] subcommandConfiguration File
==================
用rabbitmqadmin工具创建exchange、queue、message
卡点:rabbitmqadmin命令报错
[root@allinone ~]# ./rabbitmqadmin list users
Traceback (most recent call last):
File "./rabbitmqadmin", line 943, in <module>
main()
File "./rabbitmqadmin", line 384, in main
method()
File "./rabbitmqadmin", line 526, in invoke_list
format_list(self.get(uri), cols, obj_info, self.options)
File "./rabbitmqadmin", line 407, in get
return self.http("GET", "/api%s" % path, "")
File "./rabbitmqadmin", line 436, in http
resp = conn.getresponse()
File "/usr/lib64/python2.7/httplib.py", line 1113, in getresponse
response.begin()
File "/usr/lib64/python2.7/httplib.py", line 444, in begin
version, status, reason = self._read_status()
File "/usr/lib64/python2.7/httplib.py", line 400, in _read_status
line = self.fp.readline(_MAXLINE + 1)
File "/usr/lib64/python2.7/socket.py", line 476, in readline
data = self._sock.recv(self._rbufsize)
socket.error: [Errno 104] Connection reset by peer