本文是对控制台自定义云监控的补充,意在帮助用户快速掌握自定义云监控的数据上报、数据查看及创建报警规则。
准备工作
- 准备一个子账号并给子账号创建AK、SK或者一个ECS角色(上报自定义数据的机器是ECS),并给子用户或者角色授权使其具备上报数据的权限。
a、创建一个子账号并给子账号创建AK可以查看此处
b、如何给ECS绑定一个角色并授予相应权限可查看此处
- 创建指标仓库 ,注意创建指标仓库会产生费用
上报数据
count1=`ps -ef | grep nginx | grep -v grep | wc -l`count2=`ps -ef | grep sshd | grep -v grep | wc -l`date >> /tmp/cms.log aliyun cms PutHybridMonitorMetricData --region cn-hangzhou --MetricList.1.Name process --MetricList.1.Labels.1.Key=process_name --MetricList.1.Labels.1.Value=nginx --MetricList.1.Labels.2.Key=host --MetricList.1.Labels.2.Value=zjk --MetricList.1.Value $count1--Namespace'xiaobo'aliyun cms PutHybridMonitorMetricData --region cn-hangzhou --MetricList.1.Name process --MetricList.1.Labels.1.Key=process_name --MetricList.1.Labels.1.Value=sshd --MetricList.1.Labels.2.Key=host --MetricList.1.Labels.2.Value=zjk --MetricList.1.Value $count2--Namespace'xiaobo'
count1 变量名字值为nginx的进程数量
count2 变量名字值为sshd进程的数量
#这两个变量名可以自定义,只是方便后面将获取的数据复制给CLI中的 MetricList.1.Value
#上面用了2个请求来上报2个进程的数量数据,实际可以合并成一个请求,一次上报两个metric的值,分成两条写只是为了更易懂。
--region 统一cn-hangzhou
--MetricList.1.Name 这里上报的第一个Metric 名字,我命名为proccess , 实际上命名为process_count 更合适,因为我们上报的数据是进程的数量
--MetricList.1.Labels.1.Key 此次上报的第一个Metric的第一个标签键 process_name
--MetricList.1.Labels.1.Value 此次上报的第一个Metric的第一个标签的值 nginx
--Namespace 是上报数据到哪个仓库 (前面准备工作创建的指标仓库的名字)
这里的Label 作用就是阿里云产品预设监控项中的 Dimensions ,通过label 我们才能确定上报的是哪个主机、进程的数量。脚本写好之后,我们还需要确保持续的上报(如果只上报异常,不需要持续的上报数据),我这里采用的是crond 定时上报
*/1 * * * * bash /root/cms.sh >> /tmp/cms.log # /root/cms.sh 是前面写的脚本的路径
注意:这里是每分钟执行一次后面报警规则周期就是1分钟。 如果长时监控,上面的脚本产生的日志或会占用大量磁盘空间,此处只是为了说明功能的使用,不考虑日志分割及清理功能。
查看数据
至此数据上报已完成,到云监控指标仓库控制台找到对应的指标仓库查看下上报的数据,下图是使用前面脚本上报的数据,如果多个主机就可以根据label 确定是哪个主机(zjk)哪个进程(nginx)的进程数量
创建报警规则
点击上图中的另存为报警规则会弹出创建报警规则窗口,在报警表达式里可以获取指定的数据:
例如 process{process_name="nginx",host="zjk"} 表示获取主机zjk中nginx进程的数量,写好后点击查询数据可以查到说明表达式填写正确,但是表达式不仅要查出数据还要给出报警条件,
最终写好的表达式 process{process_name="nginx",host="zjk"}<1
意思是当进程数量小于1时告警(由于进程数量是整数,小于1就意味着nginx 主进程异常退出了),实际表达式根据自己需要填写
这里需要注意的是无数据处理方式,即没有上报数据时采取的措施:
- 不做任何处理 (适合非持续上报数据的场景,例如只上报异常的情况)
- 视为恢复(适合只上报异常数据,非连续上报数据的场景)
- 无数据告警(适合上面这种持续上报数据的情况,没有上报数据大概率是服务器异常,所以无数据也要告警)
至此一个自定义监控就创建好了,可以故意将进程停掉或者修改报警规则表达式去触发设置的告警规则看是否满足需求。