这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Agent生态体系

通过Agent的方式可实现远程执行脚本、主机信息采集、桌面自动化等功能。

产品架构图

架构图

部署架构图

架构图

1 - 服务端

服务端程序用于集中化管理所有Agent,并提供OpenAPI的能力来控制Agent端程序。

项目地址: https://github.com/jkstack/agent-server

最新版本: version

2 - example-agent

这是一个Agent的示例,旨在帮助开发者来快速开发一个Agent并接入Agent生态体系。

项目地址: https://github.com/jkstack/example-agent

最新版本: version

2.1 - Agent开发

Agent开发规范与标准化打包方法。

Agent开发

  1. 创建项目并导入libagent库

    go get github.com/jkstack/libagent
    
  2. 定义一个结构体并实现App接口

  3. 在main函数中添加RegisterService、UnregisterService和Run等libagent库中的接口调用

    switch *act {
    case "install":
        agent.RegisterService(app)
    case "uninstall":
        agent.UnregisterService(app)
    default:
        agent.Run(app)
    }
    

研发与打包规范

  1. 项目根目录中必须包含一个CHANGELOG.md文件,在打包过程中会自动读取该文件中的内容并自动填写到Release的描述信息中,格式可参考样例
  2. 项目根目录中必须包含一个Makefile文件,在打包过程中会使用该文件中的第一个目标进行打包,打包成功后的产物必须存放到release目录下
  3. 开发的代码在原则上需要支持谷歌维护的最新的两个go语言版本,因此在go.mod文件中目前会被设置为1.18版本
  4. 在项目初始化的过程中需要修改contrib目录下的文件,如修改正确的打包路径等
  5. 为方便于外部工具化部署,需要正确修改manifest.yaml文件,使其符合配置文件中的配置项描述

打包方法

通过在项目中引入workflows目录下的build.yml和release.yml可实现项目的自动化打包。

  1. build.yml中定义了当master分支发生合并时会进行代码的lint检查及go build测试
  2. release.yml中定义了当该项目被打上了v*.*.*的标签后将会触发release动作,首先会进行各种系统下的跨平台编译与打包,然后读取CHANGELOG.md中对应版本的描述信息进行创建release操作,并将release目录下的文件进行上传

更多示例

  1. exec-agent: 远程执行脚本以及文件传输
  2. metrics-agent: 监控数据采集

2.2 - 配置项描述

Agent配置文件的描述文件结构定义。

每一个Agent项目中的conf目录下必须包含一个manifest.yaml文件用于描述该Agent的配置项信息,该文件被用于外部工具做自动化部署时的展示。

该文件的内容最顶层为一个数组,其中每一个元素代表配置文件中的某一个字段,该字段的描述信息如下:

  • key: 该字段在配置文件中的名称
  • name.zh: 该字段的中文名称,用于自动化部署工具的展示
  • desc.zh: 该字段的中文描述
  • type: 该字段类型,目前已支持以下类型
    • string: 字符串
    • enum: 枚举值
    • csv: 逗号分隔的字符串,允许多个值
    • int: 有符号整数
    • uint: 无符号整数
    • float: 浮点数
    • bool: 布尔值
    • naddr: 网络地址,<ip>:<port>
    • path: 文件路径
    • bytes: 可视化字节数,(n)G、(n)M、(n)KB、(n)B等
    • duration: 时长,(n)h、(n)m、(n)s等
    • uuid: 唯一标识ID
  • required: 是否必填
  • default: (可选)默认值
  • enum_valid: (可选)enum字段允许输入的内容
  • csv_valid: (可选)csv字段允许输入的内容
  • str_valid: (可选)string类型的匹配正则表达式
  • min: (可选)最小值,支持的数据类型int、uint、float、bytes、duration
  • max: (可选)最大值,支持的数据类型int、uint、float、bytes、duration
  • len: (可选)最大长度,支持的数据类型string、csv、path
  • allow_relative: (可选)是否允许使用相对路径,支持的数据类型path
  • category: (可选)配置项分类

示例

- key: basic.id
  type: string
  name:
    zh: AgentID
  desc:
    zh: Agent的ID,在当前服务器下的集群内唯一
  required: true
- key: basic.server
  type: naddr
  name:
    zh: 服务端地址
  desc:
    zh: 链接服务器端的地址
  default: 127.0.0.1:13081
  required: true
- key: basic.log.target
  type: csv
  name:
    zh: 日志保存目标
  desc:
    zh: 日志保存目标,目前仅支持stdout和文件
  default: stdout
  csv_valid: [ stdout, file ]
  required: false
- key: basic.log.dir
  type: path
  name:
    zh: 日志保存路径
  desc:
    zh: 日志保存路径
  default: ./logs
  required: false
- key: basic.log.size
  type: bytes
  name:
    zh: 日志文件滚动大小
  desc:
    zh: 日志文件生成时每个文件的大小
  default: 10M
  min: 1M
  max: 100M
  required: false
- key: basic.log.rotate
  type: uint
  name:
    zh: 日志文件保留份数
  desc:
    zh: 日志文件生成时最多保留份数
  default: 7
  min: 1
  max: 100
  required: false

关联关系

示例1

log.target = stdout,file
log.dir = ./logs
log.size = 10M
log.rotate = 7

当log.target字段未设置file属性时,log.dir、log.size、log.rotate配置项是无效的。

示例2

monitor.enabled = true
monitor.interval = 10s

当monitor.enabled字段设置为false时,monitor.interval配置项是无效的。

基于以上两种情况,增加配置字段如下:

- key: basic.log.dir
  ...
  enabled:
    when:
      target: basic.log.target
      contain: file
- key: basic.monitor.interval
  ...
  enabled:
    when:
      target: basic.monitor.enabled
      equal: true
  1. enabled字段用于表示当前字段的有效范围
  2. when字段表示当条件中的描述符合要求时该字段有效
  3. target: 该字段表示需要关联到的原始字段名称
  4. contain: 针对于原始字段为csv类型时csv内容中包含该配置项时当前字段才有效
  5. equal: 针对于原始字段为bool或数值类型时原始字段的值与要求内容相符时才有效

3 - exec-agent

该Agent主要用于远程执行脚本、上传/下载文件。

项目地址: https://github.com/jkstack/exec-agent

最新版本: version

4 - metrics-agent

该Agent主要用于主机信息采集,包括但不限于CPU、内存、磁盘、网络、进程等。

项目地址: https://github.com/jkstack/metrics-agent

最新版本: version

兼容性

系统版本号内核版本是否支持
ubuntu12.043.2✅
ubuntu14.043.13✅
ubuntu16.044.4✅
ubuntu18.044.15✅
ubuntu20.045.4✅
ubuntu22.045.15✅
suse10(SP4)2.6.16.60-0.132.1❌
suse11(SP4)3.0.101-108.135.1✅
suse12(SP5)4.12.14-122.130.1✅
suse15(SP4)5.14.21-150400.24.18.1✅
redhat5.112.6.18-398❌
redhat6.12.6.32-754✅
redhat7.93.10.0-1160✅
redhat8.64.18.0-372.9.1✅
centos5.112.6.18-398❌
centos6.12.6.32-754✅
centos7.9-20093.10.0-1160✅
centos8.5.21114.18.0-348✅
windowsXP❌
windows7 Enterprise with Service Pack 1✅
windows7 Professional with Service Pack 1, VL Build✅
windows10 Enterprise LTSC 2021✅
windows2008 R2 Enterprise✅
windows2008 R2 Datacenter✅
windows2016 VL✅
windows2016(Updated Feb 2018)✅
windows2016 Essentials✅
windows2019(Updated July 2020)✅
windows2022(updated Aug 2022)✅

采集项

采集项分为静态数据、usage数据、进程列表数据、连接列表数据、传感器温度数据,这5类数据可单独设置采集频率。

字段定义

静态数据

静态数据的默认采集频率为1天,该部分数据的特点是基本不太会变化,如CPU核心数、CPU型号、内存总大小等,可采集到的内容如下:

采集项描述
host_name主机名
uptime系统启动时长
os_name操作系统类型,如linux、windows等
platform_name操作系统名称,如debian、centos等
platform_version操作系统版本号,如7.7.1908
install操作系统安装时间
startup操作系统启动时间
kernel_version内核版本号
arch操作系统位数,如amd64、i386等
physical_cpu物理核心数,表示有多少块CPU
logical_cpu逻辑核心数
gateway网关地址
nameserversdns服务器列表

其中cores字段表示该主机的CPU核心列表,内容如下:

采集项描述
processor当前是第几个核心
model核心型号,如Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
core该核心所在物理核心编号
cores该核心所在CPU上的编号
physical该核心所在CPU在主板上的物理编号
mhz该核心的频率

其中disks字段表示该机器的磁盘列表,内容如下:

采集项描述
model品牌型号
total总容量
type磁盘类型,0=硬盘;1=软盘;2=光盘
partitions分区列表

其中partitions字段表示该机器的硬盘分区信息,内容如下:

采集项描述
mountlinux系统为挂载路径如/run,windows系统为盘符如C:
type分区类型,如NTFS等
options挂载选项,如rw,nosuid,nodev等
total该分区总容量
inodes该分区总inode数量

其中interfaces字段表示该机器的网卡列表信息,内容如下:

采集项描述
index该网卡下标
name网卡名称,如eth0
mtu该网卡的mut配置
flags该网卡的附加参数,如BROADCAST,RUNNING,MULTICAST等
addrs该网卡绑定的IP列表,包含IPv4和IPv6地址
mac该网卡的mac地址

其中users字段表示该主机上的账号列表,内容如下:

采集项描述
name用户名
id用户ID
gid用户所在组ID

usage数据

usage数据表示该主机的使用率数据,默认采集频率为5秒,可采集到的内容如下:

采集项描述
cpu_usageCPU使用率
memory_used内存占用字节数
memory_free内存剩余字节数
memory_available可用内存字节数
memory_usage内存使用率
swap_used已使用swap内存字节数
swap_free剩余swap内存字节数
cpu_load_1CPU的最近1分钟负载
cpu_load_5CPU的最近5分钟负载
cpu_load_15CPU的最近15分钟负载

其中partitions字段表示磁盘分区当前使用率列表,内容如下:

采集项描述
mountlinux系统为挂载路径如/run,windows系统为盘符如C:,用于与静态数据关联
used已使用字节数
free未使用字节数
usage使用率
inode_used已使用的inode数量
inode_free未使用的inode数量
inode_usageinode使用率
read_per_second每秒读取字节数
write_per_second每秒写入字节数
iops_in_progress正在等待的IO操作数量

其中interfaces字段表示网卡信息,内容如下:

采集项描述
name网卡名称,如eth0,用于与静态数据关联
bytes_sent已发送字节数
bytes_recv已接收字节数
packets_sent已发送数据包数量
packets_recv已接收数据包数量

进程列表数据

该采集项用于采集主机上的进程列表信息,内容如下:

采集项描述
id进程ID
parent_id父进程ID
user所属用户
cpu_usageCPU使用率
rss物理内存字节数
vms虚拟内存字节数
swapswap内存字节数
memory_usage内存使用率
cmd启动命令行参数
listen监听端口列表
connections连接数

连接列表数据

该采集项用于采集主机上的连接列表信息,内容如下:

采集项描述
fd句柄编号
pid所属进程ID
type连接类型,0=tcp IPv4;1=tcp IPv6;2=udp IPv4;3=udp IPv6;4=unix domain socket;5=unix file socket
local本地地址
remote远程地址
status连接状态,如ESTABLISHED等

传感器温度数据

该采集项用于采集主机上的传感器温度信息,如CPU温度、显卡温度等,内容如下:

采集项描述
name设备名称
temp温度,单位摄氏度