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

Emm*_*mel 11 mac logging syslogd osx-server macos

如何让 syslogd 接受来自雪豹远程主机的传入连接?

我想集中日志记录,以便各种设备和系统将日志发送到 Snow Leopard 的 syslogd,它通常挂在 UDP 514 上。但是,我无法让好的 ole syslogd 成功接受它们。我在 Snow Leopard 机器上 tcpdumped 以验证数据包是否被喷射到端口 514 - 它们是。我检查了 syslogd 是否正在侦听 514——它不是。

谷歌搜索告诉我,在旧版本的 OSX 上(你不喜欢 OSX 上变化如此之快的方式),只需要向 syslogd 守护进程添加一个标志以允许远程;一个在 com.apple.syslogd.plist 中做到了这一点。然而 syslogd 守护进程没有任何标志(至少在它的手册页中)表明任何远程的东西。

解决这个问题的方法是什么?

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

谢谢

小智 11

请注意,如果您尝试在Snow Leopard Server机器上执行此操作(至少使用 10.6.4),您会发现 /System/Library/LaunchDaemons/com.apple.syslogd 中没有注释掉的部分.plist(并且 plist 文件以二进制格式存储)。

但是,复制并粘贴 Doug 上面引用的密钥就可以解决问题,尽管首先您需要将文件格式转换为文本:

sudo plutil -convert xml1 /System/Library/LaunchDaemons/com.apple.syslogd.plist
Run Code Online (Sandbox Code Playgroud)

...您可能应该在之后将其转换回来(转换发生在原位):

sudo plutil -convert binary1 /System/Library/LaunchDaemons/com.apple.syslogd.plist
Run Code Online (Sandbox Code Playgroud)

...然后按照 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>
Run Code Online (Sandbox Code Playgroud)

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

local0.*                                               /var/log/appfirewall.log
Run Code Online (Sandbox Code Playgroud)

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

sudo touch /var/log/AirPort.log
Run Code Online (Sandbox Code Playgroud)

...因为 Apple 的应用程序防火墙 (socketfilterfw) 在默认情况下是关闭的(并且应该在服务器上保持关闭——ipfw 就是你真正想要的)。我不确定是否可以重新配置 socketfilterfw 以使用不同的系统日志工具。


aid*_*aid 6

在 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
Run Code Online (Sandbox Code Playgroud)

然后重启守护进程,

sudo launchctl unload com.apple.syslogd.plist 
sudo launchctl load com.apple.syslogd.plist 
Run Code Online (Sandbox Code Playgroud)

您可以使用 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
Run Code Online (Sandbox Code Playgroud)


Dou*_*ris 5

我没有试过这个,但我查看了 syslogd (/System/Library/LaunchDaemons/com.apple.syslogd.plist) 的 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>
-->
Run Code Online (Sandbox Code Playgroud)

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

$ sudo launchctl unload /System/Library/LaunchDaemons/com.apple.syslogd.plist
$ sudo launchctl load /System/Library/LaunchDaemons/com.apple.syslogd.plist
Run Code Online (Sandbox Code Playgroud)

你很可能正在路上。


回答您的次要问题——newsyslog类似于经常在 linux 系统上找到的logrotateman newsyslog(或在线)会告诉你更多。

与 Snow Leopard 一起安装时,它每 30 分钟launchd在其 plist 中的每一位运行一次:

<key>StartCalendarInterval</key>
<dict>
    <key>Minute</key>
    <integer>30</integer>
</dict>
Run Code Online (Sandbox Code Playgroud)