产品架构图

部署架构图



项目地址: https://github.com/jkstack/agent-server
最新版本:
项目地址: https://github.com/jkstack/example-agent
最新版本:
创建项目并导入libagent库
go get github.com/jkstack/libagent
定义一个结构体并实现App接口
在main函数中添加RegisterService、UnregisterService和Run等libagent库中的接口调用
switch *act {
case "install":
agent.RegisterService(app)
case "uninstall":
agent.UnregisterService(app)
default:
agent.Run(app)
}
CHANGELOG.md文件,在打包过程中会自动读取该文件中的内容并自动填写到Release的描述信息中,格式可参考样例Makefile文件,在打包过程中会使用该文件中的第一个目标进行打包,打包成功后的产物必须存放到release目录下manifest.yaml文件,使其符合配置文件中的配置项描述通过在项目中引入workflows目录下的build.yml和release.yml可实现项目的自动化打包。
v*.*.*的标签后将会触发release动作,首先会进行各种系统下的跨平台编译与打包,然后读取CHANGELOG.md中对应版本的描述信息进行创建release操作,并将release目录下的文件进行上传每一个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: 唯一标识IDrequired: 是否必填default: (可选)默认值enum_valid: (可选)enum字段允许输入的内容csv_valid: (可选)csv字段允许输入的内容str_valid: (可选)string类型的匹配正则表达式min: (可选)最小值,支持的数据类型int、uint、float、bytes、durationmax: (可选)最大值,支持的数据类型int、uint、float、bytes、durationlen: (可选)最大长度,支持的数据类型string、csv、pathallow_relative: (可选)是否允许使用相对路径,支持的数据类型pathcategory: (可选)配置项分类- 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
log.target = stdout,file
log.dir = ./logs
log.size = 10M
log.rotate = 7
当log.target字段未设置file属性时,log.dir、log.size、log.rotate配置项是无效的。
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
enabled字段用于表示当前字段的有效范围when字段表示当条件中的描述符合要求时该字段有效target: 该字段表示需要关联到的原始字段名称contain: 针对于原始字段为csv类型时csv内容中包含该配置项时当前字段才有效equal: 针对于原始字段为bool或数值类型时原始字段的值与要求内容相符时才有效项目地址: https://github.com/jkstack/metrics-agent
最新版本:
| 系统 | 版本号 | 内核版本 | 是否支持 |
|---|---|---|---|
| ubuntu | 12.04 | 3.2 | ✅ |
| ubuntu | 14.04 | 3.13 | ✅ |
| ubuntu | 16.04 | 4.4 | ✅ |
| ubuntu | 18.04 | 4.15 | ✅ |
| ubuntu | 20.04 | 5.4 | ✅ |
| ubuntu | 22.04 | 5.15 | ✅ |
| suse | 10(SP4) | 2.6.16.60-0.132.1 | ❌ |
| suse | 11(SP4) | 3.0.101-108.135.1 | ✅ |
| suse | 12(SP5) | 4.12.14-122.130.1 | ✅ |
| suse | 15(SP4) | 5.14.21-150400.24.18.1 | ✅ |
| redhat | 5.11 | 2.6.18-398 | ❌ |
| redhat | 6.1 | 2.6.32-754 | ✅ |
| redhat | 7.9 | 3.10.0-1160 | ✅ |
| redhat | 8.6 | 4.18.0-372.9.1 | ✅ |
| centos | 5.11 | 2.6.18-398 | ❌ |
| centos | 6.1 | 2.6.32-754 | ✅ |
| centos | 7.9-2009 | 3.10.0-1160 | ✅ |
| centos | 8.5.2111 | 4.18.0-348 | ✅ |
| windows | XP | ❌ | |
| windows | 7 Enterprise with Service Pack 1 | ✅ | |
| windows | 7 Professional with Service Pack 1, VL Build | ✅ | |
| windows | 10 Enterprise LTSC 2021 | ✅ | |
| windows | 2008 R2 Enterprise | ✅ | |
| windows | 2008 R2 Datacenter | ✅ | |
| windows | 2016 VL | ✅ | |
| windows | 2016(Updated Feb 2018) | ✅ | |
| windows | 2016 Essentials | ✅ | |
| windows | 2019(Updated July 2020) | ✅ | |
| windows | 2022(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 | 网关地址 |
| nameservers | dns服务器列表 |
其中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字段表示该机器的硬盘分区信息,内容如下:
| 采集项 | 描述 |
|---|---|
| mount | linux系统为挂载路径如/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数据表示该主机的使用率数据,默认采集频率为5秒,可采集到的内容如下:
| 采集项 | 描述 |
|---|---|
| cpu_usage | CPU使用率 |
| memory_used | 内存占用字节数 |
| memory_free | 内存剩余字节数 |
| memory_available | 可用内存字节数 |
| memory_usage | 内存使用率 |
| swap_used | 已使用swap内存字节数 |
| swap_free | 剩余swap内存字节数 |
| cpu_load_1 | CPU的最近1分钟负载 |
| cpu_load_5 | CPU的最近5分钟负载 |
| cpu_load_15 | CPU的最近15分钟负载 |
其中partitions字段表示磁盘分区当前使用率列表,内容如下:
| 采集项 | 描述 |
|---|---|
| mount | linux系统为挂载路径如/run,windows系统为盘符如C:,用于与静态数据关联 |
| used | 已使用字节数 |
| free | 未使用字节数 |
| usage | 使用率 |
| inode_used | 已使用的inode数量 |
| inode_free | 未使用的inode数量 |
| inode_usage | inode使用率 |
| 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_usage | CPU使用率 |
| rss | 物理内存字节数 |
| vms | 虚拟内存字节数 |
| swap | swap内存字节数 |
| 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 | 温度,单位摄氏度 |