syslog.conf是syslogd进程的配置文件,将在程序启动时读取,默认位置是/etc/syslog.conf.这个配置文件中的空白行和以"#"开头的行将被忽略."facility.level"部分也被称为选择符(seletor). seletor和action之间使用一个或多个空白分隔.它指定了一系列日志记录规则.规则的格式如下:
seletor(facility.level) action
选择符(seletor)(选择符由 facility 和 level 两部分组成,之间用一个句点(.)连接)
完善的日志分析系统应该能够通过多种协议(包括syslog等)进行日志采集并对日志分析,因此日志分析系统首先需要实现对多种日志协议的解析。其次,需要对收集到的海量日志信息进行分析,再利用数据挖掘技术,发现隐藏再日志里面的安全问题。
Syslog再UNIX系统中应用非常广泛,它是一种标准协议,负责记录系统事件的一个后台程序,记录内容包括核心、系统程序的运行情况及所发生的事件。Syslog协议使用UDP作为传输协议,通过514端口通信,Syslog使用syslogd后台进程,syslogd启动时读取配置文件/etc/syslog.conf,它将网络设备的日志发送到安装了syslog软件系统的日志服务器,Syslog日志服务器自动接收日志数据并写到指定的日志文件中。
(1)info:基本的信息
(2)notice:比info更需注意的信息
(3)warning:警告,提示管理员,但是不会影响系统的进程
(4)error:错误,一些比较重要的错误信息。例如、某些服务无法启动
(5)crit:比error要严重的一些错误
(6)alert:出现这个错误,管理员就要注意啦!有可能就会影响到系统
(7)panic:出现这个错误,系统就死机啦!什么也做不了了
可以理解为日志的来源或设备,目前常用的facility有以下几种:
auth #认证相关的 authpriv #权限,授权相关的 cron #任务计划相关的 daemon #守护进程相关 kern #内核相关的 lpr #打印相关的 mail #邮件相关的 mark #标记相关的 news #新闻相关的 security #安全相关的,与auth类似 syslog #syslog自己的 user #用户相关的 uucp #unix to unix cp相关的 local0 到 local7 #用户自定义使用 * #表示所有的facility
日志记录的位置
系统上的绝对路径 #普通文件,如:/var/log/xxx | #管道,通过管道送给其它命令处理 终端 #终端,如:/dev/console @HOST #远程主机,如:@10.0.0.1 用户 #系统用户,如:root * #登录到系统上的所有用户,一般为emerg级别的日志是这样定义的
mail.info /var/log/mail.log #表示将mail相关的,级别为info及info以上级别的信息记录到/var/log/mail.log文件中 auth.=info @10.0.0.1 #表示将auth有关的,级别为info的信息记录到10.0.0.1主机上去 #前提是10.0.0.1要能够接受其它主机发来的日志信息 user.!error #与user.error相反 *.info #表示记录所有的日志信息的info级别 mail.* #表示记录mail相关的所有级别的信息 *.* #记录所有的日志信息的所有级别 cron.info;mail.info #多个日志来源用";"隔开 cron,mail.info #与cron.info;mail.info意义相同 mail.*;mail.!=info #表示记录mail相关的除了info级别之外的所有级别的信息
systemctl restart rsyslog
https://zhuanlan.zhihu.com/p/90507023
/etc/rsyslog.d/50-default.conf
# Default rules for rsyslog. # # For more information see rsyslog.conf(5) and /etc/rsyslog.conf # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log #daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log #lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log #user.* -/var/log/user.log
# cat /etc/rsyslog.d/30-user.conf local0.* /var/log/logger.log
Systemctl restart rsyslog
#!/bin/bash echo "***********************************************" echo "**** -i,记录进程id" logger -i "this is a test --i" logger "this is a test --" <<! Jul 12 09:14:32 10-23-97-171 ubuntu[68209]: this is a test --i Jul 12 09:14:32 10-23-97-171 ubuntu: this is a test -- ! echo -e "\n\n" echo "***********************************************" echo "**** -s,输出标准错误,并且将信息打印到系统日志中" logger -i -s "abc" echo -e "\n\n" echo "***********************************************" echo "**** -t,指定标记记录,在message日志中可以看到是属于哪个模块记录的日志,-t后面为模块名称,加引号或不加都可以。如果不指定-t,都是已root为记录。" logger -i -t xuxin -s "this is a test" logger -i -t "xuxin" -s "this is a test" logger -i -s "this a test" <<! Jul 12 09:15:41 10-23-97-171 xuxin[68263]: this is a test Jul 12 09:15:41 10-23-97-171 xuxin[68264]: this is a test Jul 12 09:15:41 10-23-97-171 ubuntu[68265]: this a test ! echo -e "\n\n" echo "***********************************************" echo "**** -p,指定输入消息日志级别,优先级可以是数字或者指定为 facility.level的格式。比如:-p local3.info local3 这个设备的消息级别为 info。默认级别是 user.notice" logger -it xuxin -p local0.info "this a test"
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <syslog.h> int work(long loop_count) { while(loop_count-- > 0) { syslog(LOG_INFO, "loglog"); } return 0; } int test(long process_count, long loop_count) { long i; pid_t pid; for (i = 0; i < process_count; i++) { pid = fork(); if (pid < 0) { printf("fork fail\n"); } else if(pid == 0) { work(loop_count); return 0; } } for (i = 0; i < process_count; i++) { pid = wait(NULL); } return 0; } int main(int argc, char** argv) { if (argc != 3) { fprintf(stderr, "test nprocess nloop"); exit(1); } openlog(NULL, LOG_NDELAY|LOG_NOWAIT|LOG_PID, LOG_LOCAL0); test(atol(argv[1]), atol(argv[2])); return 0; }