,自建了6台Redis实例,需要进行监控。 /redis_exporter-v1.3.5.linux-amd64 /data/redis_exporter redis_exporter 用法 解压后只有一个二进制程序就叫 redis_exporter redis.password:验证 Redis 时使用的密码; -redis.file:包含一个或多个redis 节点的文件路径,每行一个节点,此选项与 -redis.addr 互斥。 /redis_exporter -redis.addr 192.168.111.11:6379 -redis.password 123456 & 三、配置 prometheus.yml 单机版 添加监控目标 instance: 生产实例3 - targets: ['192.168.10.150:9121'] labels: instance: 生产实例4
, 需要重点 监控。 rejected_connections 127.0.0.1:6379> info clients #代表当前Redis节点的客户端连接数, 需要重点监控,一旦超过maxclients,新的客户端连接将被拒绝 自启动以来处理的客户端连接数总数 total_connections_received:80 #Redis自启动以来拒绝的客户端连接数, 需要重点监控 rejected_connections:0 二. 服务端 127.0.0.1:6379> info # Server redis_version:2.6.9 redis_git_sha1:00000000 redis_git_dirty:0 redis_mode role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:4
Zabbix监控redis 当代张思德 2013年开始使用Zabbix,2014-2016年负责Zabbix二次开发及架构设计,目前从事PaaS平台及微服务的开发和运维工作,Zabbix实践爱好者,Cactifans 作者,golang爱好者 【老张监控技术】专栏 Zabbix3.4分区表配置 Zabbix3.4新功能介绍 (一):Preprocessing 通过smtp发送邮件 Zabbix监控docker 使用go 语言写了一个采集redis性能的小程序,通过redis的go客户端连接redis,采集数据库性能指标,大家可试用一下,欢迎提出修改意见和建议。 监控客户端下载 linux 32位系统 zabbix_redis.x86.tar.gz linux64位系统 zabbix_redis.x86_64.tar.gz 配置方法 修改zabbix agentd PORT}":"6379"},{"{#PORT}":"6380"}]} 表示执行成功 server端操作 导入redis监控模版: zabbix_redis_templates.tar.gz 关联redis
创建nginx用户 [root@es_node cert]# useradd nginx [root@es_node cert]# grep nginx /etc/passwd nginx:x:505:505::/home/nginx:/bin/bash [root@es_node cert]# chown -R nginx.nginx /usr/local/nginx/ [root@es_node cert]# ll total 12 -rw------- 1 nginx nginx 1249 Jan
创建用户 [root@rabbitmq ~]# rabbitmqctl list_users Listing users ... cooper [] guest [administrator] [root@rabbitmq ~]# rabbitmqctl add_user mqmonitor mqpass Creating user "mqmonitor" ... [root@rabbitmq ~]# rabbitmqctl list_users Listing users ... cooper []
目前是使用 root 的身份执行的,但是 zabbix agent 是使用 zabbix 身份来执行这条命令的,我们尝试使用 zabbix 来执行一下,看看效果
127.0.0.1:6379> slowlog get 2 1) 1) (integer) 7923 2) (integer) 1544423728 3) (integer) 27501 4) 4= 执行的命令,以数组的形式排列。完整命令是config get *。 这个值跟使用redis的服务的连接池配置关系比较大,Redis默认允许客户端连接的最大数量是10000。 若是内存碎片率低于1的话,说明Redis内存分配超出了物理内存,操作系统正在进行内存交换。 8 监视在Redis中执行的命令 使用MONITOR模式后,将自动输入监控模式。 它将打印Redis实例收到的所有命令 redis-cli -h {ip} -p {port} monitor eg.
安装部署 [root@mysql01 opt]# wget https://github.com/oliver006/redis_exporter/releases/download/v1.5.2/redis_exporter-v1.5.2 opt]# mv redis_exporter-v1.5.2.linux-arm64 /usr/local/redis_exporter [root@mysql01 opt]# cd /usr/local 测试启动 [root@mysql01 opt]# /usr/local/redis_exporter/redis_exporter -redis.addr 127.0.0.1:6379 INFO[0000 ] Redis Metrics Exporter v1.4.0 build date: 2020-02-22-02:07:24 sha1: dde61ca2367f5fdb1f4a0c49022fcb0135715d22 /local/redis_exporter/redis_exporter -redis.addr 127.0.0.1:6379 [Install] WantedBy=multi-user.target
事务 Redis单条命令是保证原子性的,但是事务不保证原子性的 Redis事务没有隔离级别的概念 所有的命命令在事务中, 并没有直接被执行, 只有发起执行命令的时候才会被执行 Redis 事务的本质: 一组命令的集合 一个事务中的所有命令都会被序列化, 在事务执行过程中, 会按照顺序执行 一次性 顺序性 排他性 执行一系列的命令 ----- 队列set set set 执行----- Redis OK 127.0.0.1:6379> 放弃事务 127.0.0.1:6379> multi # 开启事务 OK 127.0.0.1:6379> set k4 v4 QUEUED "v3" 127.0.0.1:6379> 监控 Watch 悲观锁 很悲观, 认为什么时候都会出现问题, 无论做什么都会加锁. 更新数据的时候去判断一下, 在此期间是否有人修改过这个数据 获取version 更新时比较version Redis监视测试 正常执行成功 127.0.0.1:6379> set money 100 OK
Redis有一个monitor命令,某个client执行monitor命令后,就成为了一个监控器,服务器端执行的所有命令都会发送给监控器 monitor 是一个用来debug的命令,可以帮助我们了解服务器正在发生什么 例如我们打开monitor监控服务器20分钟,可以收集到期间服务器执行的所有命令,那么就可以分析出很多信息,例如: (1)什么命令执行得次数多 (2)哪些key是热点 (3)通过对get类型命令的提取 ,统计出发送流量 …… monitor命令使用 127.0.0.1:6379> monitor OK 执行后返回“OK”,说明此客户端已经成为了监控器,然后就进入了等待状态 当服务器端执行了命令后,这里会自动显示出执行信息
Keyspace db0:keys=262,expires=183,avg_ttl=284091259423 #据库的键数量、数据库设置有过期时间的key的数量(这个值减少是正常的) 使用zabbix监控 redis 用zabbix监控redis是一个很简单的事儿,只需要把需要监控的数据提取出来即可。 首先先来一个判断redis服务器连接的脚本: [root@func-redis-001 ~]# cat check_redis.sh #这个脚本是用来zabbix监控自建redis的 #! requiretty #这个是新增 保存之后,重启zabbix-agent服务,由于我这个redis是通过zabbix-proxy监控的,所以在zabbix-proxy一端用zabbix_get 来查看结果: 然后在zabbix-proxy的模板里面添加一些需要监控的item即可,有必要的话可以设置trigger+action用来报警,如图: 最后就是grafana搞一个炫酷的图表来
前言 本文算是一篇how to文档,介绍如何利用zabbix监控redis(正好有同学问我,顺手写一篇)。 准备监控脚本 对于单机多实例的redis而言,需要先获取所有redis实例的port。 0.0.0.0|awk '{print $4}'|awk -F: '{print $2}' """) ports = [] for port in res.readlines(): r = 配置zabbix 创建redis host group,并添加对应的redis机器 创建监控模板 可以从网上(文末会给出url)下载,然后在zabbix监控的网页选择configuration--> templates 可以结合grafna监控来配置监控项的图形展示,具体大家自己调研吧。 自己写了一个redis工具集放在github上面。
前言 前文介绍了 prometheus 的架构和工作原理,本文手动实践一下,使用prometheus + grafna 监控redis。 /redis_exporter --version 编译时遇到报错 # go build . go: golang.org/x/sys@v0.0.0-20190405154228-4b34438f7a67 启动redis_exporter redis_exporter 可以支持监控单实例和多实例。如果监控一个redis 可以使用 nohup . /redis_exporter -redis.addr 127.0.0.1:6379 & 监控多个redis 则需要先启动exporter nohup . 监控数据 ?
RedisLive是由python编写的并且开源的图形化监控工具,非常轻量级,核心服务部分只包含一个web服务和一个基于redis自带的info命令以及monitor命令的监控服务,界面上只有一个基于 除此之外,它还支持多实例监控,切换方便,而且配置起来也非常容易。监控信息支持redis存储和持久化存储(sqlite)两种方式。 数据文件 } } 注意:RedisServers,段可以写多个,因此可以监控多个redis服务 2.3 启动服务 . /redis-monitor.py --duration=30 & //启动监控,duration是心跳时间 &放置在后台执行 . duration参数指定了监控脚本的运行持续时间,例如设置为 30 秒,即经过 30 秒后,监控脚本会自动退出,并在终端打印 shutting down… 的提示。
### 延迟监控 * **参考官方文档** | https://redis.io/topics/latency-monitor | | :----: | * **启用 redis 延迟监控** | 如果将 latency-monitor-threshold 的值设置为 0,则表示关闭延迟监控。 4)LATENCY GRAPH event 以文本图表方式展示 5)LATENCY DOCTOR 回复人类可读的延迟分析报告 6)LATENCY HELP 查看使用帮助 * **支持的事件(events 对延迟监控的支持** 与延迟监控有关的参数: |参数名|参数说明| |:----:|:----:| |--latency|以文本方式显示持续采样服务器延迟时间| |--latency-dist|以 256 | 不带参数返回所有的(配置 slowlog-max-len 决定)慢日志,可指定参数只返回最新的 N 条慢日志,如最新的 10 条: | SLOWLOG GET 10 | | :----: | 4)
存储(实现)原理 Redis用intset或hashtable存储set。如果元素都是整数类型,就用inset存储。如果不是整数类型,就用hashtable(数组+链表的存来储结构)。 redis.conf set-max-intset-entries 512 127.0.0.1:6379> sadd lset 1 2 3 3 4 5 6 7 (integer) 7 127.0.0.1
在Redis中 可以对列表两端插入push 或者弹出pop,或者获取指定访问的元素列表,获取指定索引的下标的元素。 6379> linsert listkey after e n (integer) 8 127.0.0.1:6379> lrange listkey 0 -1 1) "e" 2) "n" 3) "d" 4) 会一直阻塞 127.0.0.1:6379> blpop emptylist 2 (nil) (2.08s) 127.0.0.1:6379> blpop emptylist 0 这个时候我们开启另外一个redis-cli ziplist 压缩列表:当列表类型元素个数小于list-max-ziplist-entries配置(默认512个),同时所有值都小于list-max-ziplist-value配置(默认64个字节)redis linkedlist链表当list类型无法满足ziplist的条件是,redis会使用linkedlist作为列表的内部实现。
命令master 上没有 rdb 文件[root@m1 ~]# lsanaconda-ks.cfg Downloads log Public redis.conf redis_slave_on_m1.conf VideosDesktop install.log Music redis-3.0.0 redis.log TemplatesDocuments install.log.syslog Pictures redis-3.0.0.tar.gz redis-new.conf tmp[root@m1 ~]# redis-cli 127.0.0.1:6379> keys * 1) "b"2) "a"3) "c"4) "8"5) "9"6) "d"127.0.0.1:6379
十条数据,算出各自的哈希值,(这里就不变了,实际上要经过一系列计算) 0 : 0 1 : 1 2 : 2 3 : 3 4 : 4 5 : 5 6 : 6 7 : 7 8 : 8 9 : 9 有三个节点, 算出各自的哈希值 node a: 3 node b: 5 node c: 7 这个时候比较两者的哈希值,5等于b,则归属b,4小于b,归属b,3等于a,则归属a,最后所有大于c的,归属于c(这里只是模拟 ) 相当于整个哈希值就是一个环,对应的映射结果: node a: 0,1,2,3 node b: 4,5 node c: 6,7,8,9 这个时候加入node d, 就可以算出node d的哈希值: node d: 9 这个时候对应的数据就会做迁移: node a: 0,1,2,3 node b: 4,5 node c: 6,7 node d: 8,9 只有最后8,9这2条数据被存储到新的节点,其他不变
/src/{redis-benchmark,redis-check-aof,redis-check-rdb,redis-cli,redis-sentinel,redis-server} /usr/local 0 1608532872000 4 connected 60bee426b74f78863ebde556ccdf3be318076e2a 192.168.1.31:6380@16380 slave 61a3730c0bc4f8dd0adc6cb8361468b111ae107f 0 1608532290000 4 connected 61a3730c0bc4f8dd0adc6cb8361468b111ae107f 192.168.1.33:6379@16379 master 0 1608533632330 4 connected 61a3730c0bc4f8dd0adc6cb8361468b111ae107f 192.168.1.33:6379@16379 master failove 1887:M 21 Dec 2020 16:57:07.822 # Setting secondary replication ID to fb19496140888dd50683a812b6f4dc4c6475a003