linux rsyslog用法

参考资料

https://blog.csdn.net/xianjie0318/article/details/72920400

https://blog.csdn.net/myloveqingmu/article/details/53501987

在此基础上测试;

1、linux syslog

Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。

大部分Linux发行版默认的日志守护进程为 syslog(后续升级rsyslog),位于 /etc/syslog 或 /etc/syslogd,默认配置文件为 /etc/syslog.conf,任何希望生成日志的程序都可以向 syslog 发送信息。

syslog 是一个系统日志记录程序,在早期的大部分 Linux 发行版都是内置 syslog,让其作为系统的默认日志收集工具,后来被 rsyslog 所代替了,较新的Ubuntu、Fedora 等等都是默认使用 rsyslog 作为系统的日志收集工具。

rsyslog的全称是 rocket-fast system for log,它提供了高性能,高安全功能和模块化设计。rsyslog能够接受从各种各样的来源,将其输入,输出的结果到不同的目的地。rsyslog可以提供超过每秒一百万条消息给目标文件。

2、rsyslog配置

1)rsyslog版本

[root@localhost Desktop]# rsyslogd -version
rsyslogd 5.8.10, compiled with:
FEATURE_REGEXP: Yes
FEATURE_LARGEFILE: No
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
Runtime Instrumentation (slow code): No

See http://www.rsyslog.com for more information.

2)rsyslog配置文件

配置文件分为三部分,#### MODULES ####,#### GLOBAL DIRECTIVES ####,和#### RULES ####

#### MODULES ####主要针对接收做配置

#### GLOBAL DIRECTIVES ####主要全局配置,比如日志格式等

#### RULES ####主要配置哪些日志写入哪些文件

3、syslog系统函数

void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);

void closelog(void);

openlog函数(打开日志设备) : 
    ident - 标记,添加到每行日志前,通常用当前程序名。 
    option - 选项,常用值为LOG_PID即包含每个消息的PID,更详细信息参考man syslog。 
    facility - 记录日志的程序的类型,配置文件可根据不同的登录类型来区别处理消息,常用值LOG_DAEMON即其它系统守护进程,一般为自己创建的守护进程。更详细信息参考man syslog。
syslog函数(生成日志) : 
    priority - 优先级,说明消息的重要性,可取值如下: 
    LOG_EMERG 系统不可用 
    LOG_ALERT 消息需立即处理 
    LOG_CRIT 重要情况 
    LOG_ERR 错误 
    LOG_WARNING 警告 
    LOG_NOTICE 正常情况,但较为重要 
    LOG_INFO 信息 
    LOG_DEBUG 调试信息
closelog函数(关闭日志设备)。

3、具体实例

1)环境

A,B两台服务器,A产生log并发送到syslog服务器,B作为syslog接收服务器;

2)A服务器配置

2.1)产生log的程序代码

include <syslog.h>
int main(int argc, char **argv)
{
    int k = 0;
    openlog("HHHH", LOG_PID, LOG_USER);
    for (k = 0; k < 100000; k++)
    {
        syslog(LOG_INFO, "informational message %d", k);
    }
    closelog();
    return 0;

}

syslog类型填写user,syslog级别填写info;

2.2)rsyslog.conf配置

#### MODULES ####不需要修改

#### GLOBAL DIRECTIVES ####不需要修改

#### RULES ####

默认任何类型的info级别以上的log都会记录到/var/log/messages文件中

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

去掉注释,修改syslog服务器的ip,@@表示使用tcp,默认端口514

# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
$WorkDirectory /var/lib/rsyslog # where to place spool files
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList   # run asynchronously
$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @@192.168.1.113:514

# ### end of the forwarding rule ###

3)B服务器配置

3.1)rsyslog.conf配置

#### MODULES ####作为接收服务器,需要去掉tcp或者udp的注释,此例中使用tcp接收

# Provides TCP syslog reception
$ModLoad imtcp

$InputTCPServerRun 514

#### GLOBAL DIRECTIVES ####不需要修改

#### RULES ####可以不修改

默认任何类型的info级别以上的log都会记录到/var/log/messages文件中

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

3.2)防火墙配置,放开tcp 514端口

4)测试

4.1)重启A,B服务器的rsyslog服务;

4.2)启动A服务器产生log的程序,在B服务器上查看/var/log/messages文件,可以看到A服务器产生的log

4.3)存在的问题

4.3.1)当log数量超过200,就会产生如下错误,原因是rsyslog默认有限速配置;

May 30 15:29:04 localhost rsyslogd-2177: imuxsock begins to drop messages from pid 62456 due to rate-limiting

rsyslog的默认配置是5秒日志数量不超过200条,如下

$SystemLogRateLimitInterval 5

$SystemLogRateLimitBurst 200

想要不限速,可以在A服务器的rsyslog.conf中添加或者修改为:

$SystemLogRateLimitInterval 0

4.3.2)A服务器产生的log在A服务器的/var/log/messages也会记录一份,冗余;

如果想去掉,修改A服务器的rsyslog.conf,添加user.none,不记录user的日志

*.info;mail.none;authpriv.none;cron.none;user.none                /var/log/messages

4.3.3)A服务器产生的所有log都会发送到B服务器的/var/log/messages;

修改A服务器的rsyslog.conf中转发规则,只有user.info级别以上的log发送到syslog服务器;

user.info @@192.168.1.113:514


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值