公司动态
Sigwire:实时监控系统信号,无需进程配合!
导航菜单切换导航可进行登录、外观设置等操作。平台提供多种功能如 AI 代码创作包括 GitHub Copilot、GitHub Copilot 应用、MCP 注册表、开发者工作流Actions、Codespaces、Issues、代码审查、应用程序安全GitHub 高级安全、代码安全、密钥保护以及探索更多为何选择 GitHub、文档、博客、更新日志、应用市场还可查看所有功能。解决方案按公司规模分类有企业版、中小企业团队版、初创企业版、非营利组织版按用例分类包括应用现代化、DevSecOps、DevOps、CI/CD 等还可查看所有用例按行业分类有医疗保健、金融服务、制造业、政府机构等也能查看所有行业同时可查看所有解决方案。资源按主题探索可涉及 AI、软件开发、DevOps、安全等还能查看所有主题按类型探索包括客户案例、活动与网络研讨会、电子书与报告、商业洞察、GitHub 技能支持与服务涵盖文档、客户支持、社区论坛、信任中心、合作伙伴也可查看所有资源。开源项目社区有 GitHub 赞助项目包括安全实验室、维护者社区、加速器、GitHub 明星项目、存档计划仓库有主题、热门趋势、集合。企业版企业解决方案有企业平台可用附加组件包括 GitHub 高级安全、Copilot for Business、高级支持。还有定价相关信息。此外可进行搜索或跳转操作提供反馈使用保存的搜索筛选结果等。Yeet - src/sigwire 项目该项目公开有通知、派生、加星等操作还有代码、问题、拉取请求、操作、项目、安全与质量、洞察等附加导航选项。主分支可进行分支和标签操作能查看文件夹和文件、最新提交、历史记录等。sigwire 工具介绍sigwire 是信号的 tail -f 工具能捕获系统中每个进程发出的信号包括发送者、接收者、信号类型、触发方式等信息这些信息从内核的信号跟踪点解码而来并实时流式传输到终端无需对单个进程使用 strace -f也无需 ptrace 和进程配合。它将内核的信号机制转化为实时的接线板每一行显示信号信息根据严重程度着色标记触发方式等右侧侧边栏统计信号情况可暂停并选择查看详细信息。提示sigwire 同时监控 signal:signal_generate 和 signal:signal_deliver另外两个挂钩点 rt_sigreturn(2) 和系统调用退出跟踪点用于记录处理程序运行时间并检测 EINTR所有信息关联到同一行这也是 ☠ fatal 计数保守的原因。快速开始可通过 curl -fsSL https://yeet.cx | sh 安装 yeet 守护进程仅需执行一次再用 yeet run github:yeet - src/sigwire 运行仪表盘守护进程会进行特权 BPF 加载也有手动安装指南仅支持 Linux。无需配置信号信息会立即显示还可手动触发信号观察。操作控制默认信号信息流跟随最新信号滚动选择或暂停后停止滚动但数据继续更新。按键操作包括 p 或 Space 暂停/恢复信息流↑/↓, k/j 暂停并查看某一行打开详细信息面板/ 模糊过滤e 仅过滤中断的系统调用s 打开信号选择器Esc 返回上一层q 退出。显示内容说明每一行代表一个生成的信号最新信号在顶部由发送者 → 接收者、信号线路、备注三部分组成。信号线路根据严重程度着色备注显示信号来源、是否中断系统调用及处理方式。每一行在信号传递结果确定时冻结大量信号滚动显示像稳定日志。右侧侧边栏显示汇总信息包括顶级信号、按来源分类的信号分布、信号处理统计。注意↯ EINTR 需关注线程在慢速系统调用中收到信号会导致系统调用中断除非处理程序设置 SA_RESTART否则需手动重试sigwire 可实时显示这种情况按下 e 键可只查看中断的系统调用。查看信号详细信息按下 ↑/↓或 p键暂停信息流并选择某一行侧边栏变成详细信息面板显示接收者一侧关于该信号的所有信息包括 handled、syscall、ran、flags、TARGET BLOCKS 等内容。按下 Esc 键关闭详细信息面板按下 p 键恢复实时信息流。什么算作致命信号☠ fatal 计数器和行中的 ☠ 标记采用严格判断标准只有 SIGKILL 传递和内核自身引发的核心转储信号明确导致进程终止时才会计入其他信号如 SIGTERM、SIGINT、SIGPWR 通常不会导致进程终止不计入致命信号。信号选择器在繁忙系统中SIGCHLD、SIGURG、SIGWINCH 通常是背景噪音sigwire 默认在内核中静音这三个信号。按下 s 键打开信号选择器可通过空格键在显示和静音状态间切换信号使用箭头键选择或输入信号编号快速跳转按下 a 键可一次性切换所有信号状态标题栏的 静音 计数会实时跟踪隐藏信号数量。静音掩码是运行中的 BPF 程序 .data 部分的 __u64 全局变量切换信号状态不会带来成本取消静音无需重新加载程序。工作原理核心部分由内核部分src/bpf/sigwire.bpf.c 和 src/bpf/deliver.bpf.c 链接成一个对象和用户空间部分src/probes/sigwire.js组成所有信息通过 (目标线程 ID, 信号) 关联。BPF 部分两个源文件链接成 bin/probe.bpf.o包含四个跟踪点程序on_signal_generate 捕获发送者、目标进程等信息若信号在 mute_mask 中对应位被设置则在内核中丢弃on_signal_deliver 记录目标进程处理方式等信息及信号传递时间(rt_sigreturn) 计算处理程序运行时长(sys_exit) 记录 -ERESTART* 返回值。通过 events、dispatch、mute_mask、handler_start / restart_pending 等映射表将内核信息传递到用户空间。JS 部分不同的 JS 文件有不同职责如 src/probes/probe.js 加载 bin/probe.bpf.o 并启动程序src/probes/sigwire.js 合并数据、进行统计、关联信号信息、管理静音掩码开关src/main.jsx 处理输入等src/components/feed.jsx 显示信号信息src/components/tally.jsx 显示侧边栏信息src/components/detail.jsx 显示详细信息面板src/components/picker.jsx 显示信号选择器模态框src/components/titlebar.jsx 显示标题栏信息src/components/footer.jsx 显示底部栏信息src/lib/signals.js 提供信号相关信息src/lib/format.js 进行格式化操作src/lib/fuzzy.js 进行模糊匹配。该模型是滚动的信号生成信息流相同重复信号合并显示信号生成行在传递结果确定时冻结120 毫秒窗口定时器每帧发布快照避免繁忙环形缓冲区多次重绘。为何使用跟踪点而非 strace/ptracestrace -f 只能跟踪一个进程树且会暂停被跟踪进程ptrace 针对单个目标进程且有侵入性。而信号跟踪点无需对每个应用程序设置也不暂停进程就能监控所有进程信号可关联信号生成、传递和 rt_sigreturn完整呈现信号生命周期。跨内核测试运行 make veristat 命令会在您的内核上使用 veristat 加载 bin/probe.bpf.o确保程序通过验证器并显示复杂度加载 BPF 需要特权使用 sudo 命令。.github/workflows/kernel - matrix.yml 可避免旧内核验证器拒绝程序的问题它会为矩阵中的每个内核构建对象在虚拟机中启动内核并运行 veristat 工具若验证器拒绝程序作业将失败。