阿里云 redis 监控redis 需要监控哪些参数

使用Redis之前5个必须了解的事情-阿里云资讯网
使用Redis之前5个必须了解的事情
发布时间:
更新时间:
来源:网络
上传者:用户
使用Redis开发应用程序是一个很愉快的过程,但是就像其他技术一样,基于Redis的应用程序设计你同样需要牢记几点。在之前,你可能已经对关系型数据库开发的那一整个套路了然如胸,而基于Redis的应用程序开发也有许多相似的地方,但是你必须牢记以下两点——Redis是个内存数据库,同时它是单线程的。因此,在使用Redis时,你需要注意以下几点:
1. 掌控储存在Redis中的所有键
数据库的主要功能是储存数据,但是对于开发者来说,因为应用程序需求或者数据使用方法的改变,忽略存储在数据库中的某些数据是非常正常的,在Redis中同样如此。你可能忽视期满某些键,也可能因为应用程序的某个模块弃用而忘掉这些数据。
无论哪种情况,Redis都存储了一些不再使用的数据,平白无故的占用了一些空间。Redis的弱结构数据模式让集中储存的内容很难被弄清,除非你为键使用一套非常成熟的命名法则。使用合适的命名方法会简化你的数据库管理,当你通过你的应用程序或者服务做键的命名空间时(通常情况下是使用冒号来划分键名),你就可以在数据迁移、转换或者删除时轻松的识别。
Redis另一个常见用例是作为热数据项作的第二数据存储,大部分的数据被保存在其他的数据库中,比如PostgreSQL或MongoDB。在这些用例中,当数据从主存储移除时,开发者经常会忘记删除Redis中对应的数据。这种存在跨数据存储的情况下,通常需要做级联删除,这种情况下,可以通过在Redis配置保存特定数据项的所有识别符来实现,从而保证数据在主数据库被删除后,系统会调用一个清理程序来删除所有相关副本和信息。
2. 控制所有键名的长度
在上文我们说过要使用合适的命名规则,并且添加前缀来识别数据走向,因此这一条看起来似乎与之违背。但是,请别忘记,Redis是个内存数据库,键越短你需要的空间就越少。理所当然,当数据库中拥有数百万或者数十亿键时,键名的长度将影响重大。
举个例子:在一个32位的Redis服务器上,如果储存一百万个键,每个值的长度是32-character,那么在使用6-character长度键名时,将会消耗大约96MB的空间,但是如果使用12-character长度的键名时,空间消耗则会提升至111MB左右。随着键的增多,15%的额外开销将产生重大的影响。
3. 使用合适的数据结构
不管是内存使用或者是性能,有的时候数据结构将产生很大的影响,下面是一些可以参考的最佳实践:
取代将数据存储为数千(或者数百万)独立的字符串,可以考虑使用哈希数据结构将相关数据进行分组。哈希表是非常有效率的,并且可以减少你的内存使用;同时,哈希还更有益于细节抽象和代码可读。
合适时候,使用list代替set。如果你不需要使用set特性,List在使用更少内存的情况下可以提供比set更快的速度。
Sorted sets是最昂贵的数据结构,不管是内存消耗还是基本操作的复杂性。如果你只是需要一个查询记录的途径,并不在意排序这样的属性,那么轻建议使用哈希表。
Redis中一个经常被忽视的功能就是bitmaps或者bitsets(V2.2之后)。Bitsets允许你在Redis值上执行多个bit-level操作,比如一些轻量级的分析。
4. 使用SCAN时别使用键
从Redis v2.8开始,SCAN命令已经可用,它允许使用游标从keyspace中检索键。对比KEYS命令,虽然SCAN无法一次性返回所有匹配结果,但是却规避了阻塞系统这个高风险,从而也让一些操作可以放在主节点上执行。
需要注意的是,SCAN 命令是一个基于游标的迭代器。SCAN 命令每次被调用之后, 都会向用户返回一个新的游标,用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。同时,使用SCAN,用户还可以使用keyname模式和count选项对命令进行调整。
SCAN相关命令还包括SSCAN 命令、HSCAN 命令和 ZSCAN 命令,分别用于集合、哈希键及有续集等。
5. 使用服务器端Lua脚本
在Redis使用过程中,Lua脚本的支持无疑给开发者提供一个非常友好的开发环境,从而大幅度解放用户的创造力。如果使用得当,Lua脚本可以给性能和资源消耗带来非常大的改善。取代将数据传送给CPU,脚本允许你在最接近数据的地方执行逻辑,从而减少网络延时和数据的冗余传输。
在Redis中,Lua一个非常经典的用例就是数据过滤或者将数据聚合到应用程序。通过将处理工作流封装到一个脚本中,你只需要调用它就可以在更短的时间内使用很少的资源来获取一个更小的答案。
专家提示:Lua确实非常棒,但是同样也存在一些问题,比如很难进行错误报告和处理。一个明智的方法就是使用Redis的Pub/Sub功能,并且让脚本通过专用信道来推送日志消息。然后建立一个订阅者进程,并进行相应的处理。
原文链接:5 Key Takeaways for Developing with Redis (编译/仲浩 审校/魏伟)
免费订阅“CSDN云计算(左)和CSDN大数据(右)”微信公众号,实时掌握第一手云中消息,了解最新的大数据进展!
CSDN发布虚拟化、Docker、OpenStack、CloudStack、数据中心等相关云计算资讯, & & 分享Hadoop、Spark、NoSQL/NewSQL、HBase、Impala、内存计算、流计算、机器学习和智能算法等相关大数据观点,提供云计算和大数据技术、平台、实践和产业信息等服务。 & & & & & &
本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:zixun-group@ 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
昨天是愚人节,110民警又有些紧张了。往年的愚人节,一些人不仅是跟朋友开开玩笑,甚至拨打110报假警拿警察“开涮”,占用了救人于危难的“生命线”。记者从市公安局勤务指挥部了解到,近期本市110日均报警量达到两万五千件,其中近六成标记为滋扰、错打或无声,其中不乏报假警的。民警提醒市民群众,恶意骚扰110是违法行为,公安机关将依法严肃处理报假警等行为,对构成犯罪的还要依法追究刑事责任。 跟媳妇拌...
DoNews 4月1日消息(记者 赵玥)12年前的4月1日,46岁的张国荣在香港东方文华酒店24楼,完成了人生最后一个美丽的纵身。从此,2003年的标签不再是非典,4月1日也不再仅仅是愚人节。 和往年一样,在4月1日,张国荣的忠实歌迷将在香港伊利沙伯体育馆举行“继续张国荣&传奇回归&再创经典”音乐会。在香港尖沙咀星光大道、文华东方酒店、杜莎夫人蜡像馆近日开始设献花...
清明小长假
清明节是我国的传统节日,祭奠先人更是我国的优良传统,但每年到了清明时节由于不少市民扫墓时采用烧纸钱、点香烛、放鞭炮等传统祭奠方式,既污染环境,还极易引发山林火灾。 昨天,记者从沙河口区城建局风景林管理处获悉,今年该区将继续推出系列活动倡导文明祭祀,绿色清明。 据了解,今年清明节期间,沙区城建局风景林管理处将在老麻沟墓地继续开展“烧纸换鲜花”活动,在防火通道入口处设置宣传台,放置宣传板,悬挂条...
清明小长假
记者李晓波文王亚鸽摄影 核心提示清明节临近,不少市民到市郊各大陵园祭扫,迎来节前小高峰。昨日上午,记者走访发现,今年很多人选择鲜花等代替焚香、烧纸钱等传统形式祭奠先人、寄托哀思,环保、文明、绿色的祭祀形式逐渐成为了很多市民的选择。 现场鲜花追忆亲人,绿色祭祀多了起来 随着清明临近,市民扫墓活动渐入高峰。昨日上午,记者走访市郊多个陵园看到,园内不少市民前来悼念已逝的亲人,园区醒目地方还挂着“倡...
清明小长假
中新网昆明4月1日电 (张伟明)记者1日从昆明铁路局获悉,2015年“清明”小长假铁路运输期限为4月3日至4月6日,共计4天,昆明铁路局采取增开临客、加挂车厢应对清明节出行客流。 “清明”小长假,昆明铁路局管内客流将以中、短途旅游、探亲、祭祀客流为主,具有出行计划性强、流量大、流向集中且不均衡的特点,客流主要集中在昆明至南宁、成都、重庆、贵阳等周边城市,以及管内曲靖、宣威、大理、丽江、楚雄、...
清明小长假
大学路一家鲜花店内,菊花被摆在了显眼的位置。 贺莹莹 摄 本报3月31日讯(记者 贺莹莹) 3月31日,记者在市区多家鲜花店了解到,虽然距离清明还有几天,但是菊花预售已经相当火爆,绿色祭祀越来越被市民接受,平均每枝菊花价格上涨了一元左右。 31日,记者在大学路雅琳鲜花店内看到,店内进门处摆满了菊花,工作人员正在为顾客包装两花篮菊花,“原来都烧纸,不卫生也不安全,现在都崇尚绿色祭祀,而且摆放的...
若您要投稿、删除文章请联系邮箱:zixun-group@,工作人员会在5个工作日内回复。
售前咨询热线
服务与支持
账号与支持
关注阿里云
International我是怎么通过zabbix监控60台阿里云的RDS和redis数据库的
时间: 21:30:17
&&&& 阅读:922
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&前言:&&&&&&&&最近一直在做监控方面的东东,一些基本的东西基本到处都有资料也就不多说了。但是,让监控阿里云的数据库真是把我难住了。研究了许久的阿里云api,虽然代码写出来了,但是遇到一个坑,所以转换了思路,分别用redis和mysqladmin连接数据库,获取连接数和请求数,但是却获取不到实例的CPU使用率。又只好回头研究阿里云的api。花了几天终于踩完所有坑,达到自己想要的效果,具体实现过程如下:正文:& &&&&&&主要添加了以下三条自定义key,第一条通过redis_cli客户端连接redis获取统计数据,第二条通过mysqladmin连接mysql获取统计数据,第三条就是坑我好几天的,通过云监控获取实例信息的key。阿里云的RDS默认是5分钟获取一条监控数据,部分重要的数据库可以设置为1分钟获取一次。不过这个是要收费的。最开始以为都是60秒获取一次监控数据,所以从云监控获取数据时,时间间隔是60秒,就莫名奇妙的出现,有的服务器能获取数据,有的服务器不能获取数据。所以最后的解决思路是,把时间间隔调大,获取好几条数据,然后取最后一条数据就可以了。#zabbix_agentd.conf
UserParameter=redis.get[*],/usr/local/sbin/redis_get.sh&$1&|&grep&-Po&‘$2:\K[.\d]+‘
UserParameter=rds.get[*],mysqladmin&-h&$1&-P&3306&-u&db_username&&extended-status&-p‘password‘&|&grep&-Po&‘$2[^\d]+\K\d+‘
UserParameter=rds.get_from_cms[*],/usr/local/sbin/database_api.py&$1&$2&$3&|&grep&-Po&‘Average":\K[.\d]+‘&|tail&-1为了自已想象中的安全,我把redis服务器的密码单独放在某个文件中,然后通过自己写的脚本读取redis的连接地址,连接密码,和实例名称,这样在增加item的时候只用添加一个实例名称就好,下面脚本会自己通过实例名称获取redis地址和密码。#!/bin/bash
#/usr/local/sbin/redis_get.sh
shadow=/usr/local/sbin/redis_shadow
address=`awk&-vn=$1&‘n&~&$NF{print&$1}‘&$shadow`
password=`awk&-vn=$1&‘n&~&$NF{print&$2}‘&$shadow`
redis-cli&-h&$address&-a&$password&info保存redis的信息放在一个单独的文件中,有新增的redis实例就直接修改这个配置文件就可。#/usr/local/sbin/redis_shadow
redis连接地址&连接密码&实例名称上面的比较简单。但是有个问题。总共60台服务器,每个服务器有3条需要监控的点,所以就得创建180个item,因为redis和rds里面不能放zabbix客户端,所以我就直接通过监控服务器获取60台数据库的监控信息。我真的手动添加了180个item。。。。真是傻的可爱~所以后面监控cpu使用率我就用zabbix的api来批量添加item,顿时爽炸了~不过在此之前,先看看如何通过阿里云的api获取数据库的cpu使用率把。#!/usr/local/bin/python
from&aliyunsdkcore&import&client
from&aliyunsdkcms.request.v&import&QueryMetricListRequest
&&&&#用的云监控的api
import&time
import&sys
import&json
if&len(sys.argv)&!=&4:
&&&&&&&&print&‘\tusage:&python&database_api.py&&your_PrijectName&&&your_Metric&&&your_instanceId&&‘
&&&&&&&&print&‘\thelp&from&/document_detail/28619.html\n‘
&&&&&&&&exit()
clt&=&client.AcsClient(‘your_access_key‘,‘your_key_password‘,‘region_id‘)
&&&&#得先创建access_key哟,region_id可以看region_id的列表,比如华北1是什么id呀之类的。
request&=&QueryMetricListRequest.QueryMetricListRequest()
request.set_accept_format(‘json‘)
request.set_Project(sys.argv[1])
&&&&#此处设置Project用来定义你是redis还是ecs还是rds,具体看查看文档:/document_detail/28619.html?spm=5176.doc.vlxOtm
request.set_Metric(sys.argv[2])
&&&&#此处就是你要获取值的监控项,也可以查看上面的文档
start_time&=&time.strftime(‘%Y-%m-%d&%H:%M:%S‘,time.localtime(time.time()-350))
&&&&#设置一个时间为当前时间的前350秒处
timestamp_start&=&int(time.mktime(time.strptime(start_time,&"%Y-%m-%d&%H:%M:%S")))&*&1000
request.set_StartTime(timestamp_start)
request.set_Dimensions("{‘instanceId‘:‘%s‘}"%sys.argv[3])
&&&&#此处要设置实例id。
request.set_Period(‘60‘)
result&=&clt.do_action(request)
print&result
&&&&#最后得到的是一个json格式的字符串,然后在自定义的key中通过grep获取到对应的值
#result2&=&json.loads(result)
#print&float(result2[‘Datapoints‘][-1][‘Average‘])/usr/local/sbin/database_api.py&$1&$2&$3&|&grep&-Po&‘Average":\K[.\d]+‘&|tail&-1
单独把自定义key的后半部分解释一下。在创建item时,database_api.py会通过key获取到三个值
分别是Project,Metric和实例id。然后通过grep提取json字符串中Average对应的值,因为有可能获取
很多值,所以用tail获取最后一个值。注:主要的坑就是上面的哪个start_time,如果获取不到值就再设置大点就好。下面就是批量增加item的代码。大致参考的是别人的。其中需要注意 的一点就是我是手动获取applicationid的,可以连接上zabbix后通过 zapi.application.get({"filter":{‘name‘:["APPLICATION_NAME"]}})[0][‘applicationid‘] 获取application的id。其中APPLICATION_NAME就是你的application的名字咯。如果并不需要放入某个application,可以删掉其中的applications那一项。#!/usr/bin/python
#-*-&coding:utf8&-*-
import&sys
from&zabbix_api&import&ZabbixAPI
server&=&"http://YourZabbixServerAddress"
username&=&"Admin"
password&=&"password"
zapi&=&ZabbixAPI(server=server,&path="",&log_level=0)
zapi.login(username,&password)
def&get_hostinfo():
&&&&&&&&#主要用来获取host的id,接口的id,其中HOST_NAME就是你想往哪个host里面增添item。
&&&&host_info=zapi.host.get({"selectInterfaces":["interfaceid"],"filter":{"host":["HOST_NAME"]}})
&&&&hostid&=&host_info[0][‘hostid‘]
&&&&interfaceid&=&&host_info[0][‘interfaces‘][0][‘interfaceid‘]
&&&&return&(hostid,interfaceid)
def&create_item(name,key):
&&&&&a&=&get_hostinfo()
&&&&&hostid&=&a[0]
&&&&&interfaceid&=&a[1]
&&&&&create_item=zapi.item.create(
&&&&&&&&&{
&&&&&&&&&&&&&"name":name,
&&&&&&&&&&&&&"key_":key,
&&&&&&&&&&&&&"hostid":hostid,
&&&&&&&&&&&&&"type":0,
&&&&&&&&&&&&&"value_type":0,#0是float,3是整数
&&&&&&&&&&&&&"interfaceid":interfaceid,
&&&&&&&&&&&&&"date_type":0,
&&&&&&&&&&&&&"delay":60,
&&&&&&&&&&&&&"history":7,
&&&&&&&&&&&&&"trends":90,
&&&&&&&&&&&&&"status":0,
&&&&&&&&&&&&&"applications":[&#如果不放入某个applications可以删掉此项
&&&&&&&&&&&&&&&&&"2311"
&&&&&&&&&&&&&]
&&&&&&&&&}
&&&&&return&"item&create&success"
if&__name__&==&"__main__":
&&&&arg1=‘CpuUsage‘
&&&&with&open(‘conf‘)&as&f:
&&&&&&&&&&&&#从conf文件中读取实例id和实例名称。
&&&&&&&&for&i&in&f:
&&&&&&&&&&&&rds=i.split()
&&&&&&&&&&&&key="rds.get_from_cms[acs_rds,%s,%s]"%(arg1,rds[0])
&&&&&&&&&&&&name="%s-%s"%(rds[1],arg1)
&&&&&&&&&&&&print&key,name
&&&&&&&&&&&&result=create_item(name,key)&#调用添加函数。
&&&&&&&&&&&&print&result#conf
实例id&实例名称本文出自 “” 博客,请务必保留此出处标签:&&&&&&&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!

我要回帖

更多关于 阿里云redis 的文章

 

随机推荐