项目作者: dean2021

项目描述 :
Agent Framework,跨平台、cpu/内存限制、负载监控、自杀机制、配置变更、统一日志、数据通信等等,统统交给AF,专心写你的业务逻辑吧.
高级语言: Go
项目地址: git://github.com/dean2021/af.git
创建时间: 2020-05-25T09:14:24Z
项目社区:https://github.com/dean2021/af

开源协议:

下载


Agent Framework

系统配置

  1. system.max_memory : 设置最大占用内存, 默认100m
  2. system.max_cpu_quota : 设置最大cpu使用率, 默认10%
  3. system.max_load_limit : 设置系统负载自杀阈值,默认0.7
  4. system.register.api : agent注册api地址, 必填
  5. system.register.save_file : agent注册完信息保存文件路径, 默认:存放到当前目录下data.toml文件中
  6. system.max_cpu_usage_limit : 设置cpu使用率自杀阈值,默认80(%)
  7. system.cgroup_enable : 是否启用cgroup, 默认启用, 参数 on/off

稳定性

控制 windows linux
负载监控
资源限制(cpu/memory)
CPU使用率

TODO

  • 资源限制(内存/CPU)
  • 资源监控/自杀
  • 统一日志
  • 插件扩展
  • 统一注册
  • 服务注册
  • 进程守护
  • 升级卸载
  • 配置变更
  • 指令通讯

框架使用

main.go

  1. // Copyright 2020 Dean.
  2. // Authors: Dean <dean@csoio.com>
  3. // Date: 2020/5/19 6:17 下午
  4. package main
  5. import (
  6. "github.com/dean2021/af"
  7. "github.com/dean2021/af/_example/logger"
  8. "github.com/dean2021/af/_example/plugin"
  9. "github.com/sirupsen/logrus"
  10. "log"
  11. "path"
  12. "time"
  13. )
  14. func main() {
  15. // 新建一个agent
  16. agent := af.NewAgent("hs-agent")
  17. // 限制100M内存
  18. agent.Config.Set("system.max_memory", "104857600")
  19. // 限制10% CPU使用率
  20. agent.Config.Set("system.max_cpu_quota", "10000")
  21. // 系统负载阈值, 超过此阈值则退出程序
  22. agent.Config.Set("system.max_load_limit", "0.7")
  23. // 系统cpu使用率阈值,超过此阈值则
  24. agent.Config.Set("system.max_cpu_usage_limit", "80")
  25. // agent注册api
  26. agent.Config.Set("system.register.api", "http://soc.qa.csoio.com/api/hostsecurity/agent/register")
  27. // agent注册信息保存文件
  28. agent.Config.Set("system.register.save_file", "./data.toml")
  29. // 用户自定义配置
  30. agent.Config.Set("user.mysql", "mysql://127.0.0.1:3306")
  31. agent.Config.Set("service.grpc.addr", "localhost:50001")
  32. // 添加服务
  33. //af.AddService("grpc", new(service.DataService))
  34. // 添加插件
  35. agent.Plugin(new(plugin.TestPlugin))
  36. agent.Plugin(new(plugin.TestPlugin2))
  37. //agent.Plugin(new(plugin.TestService))
  38. // 替换日志组件
  39. l := logrus.New()
  40. // 设置日志格式
  41. l.SetFormatter(&logger.JSONFormatter{})
  42. // 添加log http hook
  43. l.AddHook(logger.NewHttpHook(logrus.AllLevels, &logger.JSONFormatter{}, "http://www.baidu.com/logserver"))
  44. // 添加log滚动文件切割hook
  45. hook, err := logger.NewRotateHook(path.Join("./", "logs"), "debug.log", time.Hour*24, time.Second*60)
  46. if err != nil {
  47. panic(err)
  48. }
  49. l.AddHook(hook)
  50. agent.SetLogger(l)
  51. // 运行agent
  52. err = agent.Run()
  53. if err != nil {
  54. log.Fatal(err)
  55. }
  56. }