SGame框架提供了一个页面管理工具,用来实时的监控和对运行时进程提供一些通用指令
管理进程
manager_serv是框架的管理进程
- 代码 位于sgame/servers/manager_serv目录下
tree sgame/servers/manage_serv/sgame/servers/manage_serv/
|-- html_tmpl
| |-- detail.html
| |-- index.html
| `-- login.html
|-- lib
| |-- base.go
| |-- cmd.go
| |-- panel.go
| `-- report.go
`-- manage_serv.go
- 配置 位于sgame/servers/spush/tmpl/manager_serv.tmpl
cat sgame/servers/spush/tmpl/manage_serv.tmpl
{
"listen_addr":"$listen_addr",
"http_addr":"$http_addr",
"log_file":"manage_serv.log",
"client_list":[[10001,"conn_serv-1"],[20001,"logic_serv-1"],[30001,"db_logic_serv-1"],[10002,"conn_serv-2"],[20002,"logic_serv-2"],[30002,"db_logic_serv-2"],[40001,"disp_serv-1"],[40002,"disp_serv-2"]],
"heart_timeout":20,
"reload_timeout":10,
"auth":["admin:xxxx" , "nmsoccer:oooo"],
"auth_expire":3600
}
其中listern_addr是其他业务进程向manager报告的监听地址;http_addr是我们页面管理端的登陆地址;auth是配置的有效用户和密码;auth_expire就是登陆的有效时间.可以看到http_addr是作为参数存在的,所以需要结合sgame.json部署时候来共同查看
- 发布 配置位于sgame/servers/spush/sgame.json
{
"task":"sgame" ,
"deploy_host":"" ,
"deploy_timeout":180,
"remote_user":"nmsoccer" ,
"remote_pass":"****" ,
"procs":[
{"name":"conn_serv-1" , "bin":["../conn_serv/conn_serv"] , "host":"127.0.0.1" , "host_dir":"/home/nmsoccer/sg/group1/conn_serv/" , "cmd":"./conn_serv -N sgame -p 10001 -P conn_serv-1 -f conf/conn_serv.json -D"},
......
{"name":"manage_serv-1" , "bin":["../manage_serv/manage_serv" , "../manage_serv/html_tmpl/"] , "host":"" , "host_dir":"/home/nmsoccer/sg/manage/manage_serv-1/" , "cmd":"./manage_serv -N sgame -P manage_serv-1 -f conf/manage_serv.json -D"}
],
"proc_cfgs":[
{"name":"conn_serv-1" , "cfg_name":"conf/conn_serv.json" , "cfg_tmpl":"./tmpl/conn_serv.tmpl" , "tmpl_param":"logic_serv=20001,listen_addr=:18909,m_addr=:7000"},
......
{"name":"manage_serv-1" , "cfg_name":"conf/manage_serv.json" , "cfg_tmpl":"./tmpl/manage_serv.tmpl" , "tmpl_param":"listen_addr=:7000,http_addr=:8080"}
]
}
上面截取了sgame.json关于manager_serv的片段,在procs配置项可以看到会将manager_serv二进制文件和html_tmpl部署到/home/nmsoccer/sg/manage/manage_serv-1/;同时以./manage_serv -N sgame -P manage_serv-1 -f conf/manage_serv.json -D
命令拉起。
在proc_cfgs项可以看到manager_serv.tmpl的配置具体参数。其监听地址为本机7000;http管理端地址为本机8080
- 操作 进入sgame/servers/spush目录,以下命令可以控制manager_serv
- ./spush -p ^man* -f sgame.json 推送manager_serv配置及相关文件到目标目录并拉起
- ./spush -p ^man* -f sgame.json -o 仅推送二进制文件并拉起
- ./spush -p ^man* -f sgame.json -O 仅推送配置
- killall -10 manager_serv 让当前机器所有manager_serv重新加载配置
管理页面
在manager_serv成功部署,同时SGAME框架的示例各进程拉起之后,打开目标地址xxx:8080将可以看到主页上显示的页面:
命令区
命令区包含指定的进程.执行的命令和附加参数.指定的进程名支持正则表达式,附加参数针对一些特定命令添加.
下面介绍主要命令:
- reload(cfg) 指定目标进程重新加载其配置
- reload(table) 针对某些特定进程,比如logic_serv重新加载其表格资源,对于其他进程并不起效
- stop(server) 指定进程关闭
- log_level 动态修正指定进程的日志过滤等级 需要填入后面的附加参数(1:debug 2:info 3:err 4:fatal)
- log_degree 动态修正指定进程的日志时间粒度 需要填入后面的附加参数(1:second 2:milli sec 3:micro sec 4:nano sec)
- log_rotate 动态修正指定进程的本地日志滚动数目 后面的附加参数填写滚动数目
- log_size 动态修正指定进程的本地日志大小 附加参数填写新的日志大小
- start_gprof 对指定进程开始ggprof监控,并会在本地产生cpu,mem的监控文件
- end_gprof 对指定进程停止ggprof监控
演示 下面以修改时间粒度为例:
- 修正logic_serv_xx的日志粒度为默认的毫秒改为微秒
- 正在进行
- 完成
- 验证
cat logic_serv.log.0
...
[2020-08-14 21:43:57.132 info] <RecvReportCmd> proto:10006 int_v:1597412634 str_v:log_degree
[2020-08-14 21:43:57.132 info] HandleReportCmd <log_degree> extra:3
[2020-08-14 21:43:57.132105 info] HandleReportCmd log_degree extra:3 success!
[2020-08-14 21:49:45.816198 debug] <RecvLoginReq> login: user:cs pass:17908 device:onepluse9 c_key:19189599030223 from:10001
[2020-08-14 21:49:45.831543 debug] <RecvLoginRsp> result:0 c_key:19189599030223 user:cs
...
我们看到随后的日志时间已经成功调整了
监控区
- 监控区显示了进程的拉起时间、最近一次的心跳时间、关闭时间,一些进程相关的状态,比如连接数,在线数等。然后也显示了最近一次执行的命令及其结果
- 点击具体的进程,将会显示该进程的top信息反馈,目前的收集间隔为5s,具体可以在进程的monitor_inv配置文件里修正