告警自愈任务 ibex 的输出貌似被截断了
快猫星云
2024-09-19 17:47:02
收到社区小伙伴提问 ibex 的问题,原始问题如下:
请问 ibex 的 agent 执行任务的结果都和什么有关系呢,
./meta
文件夹下手动执行 script 的结果和 stdout 不一致是什么原因呢,stdout 中少了很多内容,好像限制了大小。
回复如下:
确实是有截断, meta 目录下的内容没有截断,上报的时候做了截断。相关代码如下:
func (lt *LocalTasksT) ReportTasks() []types.ReportTask {
ret := make([]types.ReportTask, 0, len(lt.M))
for id, t := range lt.M {
rt := types.ReportTask{Id: id, Clock: t.Clock}
rt.Status = t.GetStatus()
if rt.Status == "killing" {
// intermediate state
continue
}
rt.Stdout = t.GetStdout()
rt.Stderr = t.GetStderr()
stdoutRunes := []rune(rt.Stdout)
stderrRunes := []rune(rt.Stderr)
if len(stdoutRunes) > 16380 {
rt.Stdout = string(stdoutRunes[:16380]) + "..."
}
if len(stderrRunes) > 16380 {
rt.Stderr = string(stderrRunes[:16380]) + "..."
}
ret = append(ret, rt)
}
return ret
}
因为数据库的 stdout 和 stderr 有长度限制,太长了不太合适,所以在 agent 上报的时候做了截断处理。如果需要完整的 stdout 和 stderr,可以通过 ./meta
文件夹下的文件查看。大家在使用告警自愈功能的时候,建议适当控制一下脚本的输出。