28,MySQL 8.0 参考手册5.4.2.5错误日志过滤

错误日志配置通常包括一个日志过滤器组件和一个或多个日志记录器组件。对于错误日志过滤,MySQL提供了一些组件选择:
  
  log_filter_internal:此过滤器组件提供基于日志事件优先级的错误日志过滤,并结合 log_error_verbosity系统变量。log_filter_internal内置并默认启用。请参阅 log_filter_internal:基于优先级的错误日志过滤。
  
  log_filter_dragnet:此过滤器组件提供基于用户提供的规则的错误日志过滤,并结合 dragnet.log_error_filter_rules 系统变量。请参阅 log_filter_dragnet:基于规则的错误日志过滤。
  
  log_filter_internal:基于优先级的错误日志过滤
  
  错误日志冗长控制是基于错误事件优先级的简单日志过滤形式。它由 log_filter_internal日志过滤器组件实现。要影响如何log_filter_internal允许或抑制用于错误日志的错误,警告和注释事件,请设置 log_error_verbosity系统变量。log_filter_internal默认情况下内置并启用,但如果禁用,更改将 log_error_verbosity不起作用。
  
  允许的log_error_verbosity 值为1(仅限错误),2(错误和警告),3(错误,警告和注释)。
  
  如果log_error_verbosity设置为2或更大,则服务器记录有关用于基于语句的日志记录不安全的语句的消息。如果值为3,则服务器将记录中止连接和访问被拒绝的错误以尝试新的连接。参见 第B.5.2.10节“通信错误和中止的连接”。
  
  如果使用复制,log_error_verbosity建议设置 为2或更大,以获取有关正在发生的更多信息,例如关于网络故障和重新连接的消息。
  
  如果从属服务器 log_error_verbosity设置为2或更高,则从属设备将消息打印到错误日志中以提供有关其状态的信息,例如二进制日志和中继日志坐标,它在开始其作业的位置,当它切换到另一个中继日志时,当它在断开之后重新连接时,等等。
  
  所选的有关非错误情况的重要系统消息将被打印到错误日志中,而不管该log_error_verbosity值如何 。这些消息包括启动和关闭消息以及设置的一些重大更改。
  
  在MySQL错误日志中,系统消息被标记为 “ 系统 ”。其他日志编写者可能会也可能不遵循相同的约定,并且在生成的日志中,系统消息可能会被分配用于严重级别信息级别的标签,例如“ 注释 ”或 “ 信息 ”。如果您根据消息的标签对日志记录应用任何其他过滤或重定向,则系统消息不会覆盖您的过滤器,而是按照与其他消息相同的方式处理它。
  
  log_filter_dragnet:基于规则的错误日志过滤
  
  的log_filter_dragnet日志过滤器组件能够基于用户定义的规则日志过滤。要定义适用的规则,请设置 dragnet.log_error_filter_rules 系统变量。
  
  要启用log_filter_dragnet过滤器,首先加载过滤器组件,然后修改该 log_error_services值。以下示例 log_filter_dragnet与内置日志编写器结合使用:
  
  INSTALL COMPONENT '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 系统变量。规则集由零个或多个规则组成,其中每个规则是一个IF由句点(.)字符终止的语句。如果变量值为空(零规则),则不进行过滤。
  
  示例1.此规则集丢弃信息事件,并且对于其他事件,删除该source_line 字段:
  
  SET GLOBAL dragnet.log_error_filter_rules =
  
  'IF prio>=INFORMATION THEN drop. IF EXISTS source_line THEN unset source_line.';
  
  效果与设置为的过滤器执行的log_sink_internal过滤 类似 log_error_verbosity=2。
  
  示例2:此规则将信息事件限制为每60秒不超过一次:
  
  SET GLOBAL dragnet.log_error_filter_rules = 'IF prio>=INFORMATION THEN throttle 1/60.';
  
  一旦你设置了你想要的过滤配置,考虑分配 dragnet.log_error_filter_rules 使用,SET PERSIST而不是 SET GLOBAL让服务器重新启动时保持设置。或者,将该设置添加到服务器选项文件。
  
  要停止使用过滤语言,请首先将其从一组错误记录组件中删除。通常这意味着使用不同的过滤器组件而不是过滤器组件。例如:
  
  SET GLOBAL log_error_services = 'log_filter_internal; log_sink_internal';
  
  同样,考虑使用使用 SET PERSIST而不是 SET GLOBAL使服务器重新启动时保持设置。
  
  然后卸载过滤器 log_filter_dragnet组件:
  
  UNINSTALL COMPONENT 'file://component_log_filter_dragnet';
  
  以下各节log_filter_dragnet更详细地介绍操作的各个方面 :
  
  log_filter_dragnet规则语言
  
  log_filter_dragnet规则操作
  
  log_filter_dragnet规则字段
  
  log_filter_dragnet规则语言
  
  以下语法定义log_filter_dragnet过滤规则的语言 。每条规则是一个IF由句点(.)字符结尾的语句。该语言不区分大小写。
  
  rule:
  
  IF condition THEN action
  
  [ELSEIF condition THEN action] ...
  
  [ELSE action]
  
  .
  
  condition: {
  
  field comparator value
  
  | [NOT] EXISTS field
  
  | condition {AND | OR}  condition
  
  }
  
  action: {
  
  drop
  
  | throttle {count | count / window_size}
  
  | set field [:= | =] value
  
  | unset [field]
  
  }
  
  field: {
  
  core_field
  
  | optional_field
  
  | user_defined_field
  
  }
  
  core_field: {
  
  time
  
  | msg
  
  | prio
  
  | label
  
  | err_code
  
  | err_symbol
  
  | SQL_state
  
  | subsystem
  
  }
  
  optional_field: {
  
  OS_errno
  
  | OS_errmsg
  
  | user
  
  | host
  
  | thread
  
  | query_id
  
  | source_file
  
  | source_line
  
  | function
  
  }
  
  user_defined_field:
  
  sequence of characters in [a-zA-Z0-9_] class
  
  comparator: {== | != | <> | >= | => | <= | =< | < | >}
  
  value: {
  
  string_literal
  
  | integer_literal
  
  | float_literal
  
  | error_symbol
  
  | severity
  
  }
  
  count: integer_literal
  
  window_size: integer_literal
  
  string_literal:
  
  sequence of characters quoted as '...' or "..."
  
  integer_literal:
  
  sequence of characters in [0-9] class
  
  float_literal:
  
  integer_literal[.integer_literal]
  
  error_symbol:
  
  valid MySQL error symbol such as ER_ACCESS_DENIED_ERROR or ER_STARTUP
  
  severity: {
  
  ERROR
  
  | WARNING
  
  | INFORMATION
  
  }
  
  简单条件将字段与值或测试字段存在进行比较。要构建更复杂的条件,请使用 AND和OR运算符。两个操作员具有相同的优先级并从左向右评估。
  
  要转义字符串中的字符,请在其前面加上反斜杠(\)。反斜杠需要包含反斜杠本身或字符串引用字符,对其他字符可选。
  
  为方便起见,log_filter_dragnet 支持用于比较某些字段的符号名称。在适用的情况下,符号的可读性和可移植性优于数值。
  
  事件严重性值1,2,和3可被指定为 ERROR,WARNING,和 INFORMATION。严重性符号仅在与该prio字段进行比较时才被识别 。这些比较是相同的:
  
  IF prio == INFORMATION THEN ...
  
  IF prio == 3 THEN ...
  
  错误代码可以用数字形式或相应的错误符号指定。例如, ER_STARTUP是错误的符号名称1408。有关错误代码编号和符号的列表,请参见 第B.3节“服务器错误代码和消息”。错误符号仅在与err_code字段和用户定义字段进行比较时才被识别 。这些比较是相同的:
  
  IF err_code == ER_STARTUP THEN ...
  
  IF err_code == 1408 THEN ...
  
  可以将符号名称指定为带引号的字符串,以便与字符串字段进行比较,但在这种情况下,名称是没有特殊含义的字符串,并且 log_filter_dragnet不会将它们解析为相应的数字值。
  
  log_filter_dragnet规则操作
  
  log_filter_dragnet 在过滤规则中支持这些操作:
  
  drop:删除当前日志事件(不记录它)。
  
  throttle:应用速率限制以减少符合特定条件的事件的日志详细程度。参数以表格count或 count/ 表示费率 window_size。该count值表示每个时间窗口允许记录的事件数量。该 window_size值是以秒为单位的时间窗口; 如果省略,默认窗口是60秒。这两个值都必须是整数文字。
  
  此规则将插件关闭消息每60秒限制为5次:
  
  IF err_code == ER_PLUGIN_SHUTTING_DOWN_PLUGIN THEN throttle 5.
  
  此规则将错误和警告限制为每小时1000次,并将信息消息限制为每小时100次:
  
  IF prio <= INFORMATION THEN throttle 1000/3600 ELSE throttle 100/3600.
  
  set:为一个字段分配一个值(并且如果该字段尚未存在,则使该字段存在)。在随后的规则中,EXISTS针对字段名称的测试是正确的,并且新值可以通过比较条件进行测试。
  
  unset:丢弃一个字段。在随后的规则中,EXISTS对字段名称的测试是错误的,并且字段与任何值的比较都是错误的。
  
  在条件仅指一个字段名称的特殊情况下,以下字段名称 unset是可选的,并 unset放弃指定的字段。这些规则是等同的:
  
  IF myfield == 2 THEN unset myfield.
  
  IF myfield == 2 THEN unset.
  
  log_filter_dragnet规则字段
  
  log_filter_dragnet 在规则中支持核心,可选和用户定义的字段:
  
  为错误事件自动设置核心字段。但是,它在事件中的存在并不能保证,因为核心字段(如任何类型的字段)可能会被过滤规则取消设置。如果是这样,该规则集中的后面的规则以及在过滤器之后执行的组件(例如日志编写者)会发现该字段缺失。
  
  通常不存在可选字段,但可能存在某些事件类型。当存在时,可选字段提供适当和可用的附加事件信息。
  
  用户定义的字段是名称尚未定义为核心字段或可选字段的任何字段。用户定义的字段在使用该set操作创建之前不存在 。
  
  正如前面的描述所暗示的那样,任何给定的字段都可能不存在,或者因为它不在第一位,或者被过滤规则丢弃。对于日志编写者来说,字段缺失的影响是作者特定的。例如,作者可能会忽略日志消息中的字段,指示该字段丢失或替代默认值。如果有疑问,请使用过滤规则取消设置字段,然后检查日志编写者用它做什么。 学什么专业好
  
  这些领域是核心领域:
  
  time
  
  事件时间戳。
  
  msg
  
  事件消息字符串。
  
  prio
  
  事件优先级,用于指示错误,警告或注释/信息事件。该字段对应严重程度syslog。
  
  在比较中,可以将每个优先级指定为符号严重性名称或整数文字。严重性符号仅在与该prio字段进行比较时才被识别 。这些比较是相同的:
  
  IF prio == INFORMATION THEN ...
  
  IF prio == 3 THEN ...
  
  下表显示了允许的优先级别。
  
  事件类型 优先权标志 数字优先
  
  错误事件 ERROR 1
  
  警告事件 WARNING 2
  
  注/信息事件 INFORMATION 3
  
  优先级值遵循较高优先级具有较低值的原则,反之亦然。对于最严重的事件(错误),优先级值从0开始,对于严重程度递减的事件,优先级值会增加。例如,要放弃优先级低于警告的事件,请检查优先级值高于 WARNING:
  
  IF prio > WARNING THEN drop.
  
  以下示例显示了log_filter_dragnet达到类似于 过滤器log_error_verbosity允许的每个值的效果的 规则 log_filter_internal:
  
  仅错误(log_error_verbosity=1):
  
  IF prio > ERROR THEN drop.
  
  错误和警告(log_error_verbosity=2):
  
  IF prio > WARNING THEN drop.
  
  错误,警告和注释(log_error_verbosity=3):
  
  IF prio > INFORMATION THEN drop.
  
  err_code
  
  数字事件错误代码。在比较中,要测试的值可以指定为符号错误名称或整数文字。错误符号仅在与err_code字段和用户定义字段进行比较时才被识别。这些比较是相同的:
  
  IF err_code == ER_ACCESS_DENIED_ERROR THEN ...
  
  IF err_code == 1045 THEN ...
  
  err_symbol
  
  事件错误符号,作为一个字符串; 例如 'ER_DUP_KEY'。 err_symbol值更多地用于标识日志输出中的特定行,而不是用于过滤规则比较,因为 log_filter_dragnet它不会将指定为字符串的比较值解析为等效的数字错误代码。
  
  SQL_state
  
  作为字符串的事件SQLSTATE值; 例如 '23000'。
  
  subsystem
  
  发生事件的子系统。可能的值是InnoDB( InnoDB存储引擎), Repl(复制子系统) Server(否则)。
  
  可选字段分为以下几类:
  
  有关错误的其他信息,例如操作系统发出的错误或错误标记:
  
  OS_errno
  
  操作系统错误号。
  
  OS_errmsg
  
  操作系统错误消息。
  
  label
  
  prio 作为字符串 的值对应的标签。过滤规则可以更改支持自定义标签的日志编写者的标签。 label值更多地用于标识日志输出中的特定行,而不是用于过滤规则比较,因为 log_filter_dragnet不会将指定为字符串的比较值解析为等效数字优先级。
  
  确定事件发生的客户:
  
  user
  
  客户端用户。
  
  host
  
  客户端主机。
  
  thread
  
  线程ID。
  
  query_id
  
  查询ID。
  
  调试信息:
  
  source_file
  
  事件发生的源文件。文件名应该省略任何前导路径。例如,要测试该 sql/gis/distance.cc文件,请像这样编写比较:
  
  IF source_file == "distance.cc" THEN ...
  
  source_line
  
  事件发生源文件中的行。
  
  function
  
  事件发生的功能。
  
  component
  
  事件发生的组件或插件。

猜你喜欢

转载自blog.csdn.net/dandan520520/article/details/79898425
今日推荐