logger 用于往系统中写入日志,他提供一个shell命令接口到syslog系统模块,还可以从命令行直接向系统日志文件写入一行信息,默认的日志保存在 /var/log/messages中。
logger 语法
logger [options] [messages]
**options (选项):**
-d, --udp
使用数据报(UDP)而不是使用默认的流连接(TCP)
-i, --id
逐行记录每一次logger的进程ID
-f, --file file_name
记录特定的文件
-h, --help
显示帮助文本并退出
-n, --server
写入指定的远程syslog服务器,使用UDP代替内装式syslog的例程
-s, --stderr
输出标准错误到系统日志。
-t, --tag tag
指定标记记录
-u, --socket socket
写入指定的socket,而不是到内置系统日志例程。
-V, --version
显示版本信息并退出
-P, --port port_num
使用指定的UDP端口。默认的端口号是514
-p, --priority priority_level
指定输入消息日志级别,优先级可以是数字或者指定为 " facility.level" 的格式。比如:" -p local3.info " local3 这个设备的消息级别为 info。默认级别是 "user.notice"
facility:是用来定义由谁产生的日志信息:那个软件、子系统运行过程中产生的日志信息。
auth: 用户授权
authpriv: 授权和安全
cron: 计划任务
daemon: 系统守护进程
kern: 与内核有关的信息
lpr 与打印服务有关的信息
mail 与电子邮件有关的信息
news 来自新闻服务器的信息
syslog 由syslog生成的信息
user 用户的程序生成的信息,默认
ftp
uucp 由uucp生成的信息
local0~7 用来定义本地策略
level:是用来定义记录什么类型的日志信息。是应用程序产生的所有信息都把它记录到日志 文件中呢,还是只记录该应用程序的错误日志信息等等。 alert 需要立即采取动作
debug(7) 调试
info(6) 正常消息
notice(5) 正常但是要注意
warning(4)
error(3) 错误状态
crit(2) 临界状态
alert(1)
emerg(0) 系统不可用
**messages:**写入log文件的内容消息,可以与-f配合使用。
logger 以0退出表示成功,大于0表示失败。
从命令行直接向系统日志文件写入一行信息
[root@localhost ~]# logger -it logger_test -p user.info logger_messages_text [root@localhost ~]# cat /var/log/messages|grep logger_test Dec 1 16:44:51 localhost logger_test[6369]: logger_messages_text [root@localhost ~]#
注意:user.info这个user要/etc/rsyslog里定义的一直
示例:
通过iptables做端口转发,将访问10.15.44.239:6001转到10.15.44.242:80(nginx);将访问10.15.44.239:6002转到10.15.44.242:8080(tomcat)。
为了实验,我们现将iptable的日志信息写入到/var/log/iptables里,然后通过logger再写入到系统日志/var/log/messages里
net.ipv4.ip_forward = 1 [root@localhost ~]# iptables -t nat -A PREROUTING -d 10.15.44.239 -p tcp --dport 6001 -j DNAT --to-destination 10.15.44.242:80 [root@localhost ~]# iptables -t nat -A POSTROUTING -s0.0.0.0/0 -p tcp --dport 80 -j SNAT --to-source 10.15.44.239 [root@localhost ~]# iptables -t nat -A PREROUTING -d 10.15.44.239 -p tcp --dport 6002 -j DNAT --to-destination 10.15.44.242:8080 [root@localhost ~]# iptables -t nat -A POSTROUTING -s0.0.0.0/0 -p tcp --dport 8080 -j SNAT --to-source 10.15.44.239 [root@localhost ~]# iptables -t mangle -A POSTROUTING -j LOG --log-level 4 --log-prefix "OUT PACKETS:" [root@localhost ~]# /etc/rsyslog.conf #/Centos6以前/etc/syslog.conf kern.warning /var/log/iptables #文末添加此行 [root@localhost ~]# cat /etc/init.d/rsyslog restart
所有通过iptables的包就会被记录在/var/log/iptables。在日志输出信息前加上OUT PACKETS:前缀.默认记录在messages
[root@localhost ~]# tail -f /var/log/iptables.log | grep SRC=10.15.44.18 | grep DPT=8080 Dec 1 15:35:58 localhost kernel: OUT PACKETS:IN= OUT=eth1 SRC=10.15.44.18 DST=10.15.44.242 LEN=568 TOS=0x00 PREC=0x00 TTL=63 ID=25667 DF PROTO=TCP SPT=57904 DPT=8080 WINDOW=16240 RES=0x00 ACK PSH URGP=0 Dec 1 15:35:58 localhost kernel: OUT PACKETS:IN= OUT=eth1 SRC=10.15.44.18 DST=10.15.44.242 LEN=40 TOS=0x00 PREC=0x00 TTL=63 ID=25668 DF PROTO=TCP SPT=57904 DPT=8080 WINDOW=16425 RES=0x00 ACK URGP=0 [root@localhost ~]# tail -f /var/log/iptables.log | grep SRC=10.15.44.18 | grep DPT=80 Dec 1 15:36:16 localhost kernel: OUT PACKETS:IN= OUT=eth1 SRC=10.15.44.18 DST=10.15.44.242 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=28033 DF PROTO=TCP SPT=58176 DPT=80 WINDOW=8192 RES=0x00 SYN URGP=0 Dec 1 15:36:16 localhost kernel: OUT PACKETS:IN= OUT=eth1 SRC=10.15.44.18 DST=10.15.44.242 LEN=40 TOS=0x00 PREC=0x00 TTL=63 ID=28034 DF PROTO=TCP SPT=58175 DPT=80 WINDOW=16425 RES=0x00 ACK URGP=0 Dec 1 15:36:16 localhost kernel: OUT PACKETS:IN= OUT=eth1 SRC=10.15.44.18 DST=10.15.44.242 LEN=40 TOS=0x00 PREC=0x00 TTL=63 ID=28035 DF PROTO=TCP SPT=58176 DPT=80 WINDOW=16425 RES=0x00 ACK URGP=0
此时我们/var/log/messages里没有iptables转发的信息
[root@localhost ~]# tail -f /var/log/messages | grep SRC=10.15.44.18 | grep DPT=80
没有任何信息输出
现在通过logger去读取/var/log/iptables,将10.15.44.18过来访问80端口的信息写入系统日志
[root@localhost ~]# tail -f /var/log/iptables.log |grep SRC=10.15.44.18 | grep DPT=80 | logger -it iptables_log -p user.info
我们新个开会话查看/var/log/messages就可以看到10.15.44.18过来访问80端口的信息
[root@localhost ~]# tail -f /var/log/messages | grep SRC=10.15.44.18 | grep DPT=80 Dec 1 16:50:08 localhost iptables_log[6383]: Dec 1 16:49:58 localhost kernel: OUT PACKETS:IN= OUT=eth1 SRC=10.15.44.18 DST=10.15.44.242 LEN=40 TOS=0x00 PREC=0x00 TTL=63 ID=7307 DF PROTO=TCP SPT=60350 DPT=8080 WINDOW=16000 RES=0x00 ACK URGP=0 Dec 1 16:50:08 localhost iptables_log[6383]: Dec 1 16:49:58 localhost kernel: OUT PACKETS:IN= OUT=eth1 SRC=10.15.44.18 DST=10.15.44.242 LEN=40 TOS=0x00 PREC=0x00 TTL=63 ID=7308 DF PROTO=TCP SPT=60350 DPT=8080 WINDOW=16425 RES=0x00 ACK URGP=0 Dec 1 16:50:08 localhost iptables_log[6383]: Dec 1 16:49:58 localhost kernel: OUT PACKETS:IN= OUT=eth1 SRC=10.15.44.18 DST=10.15.44.242 LEN=515 TOS=0x00 PREC=0x00 TTL=63 ID=7309 DF PROTO=TCP SPT=60253 DPT=8080 WINDOW=16394 RES=0x00 ACK PSH URGP=0
将日志发送到syslog服务端:
[root@Port_Forward ~]# vim /etc/rsyslog.conf user.info @10.15.98.175:514 [root@Port_Forward ~]# /etc/init.d/rsyslog restart