为什么80%的码农都做不了架构师?>>>
agent有两个主要的功能:系统管理和应用健康检测。健康检测如果是和服务相关联的,则被认为是在应用层面的检测。检测的定义可以通过配置文件定义,或者在agent运行时通过HTTP接口来定义。主要有两种不同的检测类型:
script+interval:该类型的检测依赖于调用外部程序的执行以及退出的状态,可能会产生一些输出,脚本是和执行时间配合的(每30s执行一次),这和nagios的插件系统有点类似。
TTL:这些检测保留在一个TTL周期内服务的状态。这些状态的检测必须周期性的通过HTTP接口进行更新,如果在给定的TTL周期内一个系统的状态更新失败,则检测会被标记为failed。这种机制允许应用直接汇报他的健康状态,例如:一个web应用可以通过curl来直接汇报他的状态,如果web失效,则TTL会过期后,健康检测则进入critical状态。
脚本定义类似这样:
{
"check": {
"id": "mem-util",
"name": "Memory utilization",
"script": "/usr/local/bin/check_mem.py",
"interval": "10s"
}
}
TTL定义类似这样:
{
"check": {
"id": "web-app",
"name": "Web App Status",
"notes": "Web app does a curl internally every 10 seconds",
"ttl": "30s"
}
}
两个定义都必须包含name变量,也可以选择性的提供id和notes变量,在每个节点的所有检测都需要一个唯一的ID,因此如果name存在冲突,则必须提供id。notes变量提供的信息主要是描述性信息。在命令行上可以配置-config-file或者-config-dir来指定配置文件的位置,配置文件的名称必须以.json字符结尾。配置文件修改后,可以通过给agent发送SIGHUP信号来重新加载。
检测脚本的返回值:
Exit code 0 - Check is passing
Exit code 1 - Check is warning
Any other code - Check is failing