张子阳的博客

首页 读书 技术 店铺 关于
张子阳的博客 首页 读书 技术 店铺 关于

Consul 健康检查(检查节点) - Part.4

2018-12-27 作者: 张子阳 分类: 分布式系统

在上一节 Consul 注册服务和健康检查(script检查) - Part.3 定义的两个健康检查中,chk_service1和chk_service2分别和服务datacollect.server1和datacollect.server2关联起来了。健康检查也可以不关联任何服务独立运行。例如,我们可以写一个健康检查的脚本,检查节点的内存,当内存占用低于70%时返回 通过,介于70%~90%之间时返回 警告,高于90%时返回失败。

编写检查内存的Python脚本

前面两篇的操作都是在我的个人工作电脑上,在生产环境下通常部署在Linux系统上。因为检查Mac/Windows/Linux 内存的脚本各不相同,为了使脚本更通用,接下来的操作我们在 Consul 安装和配置Server - Part.1 中搭建的局域网服务器192.168.1.56上进行(这台是 consul server但是 consul server也可以兼作client)。先创建所需的目录:

# mkdir -p /opt/consul/scripts;

编写内存检查的python脚本,check_mem.py,位于创建的/opt/consul/scripts下:

import sys

if __name__ == '__main__':
    
    with open('/proc/meminfo') as meminfo:
        for line in meminfo:
            if line.startswith('MemFree'):
                free = line.split()[1]                
            if line.startswith('MemTotal'):
                total = line.split()[1]                
    
    freeMem = int(free)/1024.0
    totalMem = int(total)/1024.0
    percent = freeMem*100/totalMem

    print "free:{0:.2f}MB({1:.2f}%), total:{2:.2f}MB".format(freeMem, percent, totalMem)

    occupied = 100 - percent
    
    if occupied < 70 :
        sys.exit(0)
    elif occupied >= 70 and occupied < 90:
        sys.exit(1)
    else:
        sys.exit(2)

编写健康检查的配置文件

创建一个check_mem.json文件,放置在配置文件目录下(/opt/consul/config):

{
  "checks": [
    {
      "id": "chk_mem",
      "name": "chk_mem",
      "notes": "检查系统内存占用",
      "args": ["python", "/opt/consul/scripts/check_mem.py"],
      "interval": "10s"
    }
  ]
}

这里需要注意的是:配置文件中不再有service_id节点,也就是这个健康检查脚本不和任何的服务关联。

运行查看结果

解析来执行consul reload重新加载一下配置文件:

# consul reload
Configuration reload triggered

打开consul WebUI,可以看到类似下面这样的结果,说明已经加载成功:

使用脚本检查内存占用

总结

这样我们就完成了对节点内存占用情况的检查,类似地,可以编写对节点 CPU、磁盘剩余、网络带宽 占用的检查。这里就不再演示了。接下来,我们来看下如何对Web服务器进行服务注册和健康检查。

感谢阅读,希望这篇文章能给你带来帮助!