Cochbase不但提供专业的Web管理界面,还提供丰富的RESTful API,我们可以定制化对集群、节点、Document进行管理,以及获取运行信息。由于当前我司生产环境没有对Couchbase集群节点的状态进行监控,为此我们计划使用 GET pools/nodes HTTP方法获取节点的健康状态。
curl -u [admin-name]:[password] http:
//
[localhost]:[port]
/pools/nodes
一般情况下,我们可以在控制台执行上条命令抓取节点的信息。但是为了对信息进行过滤,并和我司监控平台进行对接,我们用Python实现这一系列功能。
getNodeStats(ip)函数用来从Couchbase获取节点信息,主要使用urllib.urlopen()函数发起请求,获取响应信息(JSON格式)。json.loads()函数将返回的JSON数据转换成Python可读的数据结构(字典)。我们就可以通过字典的Key-Value特性,获取节点Status信息:
可以看到上述输出节点的"status"为 "healthy"。如果节点状态不正常,则输出为"status": "healthy"。
而与监控平台的对接相当简单,将节点和状态不健康的信息通过msend脚本发送给告警服务器即可,不过需要在监控端进行一定设置。
os.system(
"/root/patroltest/msend -n cellect -a cb_cluster -b \"ci_ip="
+
k
+
";c_msg="
+
node_dict[k]
+
"\" -c root/patroltest/mcell.dir"
)
最后将脚本放到crontab定时任务里,周期调用执行即可:)
这里需要注意Python脚本中的各文件路径必须是绝对路径,否则在crontab调用执行会报错!
注意:本代码测试的Couchbase版本为4.1。4.6及更新版本的测试结果可能与此不同,各看官可自行探索。