08 . Prometheus+Grafana监控haproxy+rabbitmq
List
CentOS7.3
prometheus-2.2.1.linux-amd64.tar.gz
haproxy_exporter-0.11.0.linux-amd64.tar.gz
| 节点名 | IP | 软件版本 | 硬件 | 网络 | 说明 |
|---|---|---|---|---|---|
| Prometheus | 192.168.43.144 | list 里面都有 | 2C4G | Nat,内网 | 测试环境 |
| RabbitMQ | 192.168.43.213 | list 里面都有 | 2C4G | Nat,内网 | 测试环境 |
| RabbitMQ | 192.168.43.251 | list 里面都有 | 2C4G | Nat,内网 | 测试环境 |
部署Prometheus
部署Promehteus请看我前面写的文章
https://www.cnblogs.com/you-men/p/12839535.html
部署RabbitMQ
修改主机名
由于 RabbitMQ 集群连接是通过主机名来连接服务的,必须保证各个主机名之间可以 ping 通
hostnamectl set-hostname rabbitmq-2
hostnamectl set-hostname rabbitmq-1
echo "192.168.43.213 rabbitmq-1" >> /etc/hosts
echo "192.168.43.251 rabbitmq-2" >> /etc/hosts
scp /etc/hosts rabbitmq-2:/etc/
安装RabbitMQ
# 更新 yum源
yum install epel-release
yum -y install rabbitmq-server
同步Erlang cookie
RabbitMQ 集群是通过 Erlang 的集群实现的,当集群中的节点进行通信时,Erlang 节点会进行认证。如果节点之间的 Erlang cookie 不相同,则会认证失败。因此,需要在集群中的所有节点上同步 cookie 文件
这里将 rabbitmq-1 的该文件复制到 rabbitmq-2,由于这个文件权限是 400 为方便传输,先修改权限,非必须操作,所以需要先修改 rabbitmq-2 中的该文件权限为 777
[root@rabbitmq-1 ~]# service rabbitmq-server start
Redirecting to /bin/systemctl start rabbitmq-server.service
[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
KNTAXWSNMNNODXVTCRZZ
# 用scp 拷贝到rabbitmq-2
scp /var/lib/rabbitmq/.erlang.cookie rabbitmq-2:/var/lib/rabbitmq/.erlang.cookie
# 我们到另一台机器发现拷贝过来的权限有问题,所以需要修改
[root@rabbitmq-2 ~]# ls -l /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 root root 20 May 7 23:27 /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
service rabbitmq-server start
组成集群
在rabbitmq-2执行如下命令
[root@rabbitmq-2 ~]# rabbitmqctl stop_app # 停止rabbitmq服务
[root@rabbitmq-2 ~]# rabbitmqctl reset # 清空节点状态
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1 # node2和node1构成集群,node2必须能通过node1的主机名ping通
[root@rabbitmq-2 ~]# rabbitmqctl start_app # 开启rabbitmq服务
# 接下来我们到任意一台机器上面查看集群状态:
[root@rabbitmq-2 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbitmq-1' ...
[{nodes,[{disc,['rabbit@rabbitmq-1','rabbit@rabbitmq-2']}]},
{running_nodes,['rabbit@rabbitmq-2','rabbit@rabbitmq-1']},
{cluster_name,<<"rabbit@rabbitmq-1">>},
{partitions,[]}]
...done.
RabbitMQ常用命令
rabbitmqctl list_users
# 查看rabbitmq用户列表,默认用户名密码都为guest
rabbitmqctl add_user admin1 123
# 新增用户
rabbitmqctl set_user_tags admin1 administrator
# 设置用户admin1为管理员级别
# 其他命令
rabbitmqctl add_user <username> <password>
rabbitmqctl delete_user <username>
rabbitmqctl change_password <username> <newpassword>
rabbitmqctl clear_password <username>
rabbitmqctl authenticate_user <username> <password>
rabbitmqctl set_user_tags <username> <tag> ...
rabbitmqctl list_users
配置rabbitmq用户管理界面
# 开启web可视化界面
rabbitmq-plugins enable rabbitmq_management
# 需要重启rabbitmq
service rabbitmq-server restart
# 接下来浏览器访问IP:15672即可
rabbitmq从3.3.0开始禁止使用guest/guest权限通过除localhost外的访问,否则会报错

需要在/etc/rabbitmq/rabbitmq.config文件中需要添加{loopback_users, []}配置:
[{rabbit, [
{loopback_users, []}
]}].

设置内存节点
如果节点需要设置成内存节点,则加入集群的命令如下:
rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
# –ram指的是作为内存节点,如果不加,那就默认为内存节点。
如果节点在集群中已经是磁盘节点了,通过以下命令可以将节点改成内存节点:
rabbitmqctl stop_app # 停止rabbitmq服务
rabbitmqctl change_cluster_node_type ram # 更改节点为内存节点
rabbitmqctl start_app # 开启rabbitmq服务
镜像队列
当节点发生故障时,尽管所有元数据信息都可以从磁盘节点上将元数据拷贝到本节点上,但是队列的消息内容就不行了,这样就会导致消息的丢失,那是因为在默认情况下,队列只会保存在其中一个节点上,我们在将集群队列时也说过。
聪明的 RabbitMQ 早就意识到这个问题了,在 2.6以后的版本中增加了,队列冗余选项:镜像队列。镜像队列的主队列(master)依然是仅存在于一个节点上,其余从主队列拷贝的队列叫从队列(slave)。如果主队列没有发生故障,那么其工作流程依然跟普通队列一样,生产者和消费者不会感知其变化,当发布消息时,依然是路由到主队列中,而主队列通过类似广播的机制,将消息扩散同步至其余从队列中,这就有点像 fanout 交换器一样。而消费者依然是从主队列中读取消息。
一旦主队列发生故障,集群就会从最老的一个从队列选举为新的主队列,这也就实现了队列的高可用了,但我们切记不要滥用这个机制,在上面也说了,队列的冗余操作会导致不能通过扩展节点增加存储空间,而且会造成性能瓶颈。
命令格式如下
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
# -p Vhost: 可选参数,针对指定vhost下的queue进行设置
# Name: policy的名称
# Pattern: queue的匹配模式(正则表达式)
# Definition: 镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
# ha-mode: 指明镜像队列的模式,有效值为 all/exactly/nodes
# all: 表示在集群中所有的节点上进行镜像
# exactly: 表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
# nodes: 表示在指定的节点上进行镜像,节点名称通过ha-params指定
# ha-params: ha-mode模式需要用到的参数
# ha-sync-mode: 进行队列中消息的同步方式,有效值为automatic和manual
# priority: 可选参数,policy的优先级
案例
以下示例声明名为ha-all的策略,它与名称以”ha”开头的队列相匹配,并将镜像配置到集群中的所有节点:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
上述命令会将所有的队列冗余到所有节点上,一般可以拿来测试。
策略的名称以”two”开始的队列镜像到群集中的任意两个节点,并进行自动同步:
rabbitmqctl set_policy ha-two "^two." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
以”node”开头的队列镜像到集群中的特定节点的策略:
rabbitmqctl set_policy ha-nodes "^nodes." '{"ha-mode":"nodes","ha-params":["rabbit@nodeA", "rabbit@nodeB"]}'

集群负载均衡
HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
集群负载均和架构图:

安装haproxy
yum -y install haproxy
编辑HaProxy
vim /etc/haproxy/haproxy.cfg
#绑定配置
listen rabbitmq_cluster 0.0.0.0:5670
#配置TCP模式
mode tcp
#加权轮询
balance roundrobin
#RabbitMQ集群节点配置
server rabbitmq-1 192.168.171.134:5672 check inter 2000 rise 2 fall 3
server rabbitmq-2 192.168.171.135:5672 check inter 2000 rise 2 fall 3
#haproxy监控页面地址
listen monitor 0.0.0.0:8100
mode http
option httplog
stats enable
stats uri /stats
stats refresh 5s
启动HaProxy
systemctl restart haproxy
浏览器访问IP:8100/stats

部署node_exporter
下载haproxy_exporter
wget https://github.com/prometheus/haproxy_exporter/releases/download/v0.11.0/haproxy_exporter-0.11.0.linux-amd64.tar.gz
下载RabbitMQ_exporter
wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC7/rabbitmq_exporter-1.0.0-RC7.linux-amd64.tar.gz
wget https://github.com/deadtrickster/prometheus_rabbitmq_exporter/releases/download/rabbitmq-3.6.12-pre18/prometheus_rabbitmq_exporter-v3.6.12.1.ez
部署rabbitmq_exporter
cp prometheus_rabbitmq_exporter-v3.6.12.1.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.3.5/plugins/
# 启动rabbitmq_exporter
RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=json PUBLIC_PORT=9090 RABBIT_URL=http://localhost:15672 nohup ./rabbitmq_exporter &
tail -1000f nohup.
# 参数说明
# RABBIT_USER:rabbit用户名
# RABBIT_PASSWORD:rabbit密码
# RABBIT_URL:rabbit服务地址和端口
# OUTPUT_FORMAT:输出格式
# PUBLIC_PORT:暴露端口
# 验证服务端口
lsof -i:9419
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rabbitmq_ 1682 root 3u IPv6 23446 0t0 TCP *:9419 (LISTEN)

配置prometheus加入rabbitmq_exporter
tail -7 /usr/local/prometheus/prometheus.yml
- job_name: 'rabbitmq_1'
static_configs:
- targets: ['192.168.43.213:9419']
- job_name: 'rabbitmq_2'
static_configs:
- targets: ['192.168.43.251:9419']

配置grafana


预警指标
| 序号 | 预警名称 | 预警规则 | 描述 |
|---|---|---|---|
| 1 | 集群状态预警 | 当集群状态不符合预期【!=1】时进行预警 | |
| 2 | 节点状态预警 | 当节点状态不符合预期【!=1】时进行预警 | |
| 3 | 等待消费预警 | 当等待消费的消息数量达到阈值【>1000】时进行预警 | 延迟消费 |
| 4 | 消费预警 | 当消费中的消息数量达到阈值【>1000】时进行预警 | 消费速度慢 |
部署Haproxy_exporter
tar xvf haproxy_exporter-0.11.0.linux-amd64.tar.gz
cd haproxy_exporter-0.11.0.linux-amd64/
./haproxy_exporter --haproxy.scrape-uri="http://192.168.43.251:8100/stats;csv"
(https://img2020.cnblogs.com/blog/1871335/202006/1871335-20200630180351993-1052219626.png)



08 . Prometheus+Grafana监控haproxy+rabbitmq的更多相关文章
- Prometheus + Grafana 监控系统搭
本文主要介绍基于Prometheus + Grafana 监控Linux服务器. 一.Prometheus 概述(略) 与其他监控系统对比 1 Prometheus vs. Zabbix Zabbix ...
- cAdvisor+Prometheus+Grafana监控docker
cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...
- [转帖]Prometheus+Grafana监控Kubernetes
原博客的位置: https://blog.csdn.net/shenhonglei1234/article/details/80503353 感谢原作者 这里记录一下自己试验过程中遇到的问题: . 自 ...
- prometheus+grafana监控redis
prometheus+grafana监控redis redis安装配置 https://www.cnblogs.com/autohome7390/p/6433956.html redis_export ...
- prometheus+grafana监控mysql
prometheus+grafana监控mysql 1.安装配置MySQL官方的 Yum Repository(有mysql只需设置监控账号即可) [root@localhost ~]# wget - ...
- [转帖]安装prometheus+grafana监控mysql redis kubernetes等
安装prometheus+grafana监控mysql redis kubernetes等 https://www.cnblogs.com/sfnz/p/6566951.html plug 的模式进行 ...
- 【Springboot】用Prometheus+Grafana监控Springboot应用
1 简介 项目越做越发觉得,任何一个系统上线,运维监控都太重要了.关于Springboot微服务的监控,之前写过[Springboot]用Springboot Admin监控你的微服务应用,这个方案可 ...
- 部署Prometheus+Grafana监控
Prometheus 1.不是很友好,各种配置都手写 2.对docker和k8s监控有成熟解决方案 Prometheus(普罗米修斯) 是一个最初在SoudCloud上构建的监控系统,开源项目,拥有非 ...
- Prometheus+Grafana监控SpringBoot
Prometheus+Grafana监控SpringBoot 一.Prometheus监控SpringBoot 1.1 pom.xml添加依赖 1.2 修改application.yml配置文件 1. ...
随机推荐
- Java实现 LeetCode 328 奇偶链表
328. 奇偶链表 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂 ...
- Java实现最小费用最大流问题
1 问题描述 在最大流有多组解时,给每条边在附上一个单位费用的量,问在满足最大流时的最小费用是多少? 2 解决方案 下面代码所使用的测试数据如下图: package com.liuzhen.pract ...
- NodeJS及路由
1.基本介绍- http://nodejs.cn/api/ Node.js 是一个基于Chrome V8 引擎的JavaScript运行环境 Node.js使用了一个事件驱动.非阻塞式I/O的模型,使 ...
- python—异常处理
一:什么是异常? (异常就是程序运行时发生错误的信号) 错误分两种: 1.语法错误 2.逻辑错误 二:异常的种类? (在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类 ...
- java之单点登录(SSO)
单点登录(SSO):SSO是指在多个应用系统中个,用户只需要登陆一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一用户的登陆的机制. SSO的实现过程: 通过上述 ...
- Spring zuul 快速入门实践 --看zuul如何进行服务转发
zuul 作为springCloud 的全家桶组件之一,有着不可或缺的分量.它作为一个普通java API网关,自有网关的好处: 避免将内部信息暴露给外部: 统一服务端应用入口: 为微服务添加额外的安 ...
- 深入浅出-TCP/IP协议族剖析&&Socket
Posted by 微博@Yangsc_o 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 #简介 该篇文章主要回顾–TCP/I ...
- 聊聊依赖注入注解@Resource和@Autowired
1. 前言 @Resource和@Autowired注解都可以在Spring Framework应用中进行声明式的依赖注入.而且面试中经常涉及到这两个注解的知识点.今天我们来总结一下它们. 2. @R ...
- windows server2012在已有.net4.5框架的基础上安装.net3.5的方法
我们在一台服务器运行各种程序的时候难免会用到一些好用的但是很老的软件.老软件也就难免需要以前的那种环境来运行,但是老的环境与新的环境往往不兼容.下面我就来讲一讲系统在已有.net4.5的情况下怎么安装 ...
- 掌握SpringBoot-2.3的容器探针:实战篇
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:原创文章分类汇总,及配套源码,涉及Java.Docker.K8S.DevOPS等 经过多篇知识 ...