《DNS与BIND(第5版)》——7.5 日志记录

简介:

本节书摘来自异步社区《DNS与BIND(第5版)》一书中的第7章,第7.5节,作者: 【美】Joseph Davies 更多章节内容可以访问云栖社区“异步社区”公众号查看。

7.5 日志记录

BIND支持扩展的日志记录(logging),包括将信息写入调试文件和发送至syslog。不过,使用扩展的日志记录是有代价的;在能够有效地控制该子系统前,必须要学习很多知识。如果没有时间来实验日志记录,那么就先使用默认值,等以后有空再来研究这个主题。大部分人并不需要更改日志记录的默认行为。

日志记录有两个主要的概念:通道(channels)和类别(categories)。通道用来指定日志数据的流向:syslog、文件、named的标准错误输出或是bit bucket。类别用来指定记录哪些数据。在BIND的源码中,名称服务器所记录的大部分消息,会根据其所涉及代码的相关功能加以分类。例如,BIND中处理动态更新的代码所产生的消息,很可能属于update类别。稍后本书将提供这些类别的列表。

每个类别的数据可以被发送到一个或多个通道。在图7-1中,查询类别的消息被记录到文件中,而区域传输数据则会在记录到文件的同时发送至syslog。


<a href=https://yqfile.alicdn.com/d44a5e23b107df5d77d6b41944b5f1d74df88994.png" >

通道允许根据消息的严重级别来进行过滤。下面是严重级别的列表,按照严重性递减的顺序排列:


<a href=https://yqfile.alicdn.com/f767c22c27683f4835a18f6b77c2d24e81262021.png" >

最前面5个严重级别(critical、error、warning、notice和info)就是syslog所使用的严重级别。而后两个(debug和dynamic)则是BIND所特有的。

可以通过debug来指定名称服务器的调试级别。如果忽略了调试级别,名称服务器会假定级别是1。如果指定了调试级别,那么在名称服务器调试功能打开时会看到该级别的消息(例如,如果指定“debug 3”,则只发送一条trace命令给名称服务器,就会看到级别3的调试消息)。如果将严重级别指定为dynamic,则名称服务器会记录匹配其调试级别的消息。(例如,给名称服务器发送一条trace命令,则会记录级别1的消息。而给名称服务器发送三条trace命令,则会记录从级别1到3的消息。)默认的严重级别是info,这意味着除非修改严重级别,否则不会看到调试消息。

提示

可以配置一个通道,将调试消息和syslog消息记录到一个文件中。但反之不然:不能配置一个通道,用syslog来记录调试消息和syslog消息;调试消息无法发送给syslog。
下面配置两个通道来说明其如何工作。第一个通道将发给syslog,并使用daemon设备进行记录,发送严重级别为info及以上的消息。第二个通道将发给一个文件,记录所有级别的调试消息以及syslog消息。下面是该logging语句的配置:


<a href=https://yqfile.alicdn.com/68b5f578bd0934d9ff93b62f12f896881801f6d8.png" >

现在已经配置了两个通道,还必须明确告诉名称服务器要向这两个通道发送哪些消息。根据图7-1所示,将区域传输类别的消息发给syslog和文件,而将查询类别的消息发给文件。由于对类别的设置也是logging语句的一部分,所以将其放在前面所示的logging语句中:


<a href=https://yqfile.alicdn.com/bed997c3d7bf52af7a01fa119b5663f30de34ff7.png" >

在配置文件中加入上述logging语句后,启动名称服务器并向它发送几个查询。如果没有任何消息写入log.msgs文件,则需要打开名称服务器的调试功能以记录查询消息:


474cb5a30cb77857d39b104f59cb0cbedf19c174

现在,如果向名称服务器发送一些查询,则它们会被记录到log.msgs文件中。但是查找名称服务器的工作目录:将会找到一个名为named.run的新文件。所有其他调试信息都会写入该文件。不过如果仅打算记录传输与查询的日志,而不记录其他的调试信息,要怎么做才能不产生named.run文件呢?

日志记录中还有一个特殊的类别没有说明:default。如果没有为某个类别分配任何通道,则BIND会将此类消息发送至分配给defaul__t类别的通道。可以通过修改defaul__t类别的配置,来丢弃所有的日志消息(有一个null通道可以实现该 目的):


<a href=https://yqfile.alicdn.com/eeeedf214016664026e283b4cf1ccdd256898077.png" >

现在,启动服务器,将调试级别设置为1(如果有必要的话),并发送一些查询。这些查询将会记录在log.msgs文件最后,虽然仍会生成named.run文件但其内容为空。很好!已经开始逐渐掌握该功能了。

过了几天,会发现名称服务器发送至syslog的消息,比过去少得多。这是怎么回事呢?

在默认情况下,defaul__t类别被设置为:将消息同时发送至syslog和调试文件(named.run)。当把defaul__t类别设置为发送至null通道时,就同时关闭了其他syslog消息。所以应该将设置改为:


<a href=https://yqfile.alicdn.com/07898f6e7127bb49ad7c593f0bd605b356b6f4b9.png" >

这会将syslog消息发送至syslog,但不会将调试或syslog消息写入文件中。

记住,要想完全掌握日志记录,那么一定要花一些时间去实验它。对于可能遇到的问题,希望这些例子能够提供一些指引。现在,本节将更深入地讨论日志记录的相关细节。
**
7.5.1 logging语句**
下面是logging语句的语法,相当复杂。下面将举更多的例子来解释每条子语句的含义:


<a href=https://yqfile.alicdn.com/578266557f1f24a4b4ae13aca498cc11e5e227a5.png" >

以下是默认的通道。即使不使用它们,名称服务器也会创建这些通道。不能重新定义这些通道;只能增加新的通道。


f0c9d2a4cd31594b4b48e7511239570d2a962985

如果没有为default、panic、packet及eventlib分配通道,则BIND 8名称服务器默认会为其分配以下通道:


<a href=https://yqfile.alicdn.com/600b77dc25ee47dca3fac2683828693f3faef3f1.png" >

而BIND 9名称服务器默认会使用以下logging语句:


<a href=https://yqfile.alicdn.com/35dd3e6bd3961ea70f6d78e75aa36ab55006509a.png" >

本书前面提到,default类别将消息同时记录到syslog和调试文件(默认为named.run)。这意味着所有严重级别为info及以上的syslog消息都会发送至syslog,并且当调试功能打开时,syslog消息及调试消息都会写入named.run文件中。
**
7.5.2 通道详解**
通道可以被定义为发送至文件、syslog或null。

1.文件通道

如果通道发送至一个文件,则必须指定文件的路径名称。另外,还可以指定该文件可以同时存在多少个版本,以及该文件大小的最大值。

如果指定文件可以存在三个版本,则BIND将保留file、file.0、file.1和file.2。在名称服务器启动或重载后,它会把file.1改为file.2,把file.0改为file.1,把file改为file.0,并创建一个新的file。如果指定了无限的版本数,则BIND将保留99个版本的文件。

如果指定了文件大小的最大值,则名称服务器会在文件达到指定的大小后,停止写入该文件。与versions子语句(上一段提到过)不同的是,当达到指定大小时,不是循环覆盖使用该文件,而是打开一个新的文件。如果不指定文件的大小,则文件可以无限增大。

下面是一个文件通道的例子,使用了versions和size子语句:


<a href=https://yqfile.alicdn.com/278622aece07e4ef15454b04ff184094dc86414e.png" >

正如例子所示,文件大小可以使用换算系数(scaling factor)。K或k表示kilobytes;M或m表示megabytes;G或g表示gigabytes。

有一点很重要,如果想看到调试消息,则需要将严重级别指定为debug或dynamic。默认的严重级别为info,仅显示syslog消息。

2.syslog通道

如果通道发送至syslog,则可以指定为下面任意一个设备:kern、user、mail、daemon、auth、syslog、lpr、news、uucp、cron、authpriv、ftp、local0、local1、local2、local3、local4、local5、local6或local7。默认值为daemon,本书建议使用该默认值,或者使用local设备。

下面是一个syslog通道的例子,使用了设备local0而不是daemon:


<a href=https://yqfile.alicdn.com/5ccfbb2287103dca4a092c9be99561a4a6ac67fc.png" >

3.stderr通道

default_stderr是一个预定义通道,用于任何打算写入名称服务器stderr文件描述符中的消息。在BIND 8中,不能配置其他文件描述符来使用stderr。但在BIND 9中可以。

4.null通道

null通道是一个预定义通道,用于任何打算丢弃的消息。

5.所有通道的数据格式

BIND日志设备还允许对消息的格式做一些控制。可以在消息中增加时间戳、类别以及严重级别。

下面是一个调试消息的例子,包含所有额外的数据格式:


6f329cba826e2a38e623b9ab7321eebd018d1145

这条消息的类别是config,并且严重级别为debug级别1。

下面是一个通道配置的例子,包含所有三个附加的数据格式:


59dd2e3560378f091b5f04b9b5864ac53b63ada5

在syslog通道中,其实不需要给消息增加时间戳,因为syslog自己会增加时间和日期。

7.5.3 类别详解
BIND 8及BIND 9都拥有很多类别。不幸的是,它们的类别并不相同。下面会将它们全部列出。与其试图弄清楚哪些是想要看到的,本书建议还是先对名称服务器进行配置,让其显示出所有的日志消息,包括它们的类别和严重级别,然后再挑选出想要看到的。待介绍完所有类别后,本书再介绍应该如何做。

1.BIND 8的类别

default

如果没有为类别指定任何通道,则其会使用default类别的通道。在这种意义上,default就代表着所有类别。由于有一些消息不属于任何类别,所以,即使给每个类别分别指定了通道,但为了所有未分类的消息,仍然需要给default类别指定一个通道。

如果没有为default类别指定通道,则系统会指定如下配置:


<a href=https://yqfile.alicdn.com/c8b0d6e51a9f938d464378de1f0619f449b1413b.png" >

cname

CNAME错误(例如,“. . . has CNAME and other data”)。

config

高级别的配置文件处理。

db

数据库操作。

eventlib

系统事件;必须指向一个文件通道。其默认为:


9291e5700f74b3b3b1ef8b433b45158754a5da7e

insist

内部一致性检查失败。

lame-servers

错误授权的检测。

load

区域载入消息。

maintenance

定期维护事件(例如,系统查询)。

ncache

否定缓存事件。

notify

异步区域变更通知。

os

操作系统的相关问题。

packet

所接收和发送包的解码;必须指向一个文件通道。其默认为:


<a href=https://yqfile.alicdn.com/ba8b275f600f84bbcfa5623f371311613c3c5304.png" >

panic

导致服务器关闭的问题。这些问题会被同时记录到panic类别和其原本所属的类别中。其默认为:


e21d3f1bf3410f1ddd615cf198ceb21841185dcc

parser

低级别的配置文件处理。

queries

查询日志。

response-checks

有问题的应答、无关的附加信息等。

security

认可的/未认可的请求。

statistics

活动的定期报告。

update

动态更新事件。

update-security

未认可的动态更新。(在BIND 版中,这些消息被移至它们自己的类别,所以管理员更容易将它们过滤出来。)

xfer-in

从远程名称服务器到本地名称服务器的区域传输。

xfer-out

从本地名称服务器到远程名称服务器的区域传输。

2.BIND 9的类别

default

如同BIND 8,BIND 9的default类别匹配所有未明确分配通道的类别。与BIND 8不同的是,BIND 9的default类别不匹配未分类的BIND的消息。这些消息属于下面这个类别的一部分。

general

genera__l类别包括所有未明确分类的BIND消息。

client

处理客户端的请求。

config

配置文件的分析与处理。

database

BIND内部数据库的相关消息;用于储存区域数据及缓存记录。

dnssec

处理DNSSEC-signed的响应。

lame-servers

错误授权的检测(BIND 中重新加入该功能;在此之前,lame server消息被记录到resolver中)。

network

网络操作。

notify

异步区域变更通知。

queries

查询日志(BIND 中加入该功能)。

resolver

名称解析,包括来自解析器递归查询的处理。

security

认可的/未认可的请求。

update

动态更新事件。

update-security

未认可的动态更新。相关注意事项如同BIND 8(BIND 版中加入该功能)。

xfer-in

从远程名称服务器到本地名称服务器的区域传输。

xfer-out

从本地名称服务器到远程名称服务器的区域传输。

3.查看所有类别消息

充分了解日志记录的好方法是:先配置名称服务器将所有消息记录到一个文件中,包括它们的类别和严重级别,然后再挑选出感兴趣的消息。

前面曾经列出类别的默认配置。下面是BIND 8的:


045d116fbaa6f8f138bc87b937f71ffcd20e166c

而下面是BIND 9的:


<a href=https://yqfile.alicdn.com/ffe9f09c7cb367d8b5c2880657711e437e6963d1.png" >

默认情况下,写入default___debug通道的消息并不包含类别及严重级别。为了能够看到所有的日志消息,以及它们的类别和严重级别,必须自行配置每个类别。

下面是BIND 8的logging语句:


08ca8add32b21943127570e49e343ae10c220e4c

(BIND 9的logging语句中没有panic、packet或eventlib类别。)

注意,上述配置在定义每个类别时都包含了my___file通道。还增加了一个在默认logging语句中所没有的类别:queries。除非配置了queries类别,否则查询的日志消息不会被显示出来。

启动服务器并将调试打开到级别1。然后会在log.msgs文件中看到如下消息。(BIND 9仅显示查询消息,因为它已经不再产生这些调试消息了。)


<a href=https://yqfile.alicdn.com/640b99d99d8145665de58a20b430e5094655b29e.png" >

一旦确定了感兴趣的消息,就可以配置服务器仅记录这些消息了。

相关文章
|
4月前
|
设计模式
二十三种设计模式全面解析-职责链模式的高级应用-日志记录系统
二十三种设计模式全面解析-职责链模式的高级应用-日志记录系统
|
6月前
|
SQL Oracle 关系型数据库
问题出在Debezium Oracle Connector的日志解析器上
问题出在Debezium Oracle Connector的日志解析器上
49 2
|
18天前
|
网络协议 Linux 网络安全
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
Linux服务器DNS服务器配置实现bind的正向解释和反向解释
17 0
|
5月前
|
canal 消息中间件 关系型数据库
微服务轮子项目(36) -Canal数据库日志解析消费
微服务轮子项目(36) -Canal数据库日志解析消费
61 0
|
1月前
|
消息中间件 测试技术 Python
Python使用多线程解析超大日志文件
Python使用多线程解析超大日志文件
20 0
|
2月前
|
SQL 监控 关系型数据库
数据库日志解析:深入了解MySQL中的各类日志
数据库日志解析:深入了解MySQL中的各类日志
167 0
|
4月前
|
缓存 关系型数据库 MySQL
这个错误提示表明Flink CDC在解析MySQL的二进制日志时,找不到对应表的TableMap事件。
这个错误提示表明Flink CDC在解析MySQL的二进制日志时,找不到对应表的TableMap事件。
145 2
|
4月前
|
存储 人工智能 监控
日志服务 SLS 深度解析:拥抱云原生和 AI,基于 SLS 的可观测分析创新
阿里云日志服务 SLS 全面拥抱云原生和 AI,近一年持续进行技术创新,此次云栖大会上发布了在稳定可靠、高性能、开放易用、AI 加持、低成本等五个方面的全面升级。
101978 4
|
4月前
|
存储 数据采集 运维
构建高效日志管理系统:阿里云产品实践与技术解析
日志管理对于系统运维和故障排查至关重要。本文将详细介绍如何利用阿里云相关产品搭建一个高效、可扩展的日志管理系统。我们将使用Log Service、Elasticsearch、DataHub等阿里云产品,通过代码示例和详细说明,带你一步步完成整个流程。
130 0
|
9月前
|
SQL 存储 关系型数据库
MySQL日志文件解析
在MySQL服务器运行过程中,除了会产生各种数据文件外,还会记录各种日志文件,这些日志文件不仅仅记录MySQL的数据库的运行情况、用户操作、错误信息等,还和MySQL服务器的数据息息相关。
120 0

相关产品

  • 云解析DNS
  • 推荐镜像

    更多