Redis 负载监控——redis-monitor

2015-11-25 10:19:27 +08:00
 50vip
## redis-monitor ##

一个 web 可视化的 redis 监控程序。

欢迎 issue 和 pr 。[https://github.com/hustcc/redis-monitor]( https://github.com/hustcc/redis-monitor)

使用 Flask 来开发的,代码结构非常简单,适合移植到公司内网使用。

### Demo ###

[http://www.atool.org:7259/]( http://www.atool.org:7259/)

### What ###

1. redis 服务器信息,包括 redis 版本、上线时间、 os 系统信息等等
2. 实时的消息处理信息,例如处理 command 数量、连接总数量等
3. 联通时间动态图表
4. ops 时间动态图表
5. 内存占用、 cpu 消耗实时动态图表
6. 内存缓存 1 秒数据,防止监控程序造成 redis 负荷

### 为啥要做这个?###

1. 之前 git 上搜了一堆,包括 osc 上推荐的 redis 项目,都配置不起来,有一个配置起来了但是 2.6 和 2.8 不兼容!
2. 有一个可以运行起来,但是每次都是直接连接 redis ,非常耗,如果同时 10 个人看监控图表,那么每秒造成 10 个 redis 连接,十分坑爹
3. 还有就是 git 上的一些配置起来太麻烦


### 如何使用? ###

- 首先安装 Flask Web 需要得库

> pip install -r requirements.txt

- 运行 web 程序即可

> ./run_monitor

或者

> python run_monitor.py

- 本地打开 127.0.0.1:7259 就可以看完网页了。截图见下方!

### screenshot ###

![shot_1]( https://raw.githubusercontent.com/hustcc/redis-monitor/master/doc/shot/shot_1.png)

![shot_2]( https://raw.githubusercontent.com/hustcc/redis-monitor/master/doc/shot/shot_2.png)

![shot_3]( https://raw.githubusercontent.com/hustcc/redis-monitor/master/doc/shot/shot_3.png)
12622 次点击
所在节点    Python
52 条回复
50vip
2015-11-25 14:07:39 +08:00
@carilove python2.7 ,这个一点没有在 md 里说明~使用的基本语法,感觉 3.0 应该问题不大~我抽时间弄个 3.0 试试~
50vip
2015-11-25 14:07:53 +08:00
@iyaozhen 感谢感谢~
inFinityzc
2015-11-25 14:10:12 +08:00
已 Star ,晚上试用~
50vip
2015-11-25 14:13:58 +08:00
@go2sleep 写 go 的,好牛逼的感觉~
carilove
2015-11-25 14:22:01 +08:00
@50vip
有个 bug
Python 2.7, 模块 RedisMonitor.py 的类 RedisMonitor 中的 new_request 方法连接 Redis , port 参数需要转化为 int 。不然会报错
```
r = redis.Redis(host='127.0.0.1', port='6379')
TypeError: an integer is required

```
carilove
2015-11-25 14:23:41 +08:00
@50vip

同理,项目中其他的 redis 连接都需要转一下 int
50vip
2015-11-25 15:00:46 +08:00
@carilove 为什么我的环境也是 2.7 毫无压力,我再测试一下~
50vip
2015-11-25 15:08:11 +08:00
@carilove 我这边 int 和 string 都可以,看了下源码, python redis 自己会转换类型,可以 redis py 版本不同,为了兼容,已经修改代码并且提交了
carilove
2015-11-25 15:40:56 +08:00
@50vip

哦哦,是 redis 版本的问题,我本地的 2.7 环境很久没升了,
redis 是 2.8.0 ,所以会报错
2.10.5 正常。

另外,这个监控蛮好用的。赞
50vip
2015-11-25 15:45:10 +08:00
@carilove 嗯,我的也是 2.10 的~~~现在有两个待做的东西:
1. websocket 代替 js 轮询
2. redis db 的一些操作,例如 set , del , flush 等简单操作,可以代替一些 redis 的 gui 客户端
go2sleep
2015-11-25 15:48:21 +08:00
@50vip 这么快就换头像了!
ericls
2015-11-25 15:52:24 +08:00
已 star 同类中最好的 (我用过的、开源的里面)

可以翻译个英文
50vip
2015-11-25 15:54:50 +08:00
@go2sleep 绝对是管理员帮我弄的,我绝对没有换头像啊~
50vip
2015-11-25 15:56:56 +08:00
@ericls 是说我这个吗?求推荐你用的哪个~
6IbA2bj5ip3tK49j
2015-11-25 16:15:15 +08:00
虽然还没用过 redis ,但是觉得看起来好厉害。
ericls
2015-11-25 16:18:23 +08:00
@50vip 是你这个。。 抱歉 我断句有歧义
tangthis
2015-11-25 16:42:06 +08:00
安装报错了。
Downloading requests-2.8.1-py2.py3-none-any.whl (497kB)
2% | | 12kB 12.1MB/s eta 0:00:01 Exception:
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\pip\_vendor\requests\packages\urllib3\re
sponse.py", line 186, in read
data = self._fp.read(amt)
File "C:\Python34\lib\site-packages\pip\_vendor\cachecontrol\filewrapper.py"
, line 49, in read
data = self.__fp.read(amt)
File "C:\Python34\lib\http\client.py", line 500, in read
return super(HTTPResponse, self).read(amt)
File "C:\Python34\lib\http\client.py", line 539, in readinto
n = self.fp.readinto(b)
File "C:\Python34\lib\socket.py", line 374, in readinto
return self._sock.recv_into(b)
File "C:\Python34\lib\ssl.py", line 751, in recv_into
return self.read(nbytes, buffer)
File "C:\Python34\lib\ssl.py", line 623, in read
v = self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Python34\lib\site-packages\pip\basecommand.py", line 232, in main
status = self.run(options, args)
File "C:\Python34\lib\site-packages\pip\commands\install.py", line 339, in r
un
requirement_set.prepare_files(finder)
File "C:\Python34\lib\site-packages\pip\req\req_set.py", line 355, in prepar
e_files
do_download, session=self.session,
File "C:\Python34\lib\site-packages\pip\download.py", line 782, in unpack_ur
l
session,
File "C:\Python34\lib\site-packages\pip\download.py", line 667, in unpack_ht
tp_url
from_path, content_type = _download_http_url(link, session, temp_dir)
File "C:\Python34\lib\site-packages\pip\download.py", line 843, in _download
_http_url
_download_url(resp, link, content_file)
File "C:\Python34\lib\site-packages\pip\download.py", line 615, in _download
_url
for chunk in progress_indicator(resp_read(4096), 4096):
File "C:\Python34\lib\site-packages\pip\utils\ui.py", line 46, in iter
for x in it:
File "C:\Python34\lib\site-packages\pip\download.py", line 580, in resp_read

decode_content=False):
File "C:\Python34\lib\site-packages\pip\_vendor\requests\packages\urllib3\re
sponse.py", line 256, in stream
data = self.read(amt=amt, decode_content=decode_content)
File "C:\Python34\lib\site-packages\pip\_vendor\requests\packages\urllib3\re
sponse.py", line 201, in read
raise ReadTimeoutError(self._pool, None, 'Read timed out.')
pip._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnec
tionPool(host='pypi.python.org', port=443): Read timed out.


C:\Users\Administrator\Documents\GitHub\redis-monitor>python run_monitor.py
Traceback (most recent call last):
File "run_monitor.py", line 8, in <module>
from app import app
File "C:\Users\Administrator\Documents\GitHub\redis-monitor\app\__init__.py",
line 12, in <module>
from app.views import main_views
File "C:\Users\Administrator\Documents\GitHub\redis-monitor\app\views\main_vie
ws.py", line 9, in <module>
from app.utils import RequestUtil, OtherUtil
File "C:\Users\Administrator\Documents\GitHub\redis-monitor\app\utils\OtherUti
l.py", line 9, in <module>
from CJsonEncoder import CJsonEncoder
ImportError: No module named 'CJsonEncoder'
raingolee
2015-11-25 16:58:33 +08:00
@50vip 是这样的, monitor 的信息会多很多,可以参考一下 redis-live
50vip
2015-11-25 17:43:28 +08:00
@raingolee 嗯,是的,但是 monitor 毕竟的调试的,如果用到线上环境,会造成性能问题,对于线上 monitor 过的,可以仅仅关注一些简单的指标。
50vip
2015-11-25 17:43:43 +08:00
@ericls 哈哈,感谢~~~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/238719

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX