如何启用 syslogd 来接受来自远程记录器的 Snow Leopard 传入连接?

如何启用 syslogd 来接受来自远程记录器的 Snow Leopard 传入连接?

如何让 syslogd 接受来自 Snow Leopard 上的远程主机的传入连接?

我想集中日志记录,以便各种设备和系统将日志发送到 Snow Leopard 的 syslogd,后者通常挂在 UDP 514 上。但是,我无法让它们被好用的 syslogd 成功接受。我在 Snow Leopard 盒子上执行了 tcpdump 以验证数据包是否被发送到端口 514 — 确实如此。我检查了 syslogd 是否正在监听 514 — 事实并非如此。

通过谷歌搜索,我发现在旧版本的 OSX 上(难道您不喜欢 OSX 上变化如此之快的方式吗),只需向 syslogd 守护程序添加一个标志即可允许远程;可以在 com.apple.syslogd.plist 中执行此操作。但是 syslogd 守护程序没有标志(至少在其手册页中没有)来提示任何远程操作。

有什么办法可以解决这个问题?

次要的、不太重要但相关的问题:什么是“newsyslog”?我看到一个 plist 文件,但它没有运行(显然)。

谢谢

答案1

我还没有尝试过这个,但是我在 plist 中查找了 syslogd (/System/Library/LaunchDaemons/com.apple.syslogd.plist) 并看到这部分被注释掉了:

<!--
        Un-comment the following lines to enable the network syslog protocol listener.
-->
<!--
        <key>NetworkListener</key>
        <dict>
                <key>SockServiceName</key>
                <string>syslog</string>
                <key>SockType</key>
                <string>dgram</string>
        </dict>
-->

删除注释然后重新加载服务:

$ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
$ sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist

您可能已经上路了。


回答你的第二个问题——newsyslog类似于日志旋转通常在 Linux 系统上发现。man newsyslog(或在线的)将会告诉你更多。

与 Snow Leopard 一起安装后,它会根据launchd其 plist 中的以下位每 30 分钟运行一次:

<key>StartCalendarInterval</key>
<dict>
    <key>Minute</key>
    <integer>30</integer>
</dict>

答案2

请注意,如果你尝试在雪豹服务器机器(至少是 10.6.4),你会发现 /System/Library/LaunchDaemons/com.apple.syslogd.plist 中没有注释掉的部分(并且 plist 文件以二进制格式存储)。

但是,复制并粘贴 Doug 上面引用的密钥就可以了,不过首先你需要将文件的格式转换为文本:

sudo plutil -convert xml1 /System/Library/LaunchDaemons/com.apple.syslogd.plist

...并且您可能应该随后将其转换回来(转换在原地进行):

sudo plutil -convert binary1 /System/Library/LaunchDaemons/com.apple.syslogd.plist

...然后根据 Doug 的指示重新加载 launchd 守护进程。

随后,完整的 plist 文件应如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableTransactions</key>
    <true/>
    <key>HopefullyExitsLast</key>
    <true/>
    <key>Label</key>
    <string>com.apple.syslogd</string>
    <key>MachServices</key>
    <dict>
        <key>com.apple.system.logger</key>
        <true/>
    </dict>
    <key>OnDemand</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/syslogd</string>
    </array>
    <key>Sockets</key>
    <dict>
        <key>AppleSystemLogger</key>
        <dict>
            <key>SockPathMode</key>
            <integer>438</integer>
            <key>SockPathName</key>
            <string>/var/run/asl_input</string>
        </dict>
        <key>BSDSystemLogger</key>
        <dict>
            <key>SockPathMode</key>
            <integer>438</integer>
            <key>SockPathName</key>
            <string>/var/run/syslog</string>
            <key>SockType</key>
            <string>dgram</string>
        </dict>
        <key>NetworkListener</key>
        <dict>
            <key>SockServiceName</key>
            <string>syslog</string>
            <key>SockType</key>
            <string>dgram</string>
        </dict>
    </dict>
</dict>
</plist>

还有一点需要注意:如果你和我一样,想要将 AirPort 基站(和/或 Time Capsules)的系统日志输出发送到你的服务器,它们会使用设备 0,这是无法改变的。这意味着它们将被自动记录到 /var/log/appfirewall.log,因为 /etc/syslog.conf 中有以下默认条目:

local0.*                                               /var/log/appfirewall.log

在服务器版本的操作系统上,一旦您发出以下命令,您就可以安全地将文件名更改为 AirPort.log:

sudo touch /var/log/AirPort.log

...因为 Apple 的应用程序防火墙 (socketfilterfw) 默认关闭(在服务器上也应该保持关闭状态 — ipfw 才是您真正想要的)。我不确定是否可以重新配置 socketfilterfw 以使用不同的 syslog 工具。

答案3

在 Snow Leopard 上启用 syslogd 网络访问的另一种方法是使用命令行程序 PlistBuddy,

sudo /usr/libexec/PlistBuddy /System/Library/LaunchDaemons/com.apple.syslogd.plist
add :Sockets:NetworkListener dict
add :Sockets:NetworkListener:SockServiceName string syslog
add :Sockets:NetworkListener:SockType string dgram
save
quit

然后重新启动守护进程,

sudo launchctl unload com.apple.syslogd.plist 
sudo launchctl load com.apple.syslogd.plist 

您可以使用 lsof 检查 syslogd 是否正在监听标准 syslog 端口 514,

$ sudo lsof -i:514
COMMAND   PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
launchd     1 root   44u  IPv6 0x0e459370      0t0  UDP *:syslog
launchd     1 root   56u  IPv4 0x0f7a9ef0      0t0  UDP *:syslog
syslogd 24319 root    5u  IPv6 0x0e459370      0t0  UDP *:syslog
syslogd 24319 root    6u  IPv4 0x0f7a9ef0      0t0  UDP *:syslog

相关内容