首页 / 部署与操作说明

部署与操作说明

从下载、安装、配置到启动、验证、升级与排障的完整流程。运行环境为 Linux(被监控服务器),编译可在任意平台交叉完成。

1. 组成与产物

发行包解压后包含以下内容:主守护进程 hawk、配置模板 conf/、安装与服务脚本 scripts/、文档 docs/

二进制运行位置作用
hawk目标 Linux 服务器主守护进程:指标采集、暴涨抓现场、泄漏检测、报告、告警、威胁检测、Web 面板
hawkdb本地联网机器病毒库更新器:抓取公开病毒库并生成 hawk 格式文件,供手动上传(单独下载包)

2. 环境要求

2.1 目标服务器(运行 hawk)

零依赖能力: 系统指标采集与阈值预警、内置病毒库匹配、泄漏趋势判定均为纯 /proc·/sys 读取,不依赖任何外部工具

2.2 编译机(仅自行编译时需要)

Go 1.21+(本项目在 Go 1.26 验证)。若直接使用官网预编译包则无需编译环境。

3. 下载与安装

前往 下载页 获取对应架构的发行包,上传到目标服务器后解压安装:

解压并一键安装
tar -xzf hawk-v1.0.0-linux-amd64.tar.gz
cd hawk-v1.0.0-linux-amd64

# (可选)核对下载页的 SHA256SUMS.txt
sha256sum hawk-v1.0.0-linux-amd64.tar.gz

# 一键安装(root)
sudo bash scripts/install.sh

安装脚本完成:

手动安装:hawk 放到 /opt/hawk/conf/config.yaml 放到 /etc/hawk/scripts/systemd/hawk.service 放到 /etc/systemd/system/,再 systemctl daemon-reload && systemctl enable hawk

4. 配置要点(/etc/hawk/config.yaml

安装后按需编辑主要段落。缺省字段都有安全默认值,未填也能运行。

作用建议
sampling / thresholds / cooldown_sec暴涨抓现场的采样与阈值默认即可
collection抓现场各采集器时长 / 并发 / 总超时默认即可
go_pprof_targetsGo 服务 comm/cmdline → pprof URL登记你的 Go 服务以获得精准行号
retention现场目录保留天数与清理时刻默认 7 天
log_retention_days运行日志保留天数默认 7
notify钉钉 / 企业微信 / 邮件填 webhook / SMTP
aggregatersync 汇聚到中心节点多机汇聚时开
report小时综合报告默认开
web内嵌 Web 面板见 §5
leak内存 / CPU 泄漏趋势判定默认开
metrics系统指标采集 + 阈值预警(防抖 + webhook)默认开
threat恶意程序 / 挖矿检测 + 内置病毒库 + 可选 ClamAV见 §6
services服务定义(决定服务名与报告归类)登记你的服务

可用 sudo bash scripts/gen-services.sh 扫描运行中的进程,把已部署服务增量写入 services(只追加、不覆盖)。部署新服务后重复执行即可。

5. Web 面板与邮件告警

5.1 开启 Web 面板

config.yaml — web
web:
  enabled: true
  addr: "127.0.0.1:8088"     # 对外暴露改 0.0.0.0 并务必配 auth 或防火墙
  auth:
    enabled: true
    username: "admin"
    password: "改成强密码"

浏览器访问 http://<addr>,含「概览 / 系统指标 / 安全 / 事件 / 报告」五个页签。开启 auth 后所有接口需 HTTP Basic Auth。

5.2 报警邮件

config.yaml — notify.email
notify:
  enabled: true
  email:
    enabled: true
    smtp_host: "smtp.exmail.qq.com"
    smtp_port: 465            # 465=隐式TLS(use_tls:true);587=STARTTLS(use_tls:false)
    username: "alert@example.com"
    password: "授权码"
    from: "alert@example.com"
    to: ["ops@example.com"]
    use_tls: true
    cpu_percent: 85           # 系统 CPU 超过发邮件
    mem_percent: 85           # 系统内存超过发邮件

6. 病毒库(本地更新 → 上传服务器)

6.1 本地抓取(联网机器)

下载 hawkdb 包并在本地联网机器运行:

hawkdb
./hawkdb -out ./virusdb
# 只要 ClamAV 官方库:  ./hawkdb -out ./virusdb -mb=false
# abuse.ch 需要密钥时:  ./hawkdb -out ./virusdb -abuse-key <KEY>

生成 virusdb/(含 .hdb/.hsb/.ndb 等)。

6.2 上传并启用

上传 + 服务器配置
scp -r ./virusdb ops@server:/etc/hawk/virusdb

# /etc/hawk/config.yaml
threat:
  enabled: true
  signature_db:
    enabled: true
    path: "/etc/hawk/virusdb"
    max_scan_size_mb: 50
    reload_sec: 3600          # >0 则自动重载,上传新库后无需重启

7. 启动与运行

systemd 托管
sudo systemctl start hawk
sudo systemctl status hawk

# 实时日志(两种)
sudo journalctl -u hawk -f
sudo tail -f /var/log/hawk/monitor.log

# 前台调试运行
sudo /opt/hawk/hawk --config /etc/hawk/config.yaml

8. 验证

功能验证
# 8.1 进程存活 + 心跳日志(每 60s 一条 heartbeat)
sudo journalctl -u hawk -f

# 8.2 CPU 暴涨抓现场(生成 incidents 目录,日志含 pid/service/hotspot)
stress-ng --cpu $(nproc) --timeout 15s
ls -lt /var/log/hawk/incidents/

# 8.3 内存暴涨
stress-ng --vm 2 --vm-bytes 80% --vm-keep --timeout 20s

# 8.4 系统指标 + 阈值预警
curl -s http://127.0.0.1:8088/api/metrics/system | head
curl -s http://127.0.0.1:8088/api/metrics/alerts

# 8.5 病毒库加载情况
curl -s http://127.0.0.1:8088/api/threats/db

9. 升级

覆盖二进制并重启
# 下载新版发行包并解压后
sudo install -m0755 hawk /opt/hawk/hawk
sudo systemctl restart hawk

配置有新增字段时,参考发行包内 conf/config.yaml 手动补充(缺省字段都有安全默认值,不补也能跑)。

10. 目录与端口

路径说明
/opt/hawk/hawk二进制
/etc/hawk/config.yaml配置
/etc/hawk/virusdb/病毒库(可选)
/var/log/hawk/monitor.log运行日志(按天轮转)
/var/log/hawk/incidents/暴涨现场目录
/var/log/hawk/reports/小时报告
Web 端口web.addr(默认 127.0.0.1:8088)

11. 常见问题

Go 服务抓不到代码行号? 该服务未开标准 net/http/pprof。在服务 main 加 pprof(绑 127.0.0.1:6060)并在 go_pprof_targets 登记;或确认二进制未被 -ldflags="-s -w" 剥符号。未开 pprof 会自动走 perf record + FlameGraph 兜底。
Go 服务开启标准 pprof(4 行)
import (
    _ "net/http/pprof"
    "net/http"
    "runtime"
)
func init() {
    runtime.SetMutexProfileFraction(1)
    runtime.SetBlockProfileRate(1)
    go func() { _ = http.ListenAndServe("127.0.0.1:6060", nil) }() // 必须绑 127.0.0.1
}

← 返回下载安装包