8000 GitHub - jiandong01/sysarmor-collector: sysarmor-collector
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

jiandong01/sysarmor-collector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SysArmor 数据收集器

基于Go的高性能轻量化数据收集器,专注于终端数据采集和双向通信。

项目概述

SysArmor数据收集器是一个专门用于终端数据采集的轻量化组件,特点:

  • 🪶 轻量化设计: 资源占用低,专注核心数据采集功能
  • 🔌 插件化架构: 支持多种数据源插件,易于扩展
  • 🚀 高性能处理: Go语言实现,低CPU和内存占用
  • 🔄 双向通信: 支持与Server的双向通信,如远程查询
  • 📊 统一数据格式: 标准化事件格式,便于分析和关联
  • 🛠️ 灵活配置: 支持配置文件和命令行参数

项目结构

sysarmor-collector/
├── cmd/                        # 应用程序入口点
│   ├── sysarmor-collector/     # 统一数据收集器
│   └── test-consumer/          # 测试消费者
├── internal/                   # 私有应用程序代码
│   ├── core/                   # 核心收集器框架
│   │   ├── collector.go        # 基础收集器实现
│   │   └── buffer.go           # 事件缓冲区
│   └── plugins/                # 插件系统
│       ├── plugin.go           # 插件接口定义
│       └── sysdig/             # Sysdig插件实现
├── configs/                    # 配置文件
│   └── app/                    # 应用配置
│       └── sysarmor-collector.json  # 示例配置文件
├── test/                       # 测试和性能基准
│   ├── integration/            # 集成测试
│   └── performance/            # 性能测试
├── scripts/                    # 脚本文件
├── bin/                        # 编译后的二进制文件(构建时生成)
├── go.mod                      # Go模块文件
├── go.sum                      # 依赖锁定文件
├── Makefile                    # 构建脚本
└── README.md                   # 项目文档

快速开始

1. 环境准备

# 检查依赖
/usr/local/go/bin/go version
sysdig --version  # 可选,用于本地测试

# 配置Go PATH(如果需要)
export PATH=$PATH:/usr/local/go/bin

# 进入项目目录
cd sysarmor-collector

2. 启动NATS服务器

数据收集器需要连接到NATS消息队列服务。请先启动独立的NATS服务器:

# 进入NATS服务器目录
cd ../sysarmor-nats-server

# 启动NATS集群
make up

# 验证集群状态
make status

3. 构建收集器

# 下载依赖
make deps

# 构建所有组件
make build

# 或者单独构建
make build-collector  # 构建收集器
make build-consumer   # 构建测试消费者

4. 运行收集器

使用配置文件(推荐)

# 使用配置文件运行(30秒采集,-p参数,自定义JSON格式)
sudo ./bin/sysarmor-collector -c configs/app/sysarmor-collector.json

# 详细日志模式
sudo ./bin/sysarmor-collector -v -c configs/app/sysarmor-collector.json

快速启动模式

# 使用Makefile快速启动
make run-collector

# 快速启动模式(10秒测试)
sudo ./bin/sysarmor-collector --sysdig -cmd "sudo sysdig -j 'proc.name!=sysdig'" -subject sysdig.events -d 10s

# 指定NATS集群
sudo ./bin/sysarmor-collector -n "nats://localhost:4222,nats://localhost:4223" --sysdig -cmd "sudo sysdig -j" -subject sysdig.events -d 30s

运行测试消费者

# 运行测试消费者验证数据(在另一个终端)
make run-consumer

# 或直接运行
./bin/test-consumer sysdig.events

5. 验证数据流

# 使用NATS CLI工具验证(可选)
# go install github.com/nats-io/natscli/nats@latest
# nats sub sysdig.events --count=5

配置文件

示例配置文件 (configs/app/sysarmor-collector.json)

{
    "nats_urls": [
        "nats://localhost:4222",
        "nats://localhost:4223",
        "nats://localhost:4224"
    ],
    "batch_size": 100,
    "flush_timeout": "1s",
    "log_level": "info",
    "plugins": {
        "sysdig": {
            "command": [
                "sudo",
                "sysdig",
                "-p",
                "*{\"event\":{\"evt.num\":\"%evt.num\",\"evt.time\":\"%evt.time\",\"evt.type\":\"%evt.type\",\"evt.args\":\"%evt.args\",\"fd.name\":\"%fd.name\",\"proc.pid\":\"%proc.pid\",\"proc.name\":\"%proc.name\",\"proc.cmdline\":\"%proc.cmdline\",\"proc.ppid\":\"%proc.ppid\",\"proc.pname\":\"%proc.pname\",\"proc.pcmdline\":\"%proc.pcmdline\"}}",
                "proc.name!=sysdig and (fd.name exists and fd.name != \"\")"
            ],
            "subject": "sysdig.events",
            "duration": "30s",
            "backpressure": "1ms",
            "log_level": "info"
        }
    }
}

命令行参数

SysArmor Collector参数

Usage: sysarmor-collector [选项]

选项:
  -h, --help                显示帮助信息
  -c, --config string       配置文件路径
  -n, --nats-urls string    NATS服务器地址,逗号分隔 (默认: "nats://localhost:4222")
  -v, --verbose             详细日志输出

快速启动模式:
  --sysdig                  启用Sysdig插件
  -cmd, --command string    Sysdig命令
  -subject string           NATS主题名称
  -d, --duration duration   采集持续时间,0表示持续采集 (默认: 0)
  -b, --batch-size int      批量大小 (默认: 100)
  -t, --timeout duration    刷新超时时间 (默认: 1s)
  --bp, --backpressure duration  背压控制延迟 (默认: 1ms)

环境变量

NATS_URLS                 # NATS服务器地址
SYSDIG_CMD                # Sysdig命令
CONFIG_FILE               # 配置文件路径

性能对比

指标 Python+Kafka Go+NATS 提升幅度
CPU使用率 20-40% 8-15% 70-80%降低
内存使用 - - -
吞吐量 10K-30K/sec 100K+/sec 3-10倍提升
延迟 - - -

开发指南

构建命令

# 清理构建产物
make clean

# 下载依赖
make deps

# 构建所有组件
make build

# 运行测试
make test

# 性能测试
make test-performance

# 代码格式化
make fmt

# 代码检查
make lint

# 安全扫描
make security

# 查看帮助
make help

添加新插件

  1. internal/plugins/目录下创建新插件目录
  2. 实现Plugin接口,参考internal/plugins/sysdig/
  3. 在主程序中注册插件
  4. 更新配置文件格式
  5. 添加相应的测试

插件接口

type Plugin interface {
    // 基础方法
    Name() string
    Type() PluginType
    Version() string
    
    // 生命周期方法
    Initialize(config map[string]interface{}) error
    Start(ctx context.Context, collector *core.BaseCollector) error
    Stop() error
    
    // 状态方法
    IsRunning() bool
    GetStatus() PluginStatus
    
    // 双向通信支持
    HandleCommand(cmd *Command) (*CommandResponse, error)
}

数据格式

Sysdig事件结构

当前支持两种输出格式:

1. 标准JSON格式 (-j参数)

{
    "evt.num": "12345",
    "evt.time": "2024-01-01T10:00:00.123456Z",
    "evt.type": "openat",
    "proc.name": "cat",
    "fd.name": "/etc/passwd"
}

2. 自定义JSON格式 (-p参数)

{
    "event": {
        "evt.num": "12345",
        "evt.time": "2024-01-01T10:00:00.123456Z",
        "evt.type": "openat",
        "evt.args": "fd=3(<f>/etc/passwd) name=/etc/passwd flags=1(O_RDONLY)",
        "fd.name": "/etc/passwd",
        "proc.pid": "1234",
        "proc.name": "cat",
        "proc.cmdline": "cat /etc/passwd",
        "proc.ppid": "1000",
        "proc.pname": "bash",
        "proc.pcmdline": "/bin/bash"
    }
}

数据消费示例

简单消费者

package main

import (
    "fmt"
    "log"
    "github.com/nats-io/nats.go"
)

func main() {
    // 连接NATS
    nc, err := nats.Connect("nats://localhost:4222")
    if err != nil {
        log.Fatal(err)
    }
    defer nc.Close()

    // 订阅事件
    nc.Subscribe("sysdig.events", func(m *nats.Msg) {
        fmt.Printf("Received: %s\n", string(m.Data))
    })

    select {} // 保持运行
}

批量处理消费者

func batchConsumer() {
    nc, _ := nats.Connect("nats://localhost:4222")
    defer nc.Close()
    
    events := make([]string, 0, 100)
    ticker := time.NewTicker(5 * time.Second)
    
    nc.Subscribe("sysdig.events", func(m *nats.Msg) {
        events = append(events, string(m.Data))
        
        if len(events) >= 100 {
            processBatch(events)
            events = events[:0]
        }
    })
    
    go func() {
        for range ticker.C {
            if len(events) > 0 {
                processBatch(events)
                events = events[:0]
            }
        }
    }()
}

故障排除

常见问题

  1. Go命令未找到

    # 配置Go PATH
    export PATH=$PATH:/usr/local/go/bin
    go version
  2. NATS连接失败

    # 检查NATS服务器状态
    cd ../sysarmor-nats-server
    make status
    make health
  3. sysdig权限问题

    # 确保使用sudo运行
    sudo ./bin/sysarmor-collector --sysdig -cmd "sudo sysdig -j" -subject sysdig.events
  4. 构建失败

    # 清理并重新构建
    make clean
    make deps
    make build
  5. 配置文件解析错误

    # 检查JSON格式是否正确
    cat configs/app/sysarmor-collector.json | jq .

日志分析

# 详细日志模式
sudo ./bin/sysarmor-collector -v -c configs/app/sysarmor-collector.json

# 快速启动详细日志
sudo ./bin/sysarmor-collector -v --sysdig -cmd "sudo sysdig -j" -subject sysdig.events -d 10s

性能调优

收集器优化

# 调整批量大小
sudo ./bin/sysarmor-collector --sysdig -cmd "sudo sysdig -j" -subject sysdig.events -b 500

# 调整刷新间隔
sudo ./bin/sysarmor-collector --sysdig -cmd "sudo sysdig -j" -subject sysdig.events -t 500ms

# 背压控制
sudo ./bin/sysarmor-collector --sysdig -cmd "sudo sysdig -j" -subject sysdig.events --bp 5ms

系统优化

# 增加文件描述符限制
ulimit -n 65536

# 调整网络缓冲区
echo 'net.core.rmem_max = 134217728' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 134217728' >> /etc/sysctl.conf
sysctl -p

兼容性

  • ✅ 完全兼容原始sysdig命令和过滤器
  • ✅ 支持-j和-p两种输出格式
  • ✅ 支持时间限制采集,自动退出
  • ✅ 支持自定义NATS连接参数
  • ✅ 向后兼容的Makefile目标

下一步开发计划

已完成 ✅

  • ✅ 完成Sysdig收集器基础功能
  • ✅ 实现插件化架构
  • ✅ 实现配置文件支持
  • ✅ 统一收集器框架
  • ✅ 双向通信基础架构
  • ✅ 时间限制和自动退出
  • ✅ 配置文件时间字段解析

短期目标 (1-2周)

  • 🔄 添加OSQuery插件支持(双向通信)
  • 🔄 完善错误处理和重试机制
  • 🔄 添加更多测试用例
  • 🔄 性能优化和监控指标

中期目标 (1个月)

  • 🔄 添加Sysmon插件支持(Windows)
  • 🔄 实现事件过滤和预处理
  • 🔄 添加配置热重载
  • 🔄 完善文档和示例

长期目标 (3个月)

  • 🔄 添加ETW插件支持(Windows高级)
  • 🔄 实现更多数据源插件
  • 🔄 集成健康检查和自愈机制
  • 🔄 添加数据压缩和加密

架构说明

  • 不在Collector层面集成Wazuh: 根据架构设计,Wazuh集成在SysArmor Server层面实现
  • 🎯 专注轻量化: Collector保持轻量化,复杂分析功能由Server端处理
  • 🔄 双向通信: 重点发展与Server的双向通信能力,支持远程查询和控制

技术支持

如有问题,请检查:

  1. Go环境配置: go version
  2. NATS服务器状态: cd ../sysarmor-nats-server && make status
  3. 系统权限: 确保使用sudo运行需要特权的命令
  4. 配置文件格式: 使用jq验证JSON格式

许可证

本项目采用MIT许可证。

About

sysarmor-collector

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0