告警自愈任务 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 文件夹下的文件查看。大家在使用告警自愈功能的时候,建议适当控制一下脚本的输出。

快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
开源版
Flashcat
Flashduty