目标

我想在Ubuntu 12.04上配置bind9以注销到命名管道。目的是将日志记录重定向到syslog-ng服务。

问题

我的问题是,当我将日志记录通道定向到命名管道文件时,绑定(bind)服务将无法启动。
这是日志记录子句,其中query.log是FIFO文件:

logging {
  channel query.log {
      file "/var/log/named/query.log";
      severity info;
      print-time yes;
      print-category yes;
  };

  category queries  { query.log; };
  category ....
};

这是在syslog中找到的输出:
Jun 12 12:37:53 hostname named[19400]: isc_file_isplainfile '/var/log/named/query.log' failed: invalid file
Jun 12 12:37:53 hostname named[19400]: configuring logging: invalid file
Jun 12 12:37:53 hostname named[19400]: loading configuration: invalid file

我尝试过的

我已经验证了权限是否正确,并且可以正常登录到标准文件。我还验证了可以通过运行以下命令通过管道发送数据
sudo -u bind bash -c 'echo "test" > /var/log/named/query.log'

我看到数据按预期出现在syslog-ng中。
我还在Apparmor中将/ usr / sbin / named设置为抱怨和禁用,但是我仍然遇到问题。

帮帮我?

我打算做什么?如果是这样,那么任何关于我可能在做什么的指针都是错误的。

最佳答案

1)回答

Bind9记录到命名

a)我一直在寻找BIND9的源代码中的解决方案,但是我发现如果没有源代码修改就无法完成。

b)最近的解决方案是登录 stderr :

logging {
  channel query.log {
   stderr;
   severity info;
   print-time yes;
   print-category yes;
 };

 category queries  { query.log; };
};

并通过修改BIND9启动脚本将其重定向到命名管道。我通过修改 /etc/init.d/bind9 做到了:
  • 您需要找到启动命令。就我而言,是№64行

    如果start-stop-daemon --start --oknodo --quiet --exec'/ usr / sbin / named'\

    --pidfile $ {PIDFILE}-$ OPTIONS“;然后
  • 并将其修改为:

    如果start-stop-daemon --start --oknodo --quiet --exec'/ bin / bash'\

    --pidfile $ {PIDFILE}--c“/ usr / sbin / named -g $ OPTIONS 2> /var/log/named/queries.log $;”;然后

  • 2)目的的答案:

    bind9允许您通过config直接登录syslog:
    logging {
     category queries { default_syslog; };
    };
    

    default_syslog香奈儿默认将日志写入syslog中。

    或者您可以编写显式配置:
    logging {
      channel query.log {
       syslog daemon;
       severity info;
       print-time yes;
       print-category yes;
     };
    
     category queries  { query.log; };
    };
    

    请参阅日志记录配置手册:
    http://www.zytrax.com/books/dns/ch7/logging.html

    07-24 12:32