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


11

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

我想集中记录,以便各种设备和系统将日志发送到通常挂在UDP 514上的Snow Leopard的syslogd。但是,我无法使它们成功被优秀的ole syslogd接受。我在Snow Leopard盒上进行了tcpdump转储,以验证是否将数据包喷射到了端口514上。我检查syslogd是否在514上侦听-不是。

谷歌搜索告诉我,在旧版本的OSX上(您不喜欢OSX上变化如此之快的方式),只需要向syslogd守护程序添加一个标志就可以进行远程控制。一个是在com.apple.syslogd.plist中做到的。但是,syslogd守护程序没有标志(至少在其手册页中),该标志不建议任何远程操作。

有什么解决方案?

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

谢谢


有人知道答案吗?我喜欢问未解决的问题。
Emmel

Answers:


5

我没有尝试过,但是我在syslogd的plist中进行了查找(/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系统上常见的logrotate相似。man newsyslog(或在线)会告诉您更多信息。

随Snow Leopard一起安装时,每30分钟运行一次,运行方式launchd为:

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

太棒了!这正是我一直在寻找的答案。我刚刚测试过,是的,确认它可以工作。谢谢,道格。
Emmel

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

...并且您可能应该将其转换回原位(转换发生在原位):

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

...然后按照Doug的说明重新加载启动的守护程序。

之后,完整的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)的syslog输出发送到服务器,它们将使用设施0,设施不能更改。这意味着由于/etc/syslog.conf中的以下默认条目,它们将自动记录到/var/log/appfirewall.log中:

local0.*                                               /var/log/appfirewall.log

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

sudo touch /var/log/AirPort.log

...由于Apple的应用程序防火墙(socketfilterfw)在默认情况下处于关闭状态(并且应在服务器上保持关闭状态,ipfw才是您真正想要的)。我不确定是否可以重新配置socketfilterfw以使用其他syslog工具。


1
正是我想要的,完美的答案!
deceze 2010年

在10.6.7上测试,可以正常工作。谢谢!
亚历山大·泰勒

这正是我想要做的!即,让我的4个AEBS登录到运行SLS的Xserve。非常感激!
丹尼斯·伍斯特

我通常添加-udp_in arg,这样我就可以从ps命令中知道我是否将其作为远程侦听器运行。<key>ProgramArguments</key> <array> <string>/usr/sbin/syslogd</string> <string>-udp_in</string> </array>
tgunr 2012年

在山狮(而不是服务器)这些指令做工精细
尼尔森

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

然后重新启动守护程序,

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

该解决方案似乎也适用于优胜美地。谢谢。
史蒂夫·鲍威尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.