您可以在 vRealize Log Insight Linux 代理上根据字段值对所有已收集的事件进行筛选,以便指定要选取或丢弃的日志事件。您可以使用 whitelistblacklist 收集器选项来定义筛选器。

提示: 默认情况下, vRealize Log Insight Linux 代理会收集由程序或编辑器创建的隐藏文件。隐藏文件的名称以句点开头。可以防止 vRealize Log Insight Linux 代理收集隐藏文件,方法是通过添加排除 exclude=.* 参数。

对于每个事件,收集器均会计算 whitelistblacklist 筛选器表达式的值。如果 whitelist 表达式的值为 true,而 blacklist 表达式的值为 false 或无法计算,则事件将移至相应队列以便进一步处理。在任何其他情况下,收集器均会丢弃事件。whitelist 表达式的默认值为 true,而 blacklist 表达式的默认值为 false。

提示: Filelog 收集器提供的可进行筛选的字段较少。要获取可进行筛选的字段,可以解析日志。有关详细信息,请参见 分析日志

whitelistblacklist 筛选器是由变量、文本和运算符构成的集合,其计算结果为一个逻辑值或整数值。您可以将事件字段用作变量,并将带双引号的字符串和数字用作文本。有关可在筛选器表达式中使用的运算符的信息,请参见事件字段和运算符

注:
  • 如果将数字与字符串进行比较,或者如果执行的比较涉及数字字符串,则每个字符串均会转换为一个数字,并且将以数字形式执行比较。例如:

    • 表达式 whitelist = 123.0 == "000123" 的值为 true。
    • 表达式 whitelist = "00987" == "987.00" 的值为 true。
    • 在表达式 whitelist = response_size >= "12.12" 中,如果 response_size 字段具有数字值,则该表达式将以数字形式进行计算。如果响应大小大于 12.12,则表达式的值为 true,否则为 false。
    • 在表达式 whitelist = "09123" < "234" 中,字符串文本将转换为数值,且表达式的值为 false。
  • 如果其中某一字符串操作数无法转换为数值,则两个操作数都会转换为字符串。对于这种情况,将简单地按字典顺序进行比较,且比较时区分大小写。例如:

    • 表达式 whitelist = "1234a" == "1234A" 是一种字符串比较,其值为 false。
    • 表达式 whitelist = 4 < "four" 会将 4 转换为 "4",其值为 true。
    • 在表达式 whitelist = response_size > "thousand" 中,response_size 字段的值将转换为一个字符串值,因此该表达式的值为 false。
  • 如果筛选器表达式的值为一个整数值,那么当值为 0 时,可将其视为 false,否则视为 true。

    例如,在表达式 whitelist = some_integer & 1 中,如果 some_integer 字段具有最低有效位组,则该表达式的值为 true,否则为 false。

有关事件字段和运算符的完整列表,请参见从日志文件收集事件

在此示例中,您将从文件 /var/log/httpd/access 中收集 Apache 访问日志。该文件中的一些示例日志如下所示:
  • 127.0.0.1 - frank [10/Oct/2016:13:55:36 +0400] "GET /apache_pb.gif HTTP/1.0" 200 2326
  • 198.51.100.56 - john [10/Oct/2016:14:15:31 +0400] "GET /some.gif HTTP/1.0" 200 8270
  • 198.51.100.12 - smith [10/Oct/2016:14:15:31 +0400] "GET /another.gif HTTP/1.0" 303 348
  • 198.51.100.32 - test [10/Oct/2016:15:22:55 +0400] "GET /experimental_page.gif HTTP/1.0" 400 46374
  • 127.0.0.1 - test [10/Oct/2016:15:22:57 +0400] "GET /experimental_page2.gif HTTP/1.0" 301 100

前提条件

  • root 用户身份登录,或使用 sudo 运行控制台命令。
  • 登录到已安装 vRealize Log InsightLinux 代理的 Linux 计算机,打开控制台,然后运行 pgrep liagent 以验证 vRealize Log Insight Linux 代理是否已安装且正在运行。

过程

  1. 为日志定义一个解析器,如以下代码段中所示:
    [parser|apache-access]
    base_parser=clf
    format=%h %l %u %t \"%r\" %s %b
    对于从文件 /var/log/httpd/access 中收集的每个事件,您定义的解析器都会提取 remote_host remote_log_nameremote_auth_usertimestamprequeststatus_coderesponse_size 字段。可以使用这些字段来筛选事件。
  2. 在任意文本编辑器中打开 /var/lib/loginsight-agent/liagent.ini 文件。
  3. 在该文件中定义一个 Filelog 部分以收集和解析日志,如以下代码段中所示:
    [filelog|apache-access]
    directory = /var/log/httpd/
    include = access
    parser = apache-access
  4. 根据您的要求筛选事件。
    • 要收集 HTTP 状态为 200 的日志,您可以在 Filelog 部分中定义一个 whitelist,如以下代码段中所示:

      [filelog|apache-access]
      directory = /var/log/httpd/
      include = access
      parser = apache-access
      whitelist = status_code == 200

      只有对于示例日志中的第一个和第二个事件,whitelist 表达式的值才为 true,因此收集器会选取这两个事件。

      如果事件中不存在 status_code 字段(原因是该字段不在日志中或未进行解析),那么将无法计算 whitelist 表达式的值,这意味着该表达式的值将为 false,并且收集器将丢弃事件。

    • 要丢弃不感兴趣的事件,您可以使用 blacklist 选项。例如,如果您对本地流量不感兴趣,则可以阻止本地 IP,如以下代码段中所示:

      [filelog|apache-access]
      directory = /var/log/httpd/
      include = access
      parser = apache-access
      blacklist = remote_host == "127.0.0.1"

      收集器会从示例日志中选取第二个、第三个和第四个事件。

    • 要根据多个谓词筛选事件,您可以使用 orand 运算符。例如,您可以丢弃从本地 IP 生成的事件或由不需要的任何主机上的测试用户生成的事件,如以下代码段中所示:

      [filelog|apache-access]
      directory = /var/log/httpd/
      include = access
      parser = apache-access
      blacklist = remote_host == "127.0.0.1" or remote_auth_user == "test"

      使用 or 运算符可将 blacklist 表达式的值计算为 true,以跳过不需要的事件。如果 remote_host 字段值为“127.0.0.1”,或者 remote_auth_user 字段值为“test”,则该表达式将指示收集器丢弃事件。

      收集器会从示例日志中选取第二个和第三个事件。

    • 要丢弃由测试用户从本地 IP 生成的事件,您可以在 blacklist 表达式中使用 and,如以下代码段中所示:

      [filelog|apache-access]
      directory = /var/log/httpd/
      include = access
      parser = apache-access
      blacklist = remote_host == "127.0.0.1" and remote_auth_user == "test"

      收集器会从示例日志中丢弃第五个事件。

    • 您可以将 whitelistblacklist 筛选器一起使用。例如,如果您需要响应大小大于 1024 字节的事件,但不需要源自本地主机的事件,则可以使用以下代码段:

      [filelog|apache-access]
      directory = /var/log/httpd/
      include = access
      parser = apache-access
      whitelist = response_size > 1024
      blacklist = remote_host == "127.0.0.1" or remote_host == "localhost"

      收集器会从示例日志中选取第二个事件。