需求

近期须要给自己的server加入监控器。目的是监控server的内存、CPU、磁盘占用率,资源占用率过高的话能给自己发个提醒。当前主流的平台通常会提供邮件、短息、甚至会提供微信提醒,只是这类提醒包括的噪音太多了(夹杂着各种无关的社交信息),我仅仅是单纯的须要接收到server的预警。由于server环境并不复杂,所以不考虑主流的与监控平台(毕竟搭建起来还是挺复杂的)。

选择产品

有非常多产品支持 incoming(就是通过调用应用提供的 API 把我们自己定义的消息转发送该应用)。我打算使用 JBox ,由于它提供了 Android、和 iOS client支持并且是开源的所以后期有什么需求都能够自己加上去(另一点最基本的是使用起来非常easy。API 文档仅仅有一个接口。基本没有学习成本)。

着手操作

依照 JBox 教程 来,首先新建一个自己定义集成,获得一个 Webhook url

http://jbox.jiguang.cn/v1/message/dxwYTMfrC8GRhU5/vwlrqCegmp  //注意:这里填写自己集成的 Webhook url,每一个集成的 Webhook 都不一样。

首先编写我们的监控脚本,这里我写了两个脚本

#内存监控脚本  monitor_memory.sh
webhook="http://jbox.jiguang.cn:80/v1/message/dxwYTMfrC8GRhU5/vwlrqCegmp" #注意:这里填写自己集成的 Webhook url
#告警阈值30G。少于则告警,频率 30分钟 检查一次
normal=30 #取得总内存 #取得内存分页数 freemk=`vmstat 5 2 | tail -n 1 | awk '{print $5}'`;
#每一页是4K ,所以乘以4 freemm=`expr $freemk \* 4`;
#转换为 G freemem=`echo $freemm/1024/1024|bc`; echo `date +%Y%m%d%H%M`" Memory:" "M" all $freemem"G" avail; if [ $freemem -lt $normal ] then echo "当前内存"$freemem"G,少于"$normal"G" #打印告警信息 这里能够插入短信库。发送至手机
title="内存告警!! "
message="当前内存"$freemem"G,少于"$normal"G"
memoryAlertJson='{"title":"'${title}'"'',"message":"'${message}'"}'
echo $memoryAlertJson # 这里发送预警。该条消息会转发到 JBOx app
curl -H "Content-Type: application/json" -X POST -d $memoryAlertJson $webhook
fi
# 磁盘监控脚本 monitor_disk.sh
webhook="http://jbox.jiguang.cn:80/v1/message/dxwYTMfrC8GRhU5/vwlrqCegmp"
normal=10 #当超过 10% 这个值时产生告警,这里由于測试 所以设得非常低,这个能够依据自己的需求来添加 DiskPercent=`df |grep -w / |awk '{print $5}'|awk -F '%' '{print $1}'`;
echo $DiskPercent;
if [ $normal -lt $DiskPercent ]
then
echo "硬盘 使用率告警"
title="硬盘 使用率告警!!"
message="当前使用率"$DiskPercent"%,大于"$normal"%"
DiskAlertJson='{"title":"'${title}'"'',"message":"'${message}'"}'
echo $DiskAlertJson
# 这里发送预警,该条消息会转发到 JBOx app
curl -H "Content-Type: application/json" -X POST -d $DiskAlertJson $webhook
fi

我把这两个脚本加在 crontab 运行计划里面

$ crontab -e

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
# 一分钟运行一次脚本
* * * * * /bin/bash /home/ubuntu/monitor_memory.sh >>/home/ubuntu/moniter_memory.log
* * * * * /bin/bash /home/ubuntu/monitor_disk.sh >>/home/ubuntu/monitor_disk.log

imageMogr2/auto-orient/strip%7CimageView2/2/w/1240">


作者:HuminiOS - 极光

原文:10 分钟实现一个自己的server监控器

知乎专栏:极光日报

10 分钟实现一个自己的server监控器的更多相关文章

  1. CBrother脚本10分钟写一个拯救“小霸王服务器”的程序

    CBrother脚本语言10分钟写一个拯救“小霸王服务器”的程序 到了一家新公司,接手了一坨c++服务器代码,到处内存泄漏,这服务器没有数据库,挂了后重启一下就好了,公司就这么凑活着用了几年了,定时重 ...

  2. 10分钟搭建一个小型网页(python django)(hello world!)

    10分钟搭建一个小型网页(python django)(hello world!) 1.安装django pip install django 安装成功后,在Scripts目录下存在django-ad ...

  3. Django从Models 10分钟定制一个Admin后台

    目录 Django从Models 10分钟建立一套RestfulApi Django从Models 10分钟定制一个Admin后台 简介 Django自带一个Admin后台, 支持用户创建,权限配置和 ...

  4. python scrapy 入门,10分钟完成一个爬虫

    在TensorFlow热起来之前,很多人学习python的原因是因为想写爬虫.的确,有着丰富第三方库的python很适合干这种工作. Scrapy是一个易学易用的爬虫框架,尽管因为互联网多变的复杂性仍 ...

  5. Java工作流引擎结合可视化表单开发,10分钟完成一个业务流程发布

    回忆以前工作流引擎的应用,感觉历历在目啊!当初公司接了一个项目关于政府单位公文流转的管理系统,一开始客户跟我画了十多张业务流程图.话说这十多张业务流程图,涉及的业务范围还蛮多,像用审批授权,开通流程, ...

  6. 【URLOS应用开发基础】10分钟制作一个nginx静态网站环境应用

    URLOS开发者功能已上线有一段时间了,目前通过部分开发者的使用体验来看,不得不说URLOS在服务器软件开发效率方面确实有着得天独厚的优势,凭借docker容器技术与其良好的应用生态环境,URLOS必 ...

  7. 10分钟写一个markdown编辑器

    marked.js Marked是一个Markdown解析引擎. vue.js Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vu ...

  8. 10分钟完成一个最最简单的BLE蓝牙接收数据的DEMO

    这两天在研究蓝牙,网上有关蓝牙的内容非常有限,Github上的蓝牙框架也很少很复杂,为此我特地写了一个最最简单的DEMO,实现BLE蓝牙接收数据的问题, 不需要什么特定的UUID, 不需要什么断开重连 ...

  9. spring-data-rest的魔力 10分钟实现增删改查

    目录 创建项目 启动项目 添加person 查看person 及 person 列表 条件查询 分页查询 controller 去哪里了 自定义 spring-data-rest 魔力之外的contr ...

随机推荐

  1. [0day]基础工具学习

    事实上非常多工具多少都使用的比較熟悉了. 可是仍有一些点还是比較有趣以及我不知道的.毕竟第一章,查缺补漏的. (话说这个成语在高三冲刺的时候,老师用得最多,当时还非常悲哀的一直补东墙.漏西墙.始终认为 ...

  2. Linux使用jstat命令查看jvm的GC情况(转)

    B. jstack jstack主要用来查看某个Java进程内的线程堆栈信息.语法格式如下: 1 jstack [option] pid 2 jstack [option] executable co ...

  3. 页游安全攻与防,SWF加密和隐藏密匙

    原文链接:http://netsecurity.51cto.com/art/201211/364775.htm 页游,最最核心的就是客户端(swf)与服务端的游戏通信了.游戏通信产生的封包,内容是否可 ...

  4. golang的缓冲channel和无缓冲channel的区别

    话说golang的channel同步的定义真是让人无力吐槽,码农的用户体验就这么难搞么,超耐磨阿,无缓冲和缓冲居然有这么大区别....靠 转载一段网上的资料 --------------------- ...

  5. The application’s PagerAdapter changed the adapter’s contents without calling PagerAdapter#notifyDa

    错误原因是在于修改了PageAdapter,却没有调用 PageAdapter的nodifyDataSetChanged方法.注意刷新数据 需要在主线程. 今天在做项目时出现了这个问题,一直报没有调用 ...

  6. Python学习(三)流程控制

    Python流程控制 本章介绍 python 的基础流程控制.包括 if 条件语句.for 循环 和 while 循环语句: continue 及 break 的用法等. 基本用法与 C 和 Java ...

  7. VisualStudio使用GIT

    使用GIT进行源码管理 -- 在VisualStudio中使用GIT GIT作为源码管理的方式现在是越来越流行了,在VisualStudio 2012中,就通过插件的现实对GIT进行了官方支持,并且这 ...

  8. Spring3之InternalResourceViewResolver

    打开Spring的源代码,我们可以在org.springframework.web.servlet.view包下看到很多的 View和ViewResolver类;View类为我们提供一些缺省的待扩展的 ...

  9. IIS7的CMD指令

    AppCmd.exe工具所在目录 C:\windows\sytstem32\inetsrv\目录下 使用命令行管理IIS 7.0时,需要使用IIS7.0提供的全新管理工具AppCmd.exe.AppC ...

  10. 数学图形(2.26) 3D曲线结

    我收集的几种曲线结 knot(huit) #http://www.mathcurve.com/courbes3d/noeuds/noeudenhuit.shtml vertices = 1000 t ...