1
THaGKI9 2019-02-27 02:46:52 +08:00 via iPhone
1. supervisor
2. websocket 吧,考虑到上传下达的需求都有 3. 不懂 |
2
hanxiV2EX 2019-02-27 03:31:28 +08:00 via Android
sshd 比较合适,控制端用 ssh 远程执行命令就能获取健康。想要更新文件可以用 scp
|
3
cnnblike 2019-02-27 03:32:48 +08:00
aws 有一个专门的服务叫 cloudwatch,你找下 CloudWatch Agent 就成了
|
4
wispedia 2019-02-27 08:18:10 +08:00 via Android
1.简单点,写个定时检查进程在不在的 shell 脚本,配个 crontab
2.http 3.agent 检查当前机器上存活的进程名 |
5
firebroo 2019-02-27 08:19:43 +08:00 via Android 1
1. 健康检查 2. rpc 3.没懂
|
6
zw1027 2019-02-27 08:49:52 +08:00
4 楼说完了
|
7
STRRL 2019-02-27 09:04:09 +08:00 via Android 1
说一个自己已经实现了吧
1 supervisor 2 grpc 3 由于目标是 Java 进程,用 attach api 拿主类类名 |
8
thisisgpy 2019-02-27 09:29:40 +08:00
我司 Agent 推送数据到 Kafka
|
9
Moker 2019-02-27 09:32:01 +08:00 1
可以参考一下 prometheus 的实现
1.可以用守护进程 supervisor 2.http 就行 主动去拉 |
12
tianshiyeben 2019-02-27 09:40:29 +08:00
https://github.com/tianshiyeben/wgcloud
看看,应该可以满足你的需求,监控 linux 服务器和应用程序的状态,包括 cpu,内存使用情况等 |
13
ns2250225 OP @firebroo 哈哈,我参考了你的 slave_sync.py ,那个 graceful_reload 的命令收下拉,👍,打算用 python2 写,因为我们的服务器都是 centos6.9 的,😭,想把 supervisor 的功能集成到 Agent 里面
|
14
ns2250225 OP 我想到一个方法:就是程序自己启动一个子进程或线程去监听自己,如果自己挂了,就重新提起来,这样可以吗
|
16
xkeyideal 2019-02-27 10:25:40 +08:00 1
好了很多回答,为什么第二个问题大家都考虑使用 http,websocket 或 grpc 呢,http 不能解决全双工的需求,ws 和 grpc 虽然能解决全双工的需求,但是实际需求有多少是从 agent 给 server 发消息,长连接需要解决断线重连的问题。
问题二我给的解决思路:加入一个 MQ,任务的下达通过 mq,agent 信息的长传也通过 mq,能很好的解耦 |
17
leaderOrg 2019-02-27 10:27:26 +08:00 via iPhone 1
有点很重要的,就是对宿主机的影响,你要严格控制自己的 cpu 内存 io 占用
|
18
ry_wang 2019-02-27 11:08:12 +08:00 1
这两年我们组主要的一个工作就是自行开发了内部的配置管理平台,负责 CDN 服务器的日常管理。目前覆盖服务器几万台,每天落到 Agent 端的任务接近 100 万次
难点主要由以下四个,花费了我们大量的时间和精力。 1. 网络连通性。CDN 节点的网络条件比较极端,各种无法互联互通。为此我们还单独实现了一套代理集群,供自己和其他业务使用。 2. 状态一致性。Agent/Server 间数据的一致性问题,资产、任务等一系列信息 3. Agent 系统资源占用。 4. 安全性。尽量避免用户直接执行 SHELL 命令,而是统一使用我们的封装。同时 SHELL JOB 将所有命令进行了封装,可能引起危险的操作全都堵死。 楼主说的这几个问题。 1. APP 更新及存活检查。我们参考了 open-falcon 的设计,采用 Agent+Updater 的模式,互备检测激活 2. 通信交互一期我们采用了 HTTP 的定时主动上报方式,不过目前已经在做迁移到 UDP 的准备工作 3. 这个和业务逻辑相关了,靠 Agent 服务发现或者 Server 主动下发都可以。 PS,我之前也发过招聘贴,一直有效,大家踊跃投简历呀 |
19
Moker 2019-02-27 11:37:30 +08:00
@ns2250225 不能自己管理自己 整个经常都退出了 要依赖外部 类似 newrelic 是会主动去 system 注册一个服务
|
21
airfling 2019-02-27 13:29:08 +08:00 1
这个很简单,代理你用 spring boot 开发,配置更新选择 spring cloud config,这样你既可以更新 agent 的配置也可以使用 agent 触发更新其他服务的配置。基本指标的开发你可以使用 sigar。至于一键部署卸载,你就用一个管理端远程连接到 linux 环境部署,scp 过去。远程连接你选择 jsch
|
22
airfling 2019-02-27 13:33:37 +08:00
还有 agent 的数据不是直接发给 server 的,你要用 kafka,作为消息总线,数据我这里以前是存储到 hadoop,后来我就存储到 es 了
|
24
xkeyideal 2019-02-27 14:59:31 +08:00
@binux 说的没毛病,应该是我没有说清楚,下面我详细表述一下。
在连接的处理上没有本质区别。 我想表述的是解耦的问题: 1. 当 server 下达的任务量比较大,server 是直连多个 agent 的,如果换成 mq,server 只需要连接一个 mq 即可 2. 当 agent 上传的数据比较多,server 肯定不可能只存在一个,agent 需要连接多个 server 并做好负载均衡的问题,当然加入个 nginx 可以解决,但对 server 的处理能力要求比较高,否则必然导致阻塞,此时加入 mq,每个 agent 只需要连一个 mq 即可,server 可以慢慢处理 mq 的数据 |