PaaS上的App应该如何做监控

UlricQin 发布于 2015/02/11 18:44
阅读 914
收藏 2

笔者在公司的主要工作其实并不是做PaaS,而是做监控,广告链接:[小米运维—互联网企业级监控系统实践](http://www.jianshu.com/p/b2f77285266c) 所以对监控系统有一点点浅显的认识。今天有个朋友问DINP上面app的监控问题,写个文章简单阐述一下,大家共同交流

对于一套PaaS平台而言,最重要的是以下两个方面的监控:

- PaaS平台本身物理机的监控,这些机器app开发者不关心,但是平台构建者关心
- App的域名监控,App最终提供的服务是通过http服务暴露的,http服务健康,App基本就是健康的

## PaaS平台本身物理机的监控

这个和通常的物理机没啥区别,比如:

- cpu.idle使用量的监控
- load.1min机器负载监控
- 内存剩余量监控
- 磁盘剩余量监控
- 磁盘IO监控
- 网卡流量监控
- 基础服务端口,比如22端口监控
- 基础进程监控,比如crond、ntpd进程监控

对于机器本身的监控,有一些成熟的方案可以用,比如zabbix,比如我们之后会开源的open-falcon:https://github.com/open-falcon

## App监控

App实际是个进程,可以采用通常的进程监控和端口监控,但是在PaaS上,App的实例可以很轻易发生迁移,本来在计算节点A,后来迁移到计算节点B,这个就很难提前配置好策略了,因为我们根本无法知道实例会出现在哪个物理机上。

在DINP中是通过两个手段来处理App存活保证的。

- container中的每个实例进程都交由supervisor管理,这样在进程挂掉的时候能够自动拉起
- App可以把自己的health接口告诉DINP,dinp-hm组件会去curl各个实例的health接口来判断存活性

着重说一下第二点通过health接口来判断存活的逻辑:

1. 首先,用户在dashboard中create app的时候,可以选填自己的health接口,所谓的health接口就是一个http接口,这个接口要求返回一个字符串:“ok”,比如php的app可以是/health.php,比如java的应用可以是/health.jsp,比如Python的app可以是/health,比较随意,只要能访问就行。

2. 创建App并部署完之后,比如部署了两个实例:10.1.2.3:49887和10.1.2.4:49876,dinp-hm就开始干活了,每隔一段时间就去curl一下10.1.2.3:49887/health.php(拿php的app举例)和10.1.2.4:49876/health.php,如果发现返回的http code不是200,或者http response body中没有“ok”,说明这个实例挂掉了,干掉!

3. 某个实例宕机被干掉之后,Server会侦测到某个app的实例数少于期望的实例数,就会重新调度找个新机器create一个新实例。整个过程就通了

做的比较简单粗暴,符合DINP的设计初衷:做架构最简单的PaaS平台


加载中
返回顶部
顶部