在 CentOS 7 中,我如何定位和查看所有系统日志,这些日志告诉我谁试图进入系统、谁进入了系统、他们联系了哪些进程、他们完成了什么等等。我希望能够将每个活动链接到任一活动用户 ID 或远程 IP 地址。
我的var/log/目录包含许多资源,包括/var/log/messages和/var/log/secure,但大多数文件都是类型的Binary (application/octet-stream),操作系统不知道如何打开它们,除非我将一些未知的查看程序与它们关联起来。此外,var/log/firewalld似乎不包含有用的信息。
我可以找到我的应用程序、我的数据库和 NginX/Apache 生成的所有日志。
我的目标是使用syslog (rsyslog)记录apt/dpkg活动,以便将日志条目发送到中央系统日志服务器。
dpkg 写入/var/log/dpkg.log, apt 写入/var/log/apt目录。
我做了一些研究,似乎 apt 和 dpkg 都可以使用 syslog。唯一的选择是使用 rsyslog“文本文件输入模块”功能(http://www.rsyslog.com/doc/master/configuration/modules/imfile.html),它会定期检查日志文件中的新内容。
/etc/dpkg/dpkg.cfg配置文件有log选项,但没有 dpkg.cfg 选项和功能的手册页。
rsyslog imfile真的是唯一的选择吗?
我最近了解到它journalctl占用了我的 16GB SD 卡(Raspberry Pi)的很大一部分:
$ journalctl --disk-usage\nArchived and active journals take up 312.1M in the file system. \nRun Code Online (Sandbox Code Playgroud)\n我没有这种感觉,journalctl并且在我的这台机器的用例中发挥journald了作用。\n它是一个老式的 RPi,并且rsyslog也在运行。我估计我对它的需求和使用journalctl可能是“千载难逢”。因此,我决定禁用journald- which “feeds” journalctl。我认为这很简单,使用systemctlto stop,或者可能只是disableing ,systemd-journald.service这样它就不会在下次启动时启动。
在拔掉插头之前,我决定做一些研究。没有找到数千个提供“操作方法”建议的参考文献,而是针对我的特定搜索词“如何禁用日志”的结果非常少。相反,结果主要提供了减少journald资源消耗的建议。我确实找到了一些让我犹豫的参考资料:
ArchLinux 论坛中的一个旧帖子表明,不可能journald在没有影响的情况下禁用它;即"Masking systemd-journald causes all kinds of dependency failures and drops you at an …
我正在使用iptables的日志记录功能来调试我的网络活动。我使用带有--log-prefix参数的特定前缀来唯一标识内核日志中属于iptables输出的消息,例如::IPT::LOG::.
如何配置rsyslog以将这种方式标记的消息重定向到单独的日志文件中?手册页对rsyslog我来说看起来太神秘了。
我有以下行 /etc/rsyslog.conf
:programname, contains, "suhosin" /var/log/suhosin.log
Run Code Online (Sandbox Code Playgroud)
它将所有与 php 安全相关的事件记录到/var/log/suhosin.log. 这很好,但我希望 rsyslog 执行我的脚本action.sh而不是记录到文件。我怎么能那样做?
在 my 中/etc/rsyslog.conf,我有以下行可以将auth设施登录到/var/log/auth.log:
auth,authpriv.* /var/log/auth.log
Run Code Online (Sandbox Code Playgroud)
但是该文件充斥着 cron 日志,例如:
CRON[18620]: pam_unix(cron:session): session opened for user root by (uid=0)
CRON[18620]: pam_unix(cron:session): session closed for user root
Run Code Online (Sandbox Code Playgroud)
我想摆脱 cron 日志,并且只有真正的“身份验证”事件被记录到该文件中。我的意思是,我想查看哪些用户已登录系统,或创建了su -.
我怎样才能做到这一点?
我试图将 OpenVPN 服务器 dockerize(进入 Debian 8.2)(是的,我知道,已经有这样的容器)但是容器内部出现问题,服务器无法启动。
我决定检查日志,但是/var/log/syslog(我的主机上的 OpenVPN 日志)在容器内丢失。
我认为rsyslog没有安装并在 OpenVPN 安装之前将其安装添加到 Dockerfile。但这没有任何效果,syslog仍然丢失了。
我的 Dockerfile 是:
FROM debian:8.2
USER root
EXPOSE 53/udp
EXPOSE 1194/udp
EXPOSE 443/tcp
RUN apt-get update
RUN apt-get install -y rsyslog
RUN apt-get install -y openvpn
# ...
# Some configuration stuff
# ...
ENTRYPOINT service openvpn start && sh
Run Code Online (Sandbox Code Playgroud)
问题是:
为什么 OpenVPNsyslog在我的主机 Debian 8.2 上默认安装后登录,而不是在容器内登录?我没有在我的主机上配置任何东西来强制 OpenVPN 日志到syslog. 这是默认行为。
如何配置在 docker 容器内运行的 OpenVPN 服务器的日志记录?
我想创建规则来从数据发送facility到文件和到MySQL的数据库。
它如何实现?只需添加第二行,如:
syslog.* /var/log/syslog.log
syslog.* :ommysql:localhost,database,user,password
Run Code Online (Sandbox Code Playgroud)
或者有更正确的方法吗?
由于某种原因,rsyslogd似乎无法正确解释有效RFC 5424消息。即使 RFC 给出的例子也不起作用:
$ echo "<165>1 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts." | nc -w1 -Uu /dev/log
Run Code Online (Sandbox Code Playgroud)
日志行结果:
Dec 1 16:39:08 host 1 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts.
Run Code Online (Sandbox Code Playgroud)
这表明消息无法正确解释为RFC 5424消息,而是整个字符串被视为消息有效负载。
另一方面,旧RFC 3164格式被接受没有问题:
$ echo "<165>Dec 1 05:14:15 myproc[8710]: %% It's time to make the do-nuts."| nc -w1 -Uu /dev/log
Run Code Online (Sandbox Code Playgroud)
结果是正确的日志行:
Dec 1 16:44:31 host myproc[8710]: %% …Run Code Online (Sandbox Code Playgroud) 当我的 crontab 中出现错误时,我收到此消息:
cron: No MTA installed, discarding output
Run Code Online (Sandbox Code Playgroud)
我不想在我的系统上安装 MTA,但我也不想错过这些错误消息。
cron 尝试通过邮件发送这些信息是在哪里配置的?我可以更改它,以便将这些消息发送到文件吗?(也许通过 sysylog)。
我不想记录所有 cron 消息,只想记录错误。
我的rsyslog.conf:
cron.=info stop
*.* |/dev/xconsole
Run Code Online (Sandbox Code Playgroud)
不幸的是,似乎即使错误消息也有.info标签
我怎样才能只记录 cron 错误?或者,换句话说:我如何发送到日志文件,如果安装了 MTA,否则会发送到什么内容?
我的系统是 Debian 10,我用于rsyslog日志记录(无 systemd)
正如 @basin 所建议的那样,对每一行单独使用重定向是我到目前为止使用的解决方案,它几乎没有问题:
首先,正如我所说,我想要一个解决方案,将通常默认发送到 MTA 的内容重定向到其他位置,即|/dev/xconsole,无需单独指定每个谎言。
其次,如果我的 crontab 行中存在语法错误,则重定向将不起作用。Cron 仍然尝试通过 MTA 发送错误,并且我No MTA installed在日志中收到错误。
是否有某种方法可以重定向通过 MTA 发送的内容,以便将其发送(直接或通过 sysylog)到/dev/xconsole?
当使用建议的解决方案时@Binarus,编写我自己的自定义sendmail脚本:
我可以不使用默认值/usr/sbin/sendmail,而是为自定义脚本指定其他位置,例如/usr/local/sbin/sendmail?中cron的信息在哪里?这是硬编码的,还是可以在 cron 的配置文件之一中进行配置?sendmail/usr/sbin/