首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅析测试环境远端Agent工作模式(上)

转转新测试环境,在每台测试服务器都部署了一套HttpAgent(以下简称agent),由eig测试环境管理平台下发命令,agent完成命令接收、解析和响应,实现并发和调度控制,异步调用环境维护脚本。之所以自己开发一整套agent,是因为转转测试环境由多业务组成,复杂度非常高,我们可以根据自己的业务高度定制,做一套适合我们转转的,好用的系统。

概述

agent可以理解为一个轻量级的web服务,技术选型是python2.7+tornado,并开放统一的监听端口。主要工作流程为:接收平台下发的执行请求,agent按照命令进行解析和拆分子任务,并执行相应的脚本,在当前服务器上实现同步与部署的功能,并返回给平台执行结果与日志。除此之外,agent与服务器紧密结合,还承担了服务器性能信息采集、服务状态监控、jacoco数据采集等多种定制化功能。

优点

与现有的ssh直连方式执行命令相比,httpAgent优点在于:

ssh本身需要建立ssh-key授权和kerberos互信,连接成本较高,稳定性也有局限。

agent以http模式接收下发命令,并发支持会更好,而且可控,省时省力;

自更新,自重启,进程守护,安全可靠;

和服务器紧密结合,支持服务器信息采集任务和多种定时任务,定制化程度更高。

agent整体架构

agent整体架构分为install、agent、config、modules、script、util、console、test几部分。本文主要介绍agent作为http web服务器部分的工作原理(上),并抛砖引玉,为下次介绍底层各个模块工作原理做准备。

初始安装(预装)和自更新、自重启

1.预装

agent维护了一份install.sh,完成一键安装。包括主程序、所有依赖软件以及第

三方包,初始化定时、注册、进程守护。在install.sh脚本中,启动了supervisor进程,监管注册进程。

2.自更新、自重启

agent整体工程是一个GIT工程,在crontab里添加了定时任务,每一分钟会定时更新。当有代码提交时,会触发更新,并杀掉agent的所有执行进程,由守护进程自动重启。

agent工作流程

agent接收eig请求和回传日志部分工作流程如下图所示:

有两点另做简要说明:

1. 支持同步和异步调用

对于比较重的任务,如同步、部署、初始化、回收等,耗时较长,agent解析命令之后返回执行状态,另起线程去执行脚本,执行完成之后,返回执行结果及日志。

对于轻量级任务,如授权、删除、jacoco覆盖率统计数据,耗时较短,agent解析完命令之后,立刻执行相应脚本,并返回执行结果。

2. 支持多并发

多并发主要场景如下:当用户首次申请环境及每日凌晨自动同步稳定环境时,下发的命令中会有很多服务需要执行同步操作,此时,agent开劈线程池,用固定数量的线程按照队列顺序执行同步脚本,目的是为了解决瞬时执行大量任务,受服务器性能限制,会有部分任务不被执行就已经死掉的现象。

agent进程守护

agent进程和上传日志进程由supervisor监控,进程被杀掉之后自动重启,保证进程的稳定性。配置如下:

[program:tornado-9889]

command=python2.7 /opt/deploy/agent/HttpAgent.py --port=9889 ;进程启动命令

autorestart=true ;进程死亡自动重启

redirect_stderr=true

stdout_logfile_maxbytes = 50MB ;日志文件最大值

stdoiut_logfile_backups = 20 ;日志维护份数

stderr_logfile = /opt/log/supervisord/tornado-stderr.log ;supervisor统一监管日志

stdout_logfile = /opt/log/supervisord/http_agent.log ;agent日志

loglevel=info

agent监控

由于agent承担着非常重要的中间媒介作用,我们对agent自身的状态也是做了多层监控。

通过supervisor进行进程守护,防止进程挂掉的简单情况;

每一分钟通过crontab进行自动更新agent时,检查supervisor状态,失败则重

启,用于防止supervisor挂掉的情况;

AgentMonitor进程中配置了一组定时任务,包括agent中HttpAgent和CronUpload两个进程的状态检查,失败则发送邮件,用于防止supervisor无法启动进程的情况;

AgentMonitor进程中服务状态监控的定时任务包含了时间戳,存储于redis中,用于防止AgentMonitor进程挂掉的情况。

其中AgentMonitor进程中的定时任务采集的服务器数据存储于redis中的内容如下:

由上图可见,除了agent状态数据之外,还采集了服务器本身的性能数据,包括cpu数据、memory内存信息、磁盘IO读写信息、网络速率信息。

其中cpu数据从top命令中获取的信息,内存、磁盘IO及网络信息是从/proc/meminfo、/proc/diskstats、/proc/net/dev文件获取的信息。

后续

本文只解析了agent上层的工作模式,那么agent调用的底层模块,那些神秘的部署、同步、配置文件规则替换等等是如何工作的呢?请大家期待下次的分享。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180410G0TAO000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券