Elves-Agent

Elves整体采用C/S架构设计,Elves-Agent即为Client,运行在所有被控机中,Elves-Agent与Elves-Center/App-Processor的通讯采用Thrift形式进行,其本身作为ThriftServer接收来自Elves-Center的指令。

依赖

github.com/cihub/seelog                      #日志处理
github.com/toolkits/file                     #文件处理
github.com/jakecoffman/cron                  #定时任务
git.apache.org/thrift.git/lib/go/thrift      #thrift服务
github.com/snluu/uuid                        #UUID生成

以上依赖的模块已经Fork至github.com/gy-games-libs

安装过程

编译&安装

cd elves-agent
go get ./...

chmod +x control && ./control build    #linux
control.cmd build                      #windows

配置

mv ./conf/cfg.example.json ./conf/cfg.json

cfg.json

{
        "asset"   : "localhost",        #主机的别称,一般可以设置CMDB资产的ID
        "ip"      : "127.0.0.1",        #主机的IP地址,这里没有做校验,所以需要认真写
        "port"    : 11101,              #Agent接收参数的端口
        "authips" : [],                 #Agent允许执行来自elves-center的授权IP(demo: ["127.0.0.1","192.168.0.1"])
        "heartbeat": {
                "comment": "if this disabled,agent will not install app automatically",
                "enabled" : true,             #heartbeat 开关,若关闭后将无法自动下载或更新apps
                "addr"    : "127.0.0.1",      #heartbeat IP地址
                "port"    : 11102,            #hearbeat  服务端口
                "interval": 60,               #heartbeat 检测周期
                "timeout" : 5                 #heartbeat 超时时间
        },
        "scheduler": {
                "addr": "115.182.1.130",      #scheduler IP地址
                "port": 10101,                #scheduler 服务端口
                "timeout": 5                  #scheduler 超时时间
        },
        "agentcron":{
                "comment": "agent cron,detail cfg check cron.json",
                "enabled": true               #agent自身cron的开关,若关闭后自身cron将不会执行
        },
        "http": {
                "comment": "this is an agent dashbord , not include import info",
                "enabled": true,              #http server 开关,Elves-Agent提供一个Dashbord来查看当前Agent的运行状态
                "listen": ":19880"            #http server 端口
        },
        "appsdownloadaddr": "http://127.0.0.1/",     #app下载路径
        "apps": {                                    #app列表
                "apptest": "2.0"
        },
        "devmode": {                                 #开发模式
                "comment": "dev mode will start a mini http api service for dev only and it only support 'rt' method ,you can define auth_id and auth_key otherwise it will generat randly",
                "enabled": false,
                "authid": "1",
                "authkey": "123456789"
        }
}

脚本参数

Windows control.cmd

"build|install|start|stop|restart|status|uninstall"

build : 运行后将执行go build , 最终构建成 bin\elves-agent.exe ,构建前先go get ./... 解决依赖问题
install : windows下的install将借助bin\nssm.exe将elves-agent安装为名为elves-agent的服务,Elves需要以管理员权限运行,这里需要输入管理员账号密码
start : 执行 net start elves-agent
stop  : 执行 net stop elves-agent
restart : 执行 stop & start
status : 查看elves-agent的运行状态
uninstall : 卸载服务 sc delete elves-agent

Linux ./control

build|pack|install|start|stop|restart|status|tail|uninstall

build : 运行后将执行go build , 最终构建成 bin\elves-agent , 构建前先go get ./... 解决依赖问题
pack  : 运行后会将二进制文件打包成一个tar.gz的包,可用于其他机器的直接部署
install : 执行后会将elves-agent追加入/etc/rc.local
start : 以nohup形式启动elves-agent
stop : 关闭elves-agent
restart : 执行 stop & start
status : 查看elves-agent的运行状态
tail : 可以直接以tail方式查看elves-agent日志
uninstall : 运行后将删除/etc/rc.local下的elves-agent启动项

Elves-Agent Web Dashbord

开启HTTP服务后,Elves-Agent将开启一个HTTP服务,显示Elves-Agent的运行状况。

Dashbord:显示Agent的基本信息,包括Agent的运行模式,Agent Asset名称,AgentIP地址,Agent启动时间,Heartbeat最后通讯时间,Agent版本;APPs的信息,本Agent已安装的APP以及其版本;Agent 计划任务,包含最后的执行时间

Recent Tasks:最近40个倒序排列的任务,其中Flag仅代表Worker已经成功执行

Recent Errors:最近20个倒序排列的Error级别的错误

Develop Tools :开发面板,下面会详细讲述一下

Develop Tools

开启Elves开发莫时候,即可借助Develop Tools进行APP的开发,目前Develop Tools支持支RT模式的任务执行,输入APP名称,Func名称,Timeout(选填),Proxy(选填),Param(选填)点击 Generate 即可看到 URI以及 POST的参数,测试模式的API支持GET方式请求,可以直接点击Run Test按钮执行。

Agent Cron Task

Agent端默认 内置计划任务,使用Agent端调用的计划任务信息将不反馈至Elves-Center,agent-cron的配置文件位置为./elves-agent/conf/cron.json

{
    "QWASZXCVDFERTYGH": {                       #CRON的ID,可以自定义,但不可以重复
        "Flag": "true",                         #CRON状态,true/false
        "Comment": "this is a test!",           #CRON注释
        "App": "apptest",                       #CRON调用的APP
        "Func": "helloword",                    #CRON调用的APP FUNC
        "Param": {                              #CRON调用的APP FUNC PARAM
            "my":"hello toryzen!"
        },
        "Timeout": 0,                           #CRON调用的APP超时时间
        "Proxy": "python|app-worker.py",        #CRON调用的APPPROXY
        "Mode": "P",                            #CRON调用的APP MODE
        "Rule": "*/15 * * * * *"                #CRON RULE
    }
}

cron rule 请参考 https://github.com/jakecoffman/cron

results matching ""

    No results matching ""