如何确定 Sysdig 字段是否存在或者如何处理它不存在的情况

我正在使用 Sysdig 捕获事件,并且使用一个小的 Chisel(LUA 脚本)捕获和格式化事件。在 on_init() 中,我使用以下代码请求字段:

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

我的问题是,在请求字段之前如何检查该字段是否存在?我将在 0.24.1 上发布一个新的字段,但是我希望我的 Chisel 在没有此字段的旧版本的 Sysdig 上继续工作。我尝试了在 chisel.request_field 调用包装在 pcall() 中,如下所示:

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>")。

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

谢谢 Steve H

点赞
用户10485017
用户10485017

你已经接近成功了。你的问题在于你如何使用 pcallpcall 接受函数值和任何你想调用该函数的参数。在你的示例中,你将 request_field 函数调用的结果传递给了 pcall。尝试这个...

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

pcall 将在受保护模式下调用 chisel 方法并捕获任何后续错误。

2018-10-10 15:11:50