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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

本节书摘来自异步社区《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" >

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

相关文章
|
25天前
|
存储 监控 安全
深入解析Sysmon日志:增强网络安全与威胁应对的关键一环
在不断演进的网络安全领域中,保持对威胁的及时了解至关重要。Sysmon日志在这方面发挥了至关重要的作用,通过提供有价值的见解,使组织能够加强其安全姿态。Windows在企业环境中是主导的操作系统,因此深入了解Windows事件日志、它们的独特特性和局限性,并通过Sysmon进行增强,变得至关重要。
|
2月前
|
网络协议 网络安全
基于bind软件部署DNS服务器
关于如何使用bind软件部署DNS服务器的教程,包括DNS服务器的类型、基于bind软件的部署步骤、验证DNS服务器可用性的指导,以及如何进行DNS正向解析的实现。
89 2
基于bind软件部署DNS服务器
|
1月前
|
存储 缓存 网络协议
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
搭建dns服务常见报错--查看/etc/named.conf没有错误日志信息却显示出错(/etc/named.conf:49: missing ‘;‘ before ‘include‘)及dns介绍
115 0
|
3月前
|
弹性计算 缓存 监控
基于“日志审计应用”的 DNS 日志洞察实践
DNS 解析日志是一种记录 DNS 请求和响应的基础信息,监控 DNS 服务可以帮助用户识别网络活动并保持系统安全。日志审计服务支持采集 DNS 内网解析日志、公网权威解析日志、GTM 日志。理解 DNS 日志的字段含义,洞察 DNS 日志背后所代表的网络信息,既可以帮助发现和诊断 DNS 解析相关的问题,还可以检测和识别潜在的安全威胁。
8181 15
|
3月前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
55 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
3月前
|
存储 运维 监控
深入Linux核心:文件系统与日志解析
【8月更文挑战第20天】
71 2
|
3月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
57 0
|
3月前
|
SQL 安全 测试技术
【数据守护者必备】SQL数据备份与恢复策略全解析:从全量到日志备份,手把手教你确保企业信息万无一失的实战技巧!
【8月更文挑战第31天】数据库是企业核心业务数据的基石,为防止硬件故障、软件错误或人为失误导致的数据丢失,制定可靠的备份与恢复策略至关重要。本文通过一个在线购物平台的案例,详细介绍了使用 SQL Server 进行全量备份、差异备份及事务日志备份的方法,并演示了如何利用 SQL Server Agent 实现自动化备份任务。此外,还提供了数据恢复的具体步骤和测试建议,确保数据安全与业务连续性。
146 0
|
4月前
|
数据采集 分布式计算 DataWorks
DataWorks产品使用合集之任务工作流中遇到了日志信息显示参数值没有正确解析的问题,该如何处理
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
3月前
|
JavaScript 前端开发
bind原理深度解析
【8月更文挑战第1天】bind原理深度解析
39 0

相关产品

  • 云解析DNS
  • 推荐镜像

    更多