我正在使用 Centos 6,rsyslog 日志记录。控制台充斥着内核消息。
仍然有一些东西充斥着我的控制台,内核日志消息。它是什么以及如何让它停止?
更新:这些是内核(硬件、iptables 等)生成的消息,从 出去的东西/proc/kmsg,像这样:
Shorewall:pub2loc:DROP:IN=br0 OUT= MAC=xxx SRC=xxx DST=xxx LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=15731 DF PROTO=TCP SPT=63767 DPT=3493 WINDOW=8192 RES= 0x00 SYN URGP=0
谁能告诉我我在这里做错了什么?
这是最终的问题:
为什么当我使用 logger 命令时,我无法将其输出到自定义日志文件中/var/log?
在我的脚本中:
logger -i -t ANM -p local7.info "This is a local 7 test"
Run Code Online (Sandbox Code Playgroud)
在rsyslog.conf我将以下内容附加到文件末尾:
local7.* /var/log/anm.log
Run Code Online (Sandbox Code Playgroud)
此外,该脚本对该/var/log/anm.log文件具有权限
* 更新 *
所以我忘了重启日志服务。我试过重新启动和“ service rsyslog restart”仍然没有变化。测试文本没有出现,/var/log/anm.log但确实出现在/var/log/syslog
* 更新 *
/var/log/"yourlogfilehere"需要什么权限?Owner, Group, rwx?
我尝试将 grp 和 own 设置为 root 和运行 logger 命令的用户名。两者都没有变化。
我还尝试在/var/log. 即/var/log/anm/anm.log并为目录设置两种类型的权限。
* 更新 *
rsyslogd 正在运行
syslog 598 0.0 0.1 31060 1292 ? Sl 03:02 0:02 …Run Code Online (Sandbox Code Playgroud) 我正在使用带有 Postfix 的 GNU Mailman 来运行邮件列表,并希望监视外发邮件的传递,即:对于从列表中发送的每封邮件,检查是否收到了 250(OK)消息,如果没有,向我汇报。
现在,我正在做一个快速而肮脏的事情:
# cat /var/log/syslog | grep "smtp.*to=.*" | grep -v 250
Run Code Online (Sandbox Code Playgroud)
有没有一种干净的方法来监视 smtpd 的输出?
我的系统日志中出现以下错误:
Oct 17 13:14:03 tracker cron[873]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
Oct 17 13:14:03 tracker cron[873]: Error: bad minute; while reading /etc/crontab
Run Code Online (Sandbox Code Playgroud)
不过我没有看到任何糟糕的分钟!我的crontab文件是:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# …Run Code Online (Sandbox Code Playgroud) 我写了一个简单的测试程序来测量 syslog 功能的性能。这是我的测试系统的结果:(Debian 6.0.2 with Linux 2.6.32-5-amd64)
测试用例调用有效负载持续时间思想
[] [MB] [s] [MB/s]
------------- ---------- ---------- ---------- ----------
系统日志 200000 10.00 7.81 1.28
系统日志 %s 200000 10.00 9.94 1.01
写/dev/null 200000 10.00 0.03 343.93
printf %s 200000 10.00 0.13 76.29
测试程序进行了 200000 次系统调用,每次调用时写入 50 字节的数据。
为什么 Syslog 比文件 IO 慢十倍以上?
这是我用来执行测试的程序:
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <syslog.h>
#include <unistd.h>
const int iter = 200000;
const char msg[] = "123456789 123456789 123456789 123456789 123456789"; …Run Code Online (Sandbox Code Playgroud) 我正在尝试将日志的所有者和组更改为与 rsyslog.conf 不同的用户,后者具有:
#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog
Run Code Online (Sandbox Code Playgroud)
我在 /etc/rsyslog.d/99-custom.conf 中有一个自定义 .conf 文件,其中包括:
#Set the ownership to xxxxx
#$FileOwner xxxxx
# Send datastore logs to separate file
if $programname == 'datastore' then {
action(
type="omfile"
FileCreateMode="0644"
FileGroup="xxxxx"
FileOwner="xxxxx"
File="/var/log/folder/datastore.log"
)
#/var/log/folder/datastore.log
~
}
#$FileOwner xxxxx
local6.* -/var/log/folder/datastore.log
local6.notice -/var/log/folder/notice.log
#Reset file ownership to root
#$FileOwner root
Run Code Online (Sandbox Code Playgroud)
我尝试了旧语法和新语法,但权限将显示为:
-rw-r--r-- 1 syslog …Run Code Online (Sandbox Code Playgroud) 我的 /var/log/lastlog 文件很大。我知道它实际上只有几千字节,但 tar 不够聪明,无法知道这一点,所以当我对虚拟机进行映像时,我的还原失败,因为它认为我正在尝试加载比磁盘容量更多的数据。
我想删除 /var/log/lastlog 并停止对文件的任何和所有日志记录。我知道安全隐患。此日志记录需要停止以保留我的备份策略。
我对 /etc/pam.d/login 进行了更改,有人告诉我将禁用日志记录到 /var/log/lastlog,但它似乎不起作用,因为 /var/log/lastlog 不断增长。
# Prints the last login info upon succesful login
# (Replaces the `LASTLOG_ENAB' option from login.defs)
#session optional pam_lastlog.so
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑
对于任何感兴趣的人,我使用 Centrify Express 通过 LDAP 对我的用户进行身份验证。Centrify Express 是“免费的”,但缺点之一是我无法通过 LDAP 管理用户 UID,因此当他们登录到服务器时会获得动态 UID。Centrify 选择了一些疯狂的高 UID 值(因此它们大概不会与服务器上的本地用户发生冲突)。/var/log/lastlog 由 UID 索引,并增长以适应系统上最大的 UID。这意味着当 Centrify 用户登录时,他们会得到一个 UID 范围上限的 UID,这会导致 lastlog 根据文件系统分配大量的空间。
~$ ll /var/log/lastlog
-rw-rw-r-- 1 root root 291487675780 Apr 10 16:37 /var/log/lastlog
~$ du -h /var/log/lastlog
20K /var/log/lastlog
Run Code Online (Sandbox Code Playgroud)
更多进入---> …
我想对 logstash 服务器问题进行故障排除,并且需要不时生成 syslog 消息。有没有一种简单的方法可以让我使用 TCP 连接到系统日志服务器并发送一些任意的系统日志消息?
在 Linux 上,我可以获得 sshd 日志,例如:
sshd Accepted publickey for user from xxx.xxx.xxx.xxx port xxx ssh2: RSA SHA256:.....
Run Code Online (Sandbox Code Playgroud)
并通过添加文件将它们发送到远程系统日志服务器/etc/rsyslog.d/
如何在 MacOS 10.14 (Mojave) 上获取类似数据,并且让 macOS 将数据发送到远程系统日志服务器?
我可以使用以下命令获取我想要的数据:
log stream --process sshd --info --predicate "messageType = 'info'"
Run Code Online (Sandbox Code Playgroud)
现在需要弄清楚如何配置ASL(Apple System Logger)。
从Stack Exchange 上的另一个线程中,我发现在 Lion 或 Mountain Lion 上启用 syslogd 以接受传入连接非常容易。
cd /System/Library/LaunchDaemons
sudo /usr/libexec/PlistBuddy -c "add :Sockets:NetworkListener dict" com.apple.syslogd.plist
sudo /usr/libexec/PlistBuddy -c "add :Sockets:NetworkListener:SockServiceName string syslog" com.apple.syslogd.plist
sudo /usr/libexec/PlistBuddy -c "add :Sockets:NetworkListener:SockType string dgram" com.apple.syslogd.plist
sudo launchctl unload com.apple.syslogd.plist
sudo launchctl load com.apple.syslogd.plist
Run Code Online (Sandbox Code Playgroud)
然而,我遇到的问题是,当我的路由器向 syslogd 发送消息时,它们出现在 OS X 的控制台中,因为它们来自未知 - 例如:
5/3/13 9:19:40.000 AM Unknown[-1]: [WAN-IN-6-A]IN=eth2 OUT=eth0 SRC=141.133.142.260 DST=10.0.00.10 LEN=64 TOS=0x00 PREC=0x00 TTL=53 ID=30298 DF PROTO=TCP SPT=60553 DPT=443 WINDOW=65535 RES=0x00 SYN URGP=0
Run Code Online (Sandbox Code Playgroud)
而来自本地机器的日志消息指定了发件人:5/3/13 7:38:20.155 AM kdc[67]: LKDC 引用真实的 …
syslog ×10
linux ×5
macos ×2
ubuntu ×2
centos ×1
command-line ×1
console ×1
cron ×1
crontab ×1
display ×1
logging ×1
mac ×1
macos-mojave ×1
networking ×1
pam ×1
permissions ×1
postfix ×1
smtp ×1
ssh ×1