zoukankan      html  css  js  c++  java
  • Redis慢日志查询

    Redis slowlog 是个什么

    redis的slow log记录了那些执行时间超过规定时长的请求。执行时间不包括I/O操作(比如与客户端进行网络通信等),只是命令的实际执行时间(期间线程会被阻塞,无法服务于其它请求。 

    有两个参数用于配置slow log: 

    slowlog-log-slower-than:设定执行时间,单位是毫秒,执行时长超过该时间的命令将会被记入log。-1表示不记录slow log; 0强制记录所有命令。 

    slowlog-max-len:            slow log的长度。最小值为0。如果日志队列已超出最大长度,则最早的记录会被从队列中清除。 

    可以通过编辑redis.conf文件配置以上两个参数。对运行中的redis, 可以通过config get, config set命令动态改变上述两个参数

    使用这个命令可以读取或重置 Redis 慢速查询日志。通俗讲就是 redis 可以把执行时间超过我们设定值的命令记录下来,slowlog 是记录到内存中的哦,所以非常快。

    设置 Redis slowlog

    两种方式:

    1. 可以通过配置 redis.conf 来完成。
    2. 运行时,使用 CONFIG GET 和 CONFIG SET 命令配置。

    这里我们主要说的是第二种方式,您可以使用两个参数来配置慢日志:slowlog-log-slow-than * ,告诉 Redis, 记录超过 * 微秒 内的命令执行情况。

    需要注意的是,设置负数表示禁用 slowlog ,而设置 0 则强制记录每个命令的执行情况。
    以下是 slowlog 的设置使用说明:

    redis 127.0.0.1:6379>config set slowlog-log-slower-than 10000
    "OK"

    redis 127.0.0.1:6379>config get slowlog-log-slower-than
    1)  "slowlog-log-slower-than"
    2)  "10000"

    那么问题又来了,slowlog 是记录再内存中的,如果记录所有的命令 log 会不会把内容撑爆呢?

    答案是当然不会。slowlog 记录的 log 数是有最大长度限制的,我们可以通过 slowlog-max-len 来查询 slowlog 的最大长度。最小值为零。当一个新的命令被记录下来,并且如果已经达到它的最大长度时,最老的一个 log 将从队列中删除,FIFO 。

    另外,使用 slowlog len 命令可以查看当前已记录的数量。 
    使用 slowlog reset 重置已记录的 slowlog 信息。

    如何阅读 slowlog

    我们已经了解 slowlog 是记录在内存中的,所以您可以启用所有命令的日志记录即 slowlog-log-slow-than 配置参数设置为 0 便于监测性能。

    要读取 slowlog,使用 SLOWLOG GET 获取命令,它返回慢日志中的每一个条目。可以只返回N个最近的条目,将一个附加参数传递给命令(例如 SLOWLOG GET 2)。

    redis 127.0.0.1:6379> slowlog get 2
        1) 1) (integer) 14             //slowlog 唯一标识
           2) (integer) 1309448221     //unix 时间戳
           3) (integer) 15             //命令执行的时间,单位:微秒
           41"ping"                //具体执行的命令,最多记录128
        21) (integer) 13
           2) (integer) 1309448128
           3) (integer) 30
           41"slowlog"
              2"get"
              3"100"

    //其中 Redis 4.0 及以上版本还包含以下两部分:

           5"127.0.0.1:58217"         //客户端IP:Port
           6"worker-123"              //客户端名称

    最后,需要注意此命令需要 2.2.12及以上版本的 redis 才能支持。

    由于慢查询日志是一个先进先出的队列,也就是说如果慢查询比较多的情况下,可能会丢失部分慢查询命令,为了防止这种情况发生,可以定期执行slowlog get命令将慢查询日志持久化到其他存储中(例如:MySQLElasticSearch等),然后可以通过可视化工具进行查询

    查看当前日志的数量:

    redis 127.0.0.1:6379> SLOWLOG LEN
    (integer) 14

    使用命令 SLOWLOG RESET 可以清空 slow log 。

    redis 127.0.0.1:6379> SLOWLOG LEN
    (integer) 14
    
    redis 127.0.0.1:6379> SLOWLOG RESET
    OK
    
    redis 127.0.0.1:6379> SLOWLOG LEN
    (integer) 0


  • 相关阅读:
    django admin日期变为可以修改
    djangoadmin模块
    mac添加oh my zsh
    Dockerfile文件详解
    CC++初学者编程教程(4) 安装Oracle12c于Windows Sever2012
    Keli Linux与网络安全(2)——初探Keli
    Keli Linux与网络安全(1)——在VMWare中安装Keli系统
    C语言的本质(12)——指针与函数
    C语言的本质(11)——指针与数组
    C语言的本质(10)——指针本质
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/11428899.html
Copyright © 2011-2022 走看看