让我们仔细看看上面示例产生的警报通知,看看它都包含哪些重要信息:
这行日志看起来略为复杂,实际上它由三个用空格分隔的主要元素组成:时间戳、严重级别和消息。让我们对此进行逐一分析。
时间戳
第一个元素是时间戳,后面跟着一个冒号“:”(16:52:09.350818073:),这就是事件生成的时间。默认情况下,它显示为本地时区并展示到纳秒级别。如果愿意,你也可以配置Falco以ISO 8601格式显示时间,包括日期、纳秒和时区偏移(以UTC时间为基准)。
严重级别
第二个元素指示了警报的严重程度(例如,Error),由规则中的优先级键priority指定。它可以使用以下值,按严重程度从高到低排序分别是:Emergency、Alert、Critical、Error、Warning、Notice、Informational或者Debug。Falco允许我们过滤那些不重要的警报,从而通过指定我们想要获得警报的最低级别来降低输出的噪声。该项的默认值是Debug,这意味着默认就包括所有的严重级别,我们可以通过修改配置文件 /etc/falco/falco.yaml 中的优先级参数priority来调整。例如,如果我们将这个参数的值更改为Notice,那么我们将不会收到优先级为Informational或Debug的警报。
消息
最后也是最重要的元素是消息。这是根据输出键output指定的格式生成的字符串。它的特点在于大量使用占位符,然后Falco引擎将其替换为事件数据,稍后我们将看到这一点。
通常,规则的输出键以简短的文本描述开始,以方便识别问题的类型(例如,File below a known binary directory opened for writing)。然后是一些占位符(例如,%user.name),在输出时Falco会填充为实际的值(例如,root)。你可以很容易地识别这些占位符,因为它们以符号“%”开头,后面跟着事件所支持的字段,这些字段可以在Falco规则的条件键和输出键中使用。
这个特性的优雅之处在于,你可以为每个安全策略提供不同的输出格式,提供最有价值的相关信息,而无须浏览数百个字段。
尽管这种文本格式可能包含了你需要的所有信息,并且适合许多其他程序使用,但它不是输出的唯一选项,你也可以轻松地配置Falco以JSON格式输出通知。JSON输出格式的优点是易于下游的消费者解析。修改为以JSON格式输出后,Falco将为每个警报输出一个JSON行,如下所示,这里我们以适合阅读的方式进行打印:
这个输出格式与之前的文本消息展示了相同的信息。此外,每条信息都被分隔为不同的JSON属性。你可能还注意到了一些额外的数据,例如,这里出现了规则标识符—"rule":"Write below binary dir"。
我们现在可以测试下,启动Falco时传递以下标志作为命令行参数来覆盖默认配置:
你也可以编辑 /etc/falco/falco.yaml 文件将json_output设置为true。这将使得每次Falco启动时使用JSON格式,不需要再传递标志。