redis 简易监控的几种方法

简介

针对Redis 实现性能监控的几种方法

一、使用info命令

命令说明

127.0.0.1:6380> info
# Server
redis_version:3.2.11
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:41a708998db14d05
redis_mode:standalone
os:Linux 3.0.76-0.11-default x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.3.4
process_id:16942
run_id:e3996796aba6cff723f1e58feb42fa9ea9515b01
tcp_port:6380
uptime_in_seconds:4215152
uptime_in_days:48
hz:10
lru_clock:3786096
executable:/home/iotweb/local/redis/./bin/redis-server
config_file:/home/iotweb/local/redis/redis.conf

# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:6392944
used_memory_human:6.10M
used_memory_rss:13623296
used_memory_rss_human:12.99M
used_memory_peak:12523592
used_memory_peak_human:11.94M
total_system_memory:33673551872
total_system_memory_human:31.36G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:2.13
mem_allocator:jemalloc-4.0.3

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1510133670
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok

# Stats
total_connections_received:2013
total_commands_processed:3129128
instantaneous_ops_per_sec:0
total_net_input_bytes:138114786
total_net_output_bytes:3167119897
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:1
keyspace_misses:1
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:1107
migrate_cached_sockets:0

# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:3631.63
used_cpu_user:2210.61
used_cpu_sys_children:0.20
used_cpu_user_children:1.47

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=53500,expires=0,avg_ttl=0

指标说明

  • Server 指通用的服务器信息,包括版本号、监听端口、进程ID等
  • Clients 指客户端信息,包括接入数量、阻塞数量等
  • Memory 内存信息,包括虚拟内存、物理内存、碎片比例(rss/used)等
  • Persistence 持久化信息,包括RDB和AOF的相关信息
  • Stats 统计信息,包括历史命令数、键数量、网络流量等
  • Replication 主从复制信息,包括slave及backlog相关信息
  • CPU CPU使用相关信息
  • Cluster 集群信息
  • Keyspace 逻辑空间信息,包括数据库键数、超时及TTL信息

参考文档

二、使用redis-stat

项目地址
https://github.com/junegunn/redis-stat

项目说明
redis-stat 是基于Ruby实现的一个简单易用的 Redis监控工具
redis-stat 的实现原理基于INFO(见上)命令,相比MONITOR命令来说其对Redis不会产生任何性能影响。
此外 redis-stat项目也提供了Console及Web界面两种展现形式。

如何搭建
redis-stat 的使用需要依赖ruby,但Jruby为我们提供了使用Java的打开方式。

  1. 下载Jar包,点击这里
  2. 执行启动脚本
java -jar redis-stat-0.4.14.jar 127.0.0.1:6380 3 --server=63800 > monitor.log &
  1. 控制台输出
Puma 2.3.2 starting...
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:63800
== Sinatra/1.3.6 has taken the stage on 63800 for production with backup from Puma
┌────────────────────────┬────────────────┐
│                        │ 127.0.0.1:6380 │
├────────────────────────┼────────────────┤
│          redis_version │         3.2.11 │
│             redis_mode │     standalone │
│             process_id │          16942 │
│      uptime_in_seconds │        4216406 │
│         uptime_in_days │             48 │
│                   role │         master │
│       connected_slaves │              0 │
│            aof_enabled │              0 │
│ rdb_bgsave_in_progress │              0 │
│     rdb_last_save_time │     1510133670 │
└────────────────────────┴────────────────┘

┌────────┬──┬──┬──┬───┬──────┬──────┬─────┬─────┬─────┬─────┬──────┬─────┬─────┬─────┐
     time us sy cl bcl    mem    rss  keys cmd/s exp/s evt/s hit%/s hit/s mis/s aofcs
├────────┼──┼──┼──┼───┼──────┼──────┼─────┼─────┼─────┼─────┼──────┼─────┼─────┼─────┤
 10:26:30  -  -  1   0 6.08MB 13.0MB 53.5k     -     -     -      -     -     -    0B
 10:26:33  0  0  1   0 6.08MB 13.0MB 53.5k  0.33     0     0      -     0     0    0B
 10:26:36  0  0  1   0 6.08MB 13.0MB 53.5k  0.33     0     0      -     0     0    0B 

监控效果

使用 http://127.0.0.1:63800/ 地址可以直接访问Web界面,见下图

指标说明

简写 指标 说明
us used_cpu_user 用户空间占用CPU百分比
sy used_cpu_sys 内核空间占用CPU百分比
cl connected_clients 连接客户端数量
bcl blocked_clients 阻塞客户端数量(如BLPOP)
mem used_memory 使用总内存
rss used_memory_rss 使用物理内存
keys dbx.keys key的总数量
cmd/s command/s 每秒执行命令数
exp/s expired_keys/s 每秒过期key数量
evt/s evicted_keys/s 每秒淘汰key数量
hit%/s keyspace_hitratio/s 每秒命中百分比
hit/s keyspace_hits/s 每秒命中数量
mis/s keyspace_miss/s 每秒丢失数量
aofcs aof_current_size AOF日志当前大小

类似redis-stat 还有redis-live等若干开源项目

三、自研工具

工具简介
redis-stat提供了一种简易的方式实现对Redis实例的监控,但目前平台使用的Redis经过了加固改造,其鉴权方式完全不同。
为实现平台Redis的适配,可利用类似的方式对INFO信息进行解析,以实现自有Redis实例的统一监控。

加固版Redis 在鉴权过程中需要提供redis-share.key密钥数据;
而Jedis组件也经过了改造,在启动程序时指定OSS_ROOT环境变量,保证Jedis客户端实例可通过路径找到密钥文件。

代码样例

  • 调用info 命令
  • public String getInfo() {
        Jedis jedis = get();
        try {
            String infoContent = jedis.info();
            return infoContent;
        } finally {
            if (jedis != null) {
                jedisPool.returnResource(jedis);
            }
        }
    }
  • 解析结果
        for (String line : lines) {
            if (line.isEmpty()) {
                continue;
            }

            if (line.startsWith("#")) {
                part = line.replace("#", "").trim();
                continue;
            }

            int index = line.indexOf(':');
            if (index >= 0) {
                infoMap.put(part + "." + line.substring(0, index), line.substring(index + 1));
            }
        }
  • 数据转换处理
           Map<String, String> infoMap = parseInfo(infoContent);

            stat.setUsed_cpu_sys(getIntValue(infoMap, "CPU.used_cpu_sys"));
            stat.setUsed_cpu_user(getIntValue(infoMap, "CPU.used_cpu_user"));

            stat.setBlocked_clients(getIntValue(infoMap, "Clients.blocked_clients"));
            stat.setConnected_clients(getIntValue(infoMap, "Clients.connected_clients"));
            stat.setUsed_memory(getIntValue(infoMap, "Memory.used_memory"));
            stat.setUsed_memory_rss(getIntValue(infoMap, "Memory.used_memory_rss"));

            //
            int cmd = getIntValue(infoMap, "Stats.total_commands_processed");
            int exp = getIntValue(infoMap, "Stats.expired_keys");
            int evt = getIntValue(infoMap, "Stats.evicted_keys");

            int hit = getIntValue(infoMap, "Stats.keyspace_hits");
            int mis = getIntValue(infoMap, "Stats.keyspace_misses");

            long lastTs = stat.getTimestamp();
            long thisTs = System.currentTimeMillis();

实现效果

实例名称 用户CPU 系统CPU 总连接数 阻塞连接 使用内存 物理内存 键数量 CMD速率 EXP速率 EVT速率 HIT速率 MIS速率 时间
appdb0/100.112.56.105:26529 2 2 3 0 1.0M 2.0M 12 0 0 0 0 0 2018/2/5 18:27
appdb1/100.112.56.105:26520 2 3 4 0 1.0M 2.0M 8 16 0 0 4 0 2018/2/5 18:27
appdb2/100.112.56.105:26523 3 5 3 0 1.0M 2.0M 19 52 0 0 5 0 2018/2/5 18:27

原文地址:https://www.cnblogs.com/littleatp/p/8419744.html

时间: 2024-08-29 08:47:21

redis 简易监控的几种方法的相关文章

memcached监控的几种方法(nagios等)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://storysky.blog.51cto.com/628458/244962 最近根据程序员需要在一台服务器上面部署了memcached服务,虽然用上了,但是对他还不是非常了解.于是开始收集整理他的相关资料,其中一部分就是对他的监控了.  目前我所知道的监控方法大概有以下几种:一.memcache.php 这个东东算是最简单的了,只要支持php环境就能用,把这个文件放到你的网页存放

Tomcat 监控的几种方法

Tomcat 监控方法 方法1:.使用tomcat自带的status页 具体方法: 步骤1:修改%tomcat安装路径%\conf \tomcat-users文件,配置admin设置权限.在<tomcat-users>中增加部分内容.具体如下: <role rolename="manager-gui"/> <user username=“manager" password=“1234" roles="manager-gui&q

关于 tomcat 集群中 session 共享的三种方法

前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富, 不只是缓存 session ,还可以做其他用途,一举几得啊. 1.使用 filter 方法存储 这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于 tomcat ,而且实现的原理比较简单容易控制. 可以使用 memcached-session-filter

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控

zabbix使用自己编写脚本模板和zabbix自带模板两种方法添加对指定进程和端口的监控 1.自带监控模板进行os的监控 进入/usr/local/zabbix/etc/zabbix_agentd.conf 配置文件修改 LogRemoteCommands=1     ###开启脚本功能 Server=192.168.5.129     ##修改zabbix指向的服务器: 重启zabbix_agentd.zabbix_server服务 在配置-->主机-->添加主机--> 配置主机信息主

Redis实现唯一计数的3种方法分享

转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/121.html?1455855118 唯一计数是网站系统中十分常见的一个功能特性,例如网站需要统计每天访问的人数unique visitor?(也就是 UV).计数问题很常见,但解决起来可能十分复杂:一是需要计数的量可能很大,比如大型的站点每天有数百万的人访问,数据量相当大:二是通常还希望扩展计数的维度,比如除了需要每天的 UV,还想知道每周或每月的 UV,这样导致计算十

redis 删除大key集合的方法

redis大key,这里指的是大的集合数据类型,如(set/hash/list/sorted set),一个key包含很多元素.由于redis是单线程,在删除大key(千万级别的set集合)的时候,或者清理过期大key数据时,主线程忙于删除这个大key,会导致redis阻塞.崩溃,应用程序异常的情况. 一个例子 线上redis作为实时去重的一个工具,里面有6千万的用户guid,这么一个set集合,如果直接使用del删除,会导致redis严重阻塞. 1 10.1.254.18:6380> info

Java创建对象的几种方法

有时候,也可能碰到这样面试题,如: Java创建对象有哪几种方法? 除了new之外,java创建对象还有哪几种方式? 本文结合例子,给出几种Java创建对象的方法,Here we go~~~~ 使用new创建 这是最常用的一种.如: Book book = new Book(); 示例如下: package test; import java.io.Serializable; import java.util.List; /** * @author wangmengjun * */ public

Matlab中图片保存的5种方法

matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的. Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf.mesh系类的数值绘图函数等几十个.另外其他专业工具箱也提供了专业绘图函数,这些值得大家深入学习好久. 今天我只是讨论下如何保存这些由Matlab绘制出来的图像呢?当然借助第三方截图软件,就算了! 1.使用imwrite 函数 如图像是img,则可以使用 imwrite(img,'result.jpg'); 这种方法保存图像大小和显示的大小事一样的.

[BS-19]更改UITextField的placeholder文字颜色的5种方法

更改UITextField的placeholder文字颜色的5种方法 想要达到的目标是:一个页面上有多个UITextField,当用户聚焦某textField时,该文本框的placeholder的文字会灰色变为白色,当文本框失去焦点时,placeholder颜色从白色再变回灰色. 1.放置UILabel 最简单最笨的方法是在每个textField里放一个UILabel来充当placeholder,当该textField聚焦时,让placeholder的文字会灰色变为白色,失焦后从白色再变回灰色.