如何确定 sysdig 字段是否存在或如果不存在则处理错误

How to determine if sysdig field exists or handle error if it doesn't

我正在使用 Sysdig 来捕获一些事件,并有一个小凿子(LUA 脚本)来捕获事件并根据需要格式化这些事件。在 on_init() 上,我请求这样的字段:

f_field = chisel.request_field("<field>")

我的问题是如何在请求之前检查字段是否存在?我将使用一个刚刚在 0.24.1 上发布的新字段,但理想情况下我希望我的凿子在没有这个字段的情况下继续在旧版本的 sysdig 上工作。我试过像这样在 pcall() 中包装对 chisel.request_field 的调用:

ok, f_field = pcall(chisel.request_field("<field>"))

甚至实现我自己的 "get_field" 功能 :

function get_field(field)
  ok, f = pcall(chisel.request_field(field))
  if ok then return f else return nil end
end

f_field = get_field("<field>")
if f_field ~= nil then
  -- do something
end

但错误 ("chisel requesting nonexistent field <field>") 仍然存在。

我看不到检查某个字段是否存在的方法,但我似乎也无法处理该错误。如果可能的话,我真的不想要我的脚本的多个版本。

谢谢 史蒂夫 H

你快到了。您的问题在于您如何使用 pcall。 Pcall 接受一个函数值和任何你希望调用该函数的参数。在您的示例中,您将 request_field 函数调用的结果传递给 pcall。试试这个..

ok, f = pcall(chisel.request_field, "field")

pcall 将在保护模式下使用您的参数调用 chisel 方法并捕获任何后续错误。