syslog函数与rsyslog配置(keepalived使用单独的日志文件)

以CentOS7 Keepalived v1.3.5 (03/19,2017)为例。

一、首先介绍下syslog函数:

三个函数openlog, syslog, closelog是一套系统日志写入接口。

首先系统里应该具有syslog等程序,ubuntu下可以apt-get install sysklogd安装。(这里选用的sysklogd, 还有rsyslog,syslog-ng等日志软件)

通常syslog守护进程读取三种格式的记录消息。此守护进程在启动时读一个配置文件。一般来说,其文件名为/etc/syslog.conf,该文件决定了不同种类的消息应送向何处。例如,紧急消息可被送向系统管理员,并在控制台上显示,而警告消息则可记录到一个文件中。该机制提供了syslog函数,其调用格式如下:

#include <syslog.h> //头文件
void openlog (char*ident, int option, int facility);
void syslog(int priority, char*format,……);
void closelog();

调用openlog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。调用openlog 使我们可以指定一个ident,以后, 此ident 将被加至每则记录消息中。ident 一般是程序的名称(例如 ,cron ,ine 等)。

简单的程序示例:

#include <syslog.h>

int main(int argc, char **argv) {
    openlog("zooyo", LOG_CONS | LOG_PID, 0);
    syslog(LOG_INFO,
        "This is a syslog test message generated by program %sn",
        argv[0]);
    closelog();
    return 0;
}

编译生成可执行程序后,运行一次程序将向/var/log/message文件添加一行信息如下:

Mar  2 16:17:52 ubuntu zooyo[1380]: This is a syslog test message generated by program ./a.out

openlog函数:

第一个参数ident是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记。

第二个参数option是下列值取与运算的结果:
LOG_CONS        直接写入系统控制台,如果有一个错误,同时发送到系统日志记录。
LOG_NDELAY    立即打开连接(通常,打开连接时记录的第一条消息)。
LOG_NOWAIT   不要等待子进程,因为其有可能在记录消息的时候就被创建了(GNU C库不创建子进程,所以该选项在Linux上没有影响。)
LOG_ODELAY    延迟连接的打开直到syslog函数调用。(这是默认情况下,需要没被指定的情况下。)
LOG_PERROR   (不在SUSv3情况下)同时输出到stderr(标准错误文件)。
LOG_PID          包括每个消息的PID。

第三个参数facility是用来指定记录消息程序的类型。它让指定的配置文件,将以不同的方式来处理来自不同方式的消息。

它的值可能为 LOG_KERN、LOG_USER、LOG_MAIL、LOG_DAEMON、LOG_AUTH、LOG_SYSLOG、LOG_LPR、LOG_NEWS、LOG_UUCP、LOG_CRON 或 LOG_AUTHPRIV。

常量含义:

LOG_AUTH ——认证系统:login、su、getty等 
LOG_AUTHPRIV ——同LOG_AUTH,但只登录到所选择的单个用户可读的文件中 
LOG_CRON           ——cron守护进程 
LOG_DAEMON       ——其他系统守护进程,如routed 
LOG_FTP ——文件传输协议:ftpd、tftpd 
LOG_KERN ——内核产生的消息 
LOG_LPR ——系统打印机缓冲池:lpr、lpd 
LOG_MAIL ——电子邮件系统 
LOG_NEWS ——网络新闻系统 
LOG_SYSLOG ——由syslogd(8)产生的内部消息 
LOG_USER ——随机用户进程产生的消息 
LOG_UUCP ——UUCP子系统 
LOG_LOCAL0~LOG_LOCAL7 ——为本地使用保留 

Syslog函数为每个事件赋予几个不同的优先级: 
LOG_EMERG ——紧急情况 
LOG_ALERT ——应该被立即改正的问题,如系统数据库破坏 
LOG_CRIT ——重要情况,如硬盘错误 
LOG_ERR ——错误 
LOG_WARNING ——警告信息 
LOG_NOTICE ——不是错误情况,但是可能需要处理 
LOG_INFO ——情报信息 
LOG_DEBUG ——包含情报的信息,通常旨在调试一个程序时使用 

二、keepalived对syslog函数的使用:

命令行参数可以指定facility:

--log-facility       -S    0-7 Set local syslog facility (default=LOG_DAEMON)

如果不指定使用默认值LOG_DAEMON,此时的日志行为是:

vrrp/vrrp_daemon.c:

openlog(syslog_ident, LOG_PID | ((__test_bit(LOG_CONSOLE_BIT, &debug)) ? LOG_CONS : 0)
			, (log_facility==LOG_DAEMON) ? LOG_LOCAL1 : log_facility);

vrrp进程的日志写入LOG_LOCAL1。

check/check_daemon.c:

/* Opening local CHECK syslog channel */
openlog(syslog_ident, LOG_PID | ((__test_bit(LOG_CONSOLE_BIT, &debug)) ? LOG_CONS : 0)
			 , (log_facility==LOG_DAEMON) ? LOG_LOCAL2 : log_facility);

check进程的日志写入LOG_LOCAL2。

其他日志写入LOG_DAEMON

三、/etc/rsyslog.conf 配置文件

系统默认配置是:

#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

LOG_DAEMON、LOG_LOCAL1、LOG_LOCAL2的日志都写入了/var/log/messages,和系统其他进程的日志混在了一起。

可以在/etc/rsyslog.conf文件末尾为LOG_LOCAL1、LOG_LOCAL2增加独立的日志文件配置:

local1.*  /var/log/keepalived.log
local2.*  /var/log/keepalived.log

四、让/etc/rsyslog.conf配置生效

检查/etc/rsyslog.conf配置是否有效:

rsyslogd -f /etc/rsyslog.conf -N1

重启rsyslog服务:

systemctl restart rsyslog

验证新日志文件是否生效:

tail /var/log/keepalived.log

如果记录的时间有问题,需要更正时区:

timedatectl set-timezone Asia/Shanghai

--end--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值