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

返回本页常规视图.

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: (可选)最小值,支持的数据类型intuintfloatbytesduration
  • max: (可选)最大值,支持的数据类型intuintfloatbytesduration
  • len: (可选)最大长度,支持的数据类型stringcsvpath
  • 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.dirlog.sizelog.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温度,单位摄氏度