的log_filter_dragnet
日志过滤组件提供基于用户自定义规则的日志过滤功能。
启用log_filter_dragnet
过滤器,首先加载过滤器组件,然后修改log_error_services
价值。下面的示例启用了log_filter_dragnet
结合内置的日志接收器:
安装组件'file://component_log_filter_dragnet';SET GLOBAL log_error_services = 'log_filter_dragnet;log_sink_internal ';
设置log_error_services
要在服务器启动时生效,请使用第5.4.2.1节“错误日志配置”.这些说明也适用于其他错误记录系统变量。
与log_filter_dragnet
属性,定义其筛选规则dragnet.log_error_filter_rules
系统变量。规则集由零个或多个规则组成,其中每个规则是一个如果
以句号结束的语句(.
)字符。如果变量值为空(零规则),则不进行过滤。
例1。该规则集删除信息事件,对于其他事件,删除source_line
字段:
SET GLOBAL dragnet.log_error_filter_rules = 'IF prio>=INFORMATION THEN drop. '如果存在source_line则取消设置source_line.';
方法执行的过滤效果类似log_sink_internal
设置为的过滤器log_error_verbosity = 2
.
为了可读性,您可能会发现最好将规则列在单独的行中。例如:
SET GLOBAL dragnet.log_error_filter_rules = ' IF prio>=INFORMATION THEN drop. '如果存在source_line则取消设置source_line。”;
示例2:该规则将信息事件限制为每60秒不超过一个:
SET GLOBAL dragnet.log_error_filter_rules = 'IF prio>=INFORMATION THEN throttle 1/60.';
一旦按照您的意愿设置了过滤配置,就可以考虑分配了dragnet.log_error_filter_rules
使用设置保存
而不是集全球
使设置在服务器重新启动时保持不变。或者,将设置添加到服务器选项文件中。
要停止使用过滤语言,首先要将其从错误日志记录组件集中删除。通常这意味着使用不同的过滤器组件,而不是没有过滤器组件。例如:
SET GLOBAL log_error_services = 'log_filter_internal;log_sink_internal ';
再次,考虑使用using设置保存
而不是集全球
使设置在服务器重新启动时保持不变。
然后卸载过滤器log_filter_dragnet
组件:
卸载组件文件://component_log_filter_dragnet;
的各个方面log_filter_dragnet
操作更详细:
下面的语法定义了语言log_filter_dragnet
过滤规则。每条规则都是如果
以句号结束的语句(.
)字符。该语言不区分大小写。
规则:如果条件然后行动[ELSEIF条件然后行动)……其他地方行动] .条件: {场比较器价值| [not]存在场|条件{and | or}条件}行动: {drop | throttle {数|数/window_size} |设置场[:= | =]价值| unset [场]}场: {core_field|optional_field|user_defined_field}core_field: {time | msg | prio | err_code | err_symbol | SQL_state | subsystem}optional_field: {OS_errno | OS_errmsg | label | user | host | thread | query_id | source_file | source_line | function | component}user_defined_field:[a-zA-Z0-9_]类的字符序列比较器: {== | != | <> | >= | => | <= | =< | < | >}价值: {string_literal|integer_literal|float_literal|error_symbol|优先级}数:integer_literalwindow_size:integer_literalstring_literal:引用为“…”的字符序列或者“……”integer_literal:[0-9]类中的字符序列float_literal:integer_literal(。integer_literal]error_symbol:有效的MySQL错误符号,如ER_ACCESS_DENIED_ERROR或ER_STARTUP优先级: {error | warning | information}
简单条件将字段与存在的值或测试字段进行比较。要构造更复杂的条件,可以使用和
而且或
操作符。两个操作符具有相同的优先级,从左到右求值。
若要转义字符串中的字符,请在其前面加上反斜杠(\
).反斜杠必须包含反斜杠本身或字符串引用字符,其他字符可选。
为了方便起见,log_filter_dragnet
支持对某些字段进行比较的符号名称。为了可读性和可移植性,符号值(如果适用)比数值更可取。
事件优先级值1、2和3可以指定为
错误
,警告
,信息
.的比较才能识别优先级符号一家
字段。这些比较是等价的:IF prio == INFORMATION THEN…IF prio == 3 THEN…
错误码可以以数字形式指定,也可以作为相应的错误符号指定。例如,
ER_STARTUP
是错误的符号名称吗1408
,所以这些比较是等价的:如果err_code == ER_STARTUP THEN…IF err_code == 1408 THEN…
错误符号仅在与
err_code
字段和用户定义的字段。要查找与给定错误代码号对应的错误符号,请使用以下方法之一:
假设一个带有错误编号的规则集如下所示:
IF err_code == 10927 OR err_code == 10914 THEN drop。IF err_code == 1131 THEN drop。
使用perror,确定错误符号:
$> perror 10927 10914 1131 MySQL错误码MY-010927 (ER_ACCESS_DENIED_FOR_USER_ACCOUNT_LOCKED): Access denied for user '%-.48s'@'%-.64s'。帐户被锁定。MySQL错误码MY-010914 (ER_ABORTING_USER_CONNECTION): Aborted connection %u to db: '%-。192 '用户:'% 1 -。48s主机:'% 1 -。64年代”(% -.64s)。MySQL错误码MY-001131 (ER_PASSWORD_ANONYMOUS_USER):您使用的MySQL是匿名用户,匿名用户不允许修改密码
将错误符号替换为数字,规则集变成:
如果err_code == ER_ACCESS_DENIED_FOR_USER_ACCOUNT_LOCKED或err_code == ER_ABORTING_USER_CONNECTION则删除。如果err_code == ER_PASSWORD_ANONYMOUS_USER则删除。
可以将符号名称指定为带引号的字符串,以便与字符串字段进行比较,但在这种情况下,名称是没有特殊含义的字符串和log_filter_dragnet
不会将它们解析为相应的数值。此外,打字错误可能不会被检测到,而错误则会立即出现集
试图使用服务器不知道的未加引号的符号。
log_filter_dragnet
在过滤规则中支持这些操作:
下降
:删除当前日志事件(不记录)。节气门
:应用速率限制,减少匹配特定条件的事件的日志冗长。参数表示速率,形式为数
或数
/window_size
.的数
Value表示每个时间窗口允许记录的事件发生次数。的window_size
值为时间窗口,单位为秒;如果省略,默认窗口是60秒。两个值都必须是整型字面量。该规则将插件关闭消息限制为每60秒出现5次:
如果err_code == er_plugin_shuting_down_plugin则油门5。
该规则将错误和警告限制为每小时1000次,将信息消息限制为每小时100次:
IF prio <= INFORMATION THEN throttle 1000/3600 ELSE throttle 100/3600。
集
:为字段赋值(如果字段不存在,则使该字段存在)。在随后的规则中,存在
针对字段名的测试为真,并且可以通过比较条件测试新值。设置
:丢弃字段。在随后的规则中,存在
对字段名的测试为假,对字段与任何值的比较为假。在特殊情况下,条件仅引用一个字段名,字段名紧随其后
设置
是可选的设置
丢弃指定字段。这些规则是等价的:IF myfield == 2则取消设置myfield。IF myfield == 2则取消设置。
log_filter_dragnet
规则支持在错误事件中引用核心字段、可选字段和用户定义字段。
核心字段参考
的log_filter_dragnet
语法在log_filter_dragnet规则语言的语法命名筛选规则识别的核心字段。有关这些字段的一般描述,请参见第5.4.2.3节,“错误事件字段”,你应该很熟悉。下面的注释只提供了特定于内部使用的核心字段引用的附加信息log_filter_dragnet
规则。
一家
事件优先级,用于指示错误、警告或注释/信息事件。在比较中,每个优先级可以指定为符号优先级名或整数字面量。的比较才能识别优先级符号
一家
字段。这些比较是等价的:IF prio == INFORMATION THEN…IF prio == 3 THEN…
下表显示了允许的优先级级别。
事件类型 优先级标志 数字优先 错误的事件 错误
1 警告事件 警告
2 注意/信息事件 信息
3. 还有一个消息优先级
系统
,但是系统消息不能被过滤,并且总是被写入错误日志。优先级值遵循高优先级值较低的原则,反之亦然。对于最严重的事件(错误),优先级值从1开始,对于优先级降低的事件,优先级值增加。例如,要丢弃优先级低于警告的事件,请测试优先级值是否高于警告
警告
:如果prio >警告,则丢弃。
下面的示例显示
log_filter_dragnet
每条规则都能达到相似的效果log_error_verbosity
的值。log_filter_internal
过滤器:只有错误(
log_error_verbosity = 1
):IF prio > ERROR THEN drop。
错误及警告(
log_error_verbosity = 2
):如果prio >警告,则丢弃。
错误、警告和注意事项(
log_error_verbosity = 3
):IF prio > INFORMATION THEN drop。
这条规则实际上可以省略,因为没有
一家
大于信息
,所以实际上它不会掉任何东西。
err_code
数字事件错误码。在比较中,要测试的值可以指定为符号错误名或整数字面量。错误符号仅在与
err_code
字段和用户定义的字段。这些比较是等价的:如果err_code == ER_ACCESS_DENIED_ERROR那么…IF err_code == 1045 THEN…
err_symbol
事件错误符号,作为字符串(例如,
“ER_DUP_KEY”
).err_symbol
值更多地用于标识日志输出中的特定行,而不是用于筛选规则比较,因为log_filter_dragnet
不将指定为字符串的比较值解析为等效的数值错误代码。(要做到这一点,必须使用不加引号的符号指定错误。)
可选字段参考
的log_filter_dragnet
语法在log_filter_dragnet规则语言的语法命名筛选规则识别的可选字段。有关这些字段的一般描述,请参见第5.4.2.3节,“错误事件字段”,你应该很熟悉。下面的注释只提供额外的信息,因为它专门涉及在其中使用的可选字段引用log_filter_dragnet
规则。
标签
对应的标签
一家
值,作为字符串。过滤规则可以更改支持自定义标签的日志接收器的标签。标签
值更多地用于标识日志输出中的特定行,而不是用于筛选规则比较,因为log_filter_dragnet
不将指定为字符串的比较值解析为等效的数值优先级。source_file
事件发生的源文件,没有任何前导路径。例如,测试
sql / gis / distance.cc
文件,像这样写比较:IF source_file == "distance. "cc“那么…
自定义字段引用
中的任何字段名log_filter_dragnet
不被识别为核心字段名或可选字段名的过滤规则引用用户定义的字段。