zoukankan      html  css  js  c++  java
  • rsyslogd 日志服务

    特性介绍:http://www.rsyslog.com/features/


    本文内容来源于:

    http://blog.csdn.net/xiangliangyu2008/article/details/8102064

    ===========================


    Rsyslog

    rsyslog可以理解为增强版的syslog,在syslog的基础上扩展了很多其他功能,如数据库支持(Mysql,PostgreSQL、Oracle等)、日志内容筛选、定义日志格式模板等。除了默认的udp协议外,rsyslog还支持tcp协议来接收日志,可以yum安装,也可以源码安装,下载地址:

    http://www.rsyslog.com/download/

     

    rsyslog功能很丰富,我只测了一部分,但这已经能够满足我的需求

    a.   mysql支持

    rsyslog很多功能都是以模块的形式实现的,比如这个mysql支持,首先在编译的时候我们必须将这个模块编译进去,然后在/etc/rsyslog.conf加载”$ModLoad ommysql“,然后在指定哪些日志需要存放在数据里。在使用mysql模块前,我们需要手工建库、定义表,这些步骤手册里都有详细说明,操作起来也不难。

    b.   filter(日志筛选)

    filter是rsyslog的一大亮点,通常情况下,我们并不是所有的日志都要收集,比如我们只需要error以下级别的日志、或者我们再要包含特定内容的日志。灵活运用filter我们可以很轻易地实现这些需求。下面举几个例子,使用方法手册里有详细介绍:

    1

    2

    :msg, contains, "test_message"  /var/log/test.log

    &~

    如果日志内容包含”test_message”就存放在/var/log/test.log中,”&~”的意思是丢弃,不做后续处理。即使后面还有”:msg, contains,“test_message” /var/log/test2.log”,这条日志也不会再存在test2.log中。

    1

    2

    if $msg contains 'test_message' then /var/log/test.log

    &~

    上面的例子的另一种写法,用if的好处是可以定义一些复杂的条件匹配
    filter非常的实用,syslog中仅仅定义的local0~local7几个用户自定义的facility。使用filter我们轻松解决自定义facility不够用的问题

    c.    template

    使用template定义日志格式模板,可以规范不通的类型的日志,很方便我们查看,使用起来也很简单,但是template的定义必须放在rsyslog.conf的顶端。

    1

    2

    $template myFormat,"%timestamp%  %hostname%  %pri-text%  %msg%\n"

    $ActionFileDefaultTemplate myFormat

    第一行我们定义了一个名为myFormat的模板,第二行的意思是把我们定义的myFormat作为rsyslog的默认模板。如果只是需要在特定日志上套用这个模板可以这样写

    1

    $template myFormat,"%timestamp%  %hostname%  %pri-text%  %msg%\n"

     

    用rsyslog的缘由:

    1.防止系统崩溃无法获取系统日志分享崩溃原因,用rsyslog可以把日志传输到远程的日志服务器上

    2.使用rsyslog日志可以减轻系统压力,因为使用rsyslog可以有效减轻系统的磁盘IO

    3.rsyslog使用tcp传输非常可靠,可以对日志进行过滤,提取出有效的日志,rsyslog是轻量级的日志软件,在大量日志写的情况下,系统负载基本上在0.1以下

     

    安装与使用

    源码安装:

    一、安装前准备

    1.下载rsyslog-5.6.2

    2.准备两台机器(linux或者unix),一台客户端,一台服务端

     

    服务端和客户端的安装步骤:

     

    1. #指定安装目录  

    2. ./configure --prefix=/Application/rsyslog 

    3.  

    4. #编译  

    5. make  

    6.  

    7. #安装  

    8. make install  

    9. #添加lib  

    10. echo "/Application/rsyslog/lib/rsyslog" >> /etc/ld.so.conf  

    11. #更新lib  

    12. ldconfig  

    13.  

    14. #产生配置文件  

    15. cp /etc/syslog.conf /etc/rsyslog.conf 

    #产生服务文件

    vi/etc/init.d/rsyslog

     

    1. #!/bin/bash  

    2. #  

    3. # rsyslog Starts rsyslogd/rklogd.  

    4. #  

    5. #  

    6. # chkconfig: - 12 88  

    7. # description: Syslog is the facility by which many daemons use to log \  

    8. # messages to various system log files. It is a good idea to always \  

    9. # run rsyslog.  

    10. ### BEGIN INIT INFO  

    11. # Provides: $syslog  

    12. # Required-Start: $local_fs $network $remote_fs 

    13. # Required-Stop: $local_fs $network $remote_fs 

    14. Default-Stop: 0 1 2 3 4 5 6 

    15. # Short-Description: Enhanced system logging and kernel message trapping daemons 

    16. # Description: Rsyslog is an enhanced multi-threaded syslogd supporting,  

    17. # among others, MySQL, syslog/tcp, RFC 3195, permitted  

    18. # sender lists, filtering on any message part, and fine   

    19. # grain output format control.  

    20. ### END INIT INFO  

    21.  

    22. # Source function library.  

    23. basedir=/Application/rsyslog  

    24. moddir=/Application/rsyslog/lib/rsyslog/  

    25. rsyslogdfile=$basedir/sbin/rsyslogd  

    26. . /etc/init.d/functions  

    27.  

    28. RETVAL=0  

    29.  

    30. start() {  

    31. [ -x $rsyslogdfile ] || exit 5 

    32.  

    33. # Do not start rsyslog when sysklogd is running  

    34. if [ -e /var/run/syslogd.pid ] ; then 

    35. echo $"Shut down sysklogd before you run rsyslog";  

    36. exit 1;  

    37. fi  

    38.  

    39. # Source config  

    40. if [ -f /etc/sysconfig/rsyslog ] ; then 

    41. . /etc/sysconfig/rsyslog  

    42. else 

    43. SYSLOGD_OPTIONS="-M $moddir" 

    44. fi  

    45.  

    46. if [ -z "$SYSLOG_UMASK" ] ; then 

    47. SYSLOG_UMASK=077;  

    48. fi  

    49. umask $SYSLOG_UMASK  

    50.  

    51. echo -n $"Starting system logger: " 

    52. daemon $rsyslogdfile $SYSLOGD_OPTIONS  

    53. RETVAL=$?  

    54. echo  

    55. [ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyslog 

    56. return $RETVAL  

    57. }  

    58. stop() {  

    59. echo -n $"Shutting down system logger: " 

    60. killproc $rsyslogdfile  

    61. RETVAL=$?  

    62. echo  

    63. [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rsyslog 

    64. return $RETVAL  

    65. }  

    66. reload() {  

    67. RETVAL=1  

    68. syslog=`cat /var/run/rsyslogd.pid 2>/dev/null`  

    69. echo -n "Reloading system logger..." 

    70. if [ -n "${syslog}" ] && [ -e /proc/"${syslog}" ]; then 

    71. kill -HUP "$syslog";  

    72. RETVAL=$?  

    73. fi  

    74. if [ $RETVAL -ne 0 ]; then 

    75. failure  

    76. else 

    77. success  

    78. fi  

    79. echo  

    80. return $RETVAL  

    81. }  

    82. rhstatus() {  

    83. status rsyslogd  

    84. }  

    85. restart() {  

    86. stop  

    87. start  

    88. }  

    89.  

    90. case "$1" in 

    91. start)  

    92. start  

    93. ;;  

    94. stop)  

    95. stop  

    96. ;;  

    97. restart)  

    98. restart  

    99. ;;  

    100.         reload|force-reload)  

    101.         reload  

    102.         ;;  

    103.         status)  

    104.         rhstatus  

    105.         ;;  

    106.         condrestart)  

    107.         [ -f /var/lock/subsys/rsyslog ] && restart || : 

    108.         ;;  

    109.         *)  

    110.         echo $"Usage: $0 {start|stop|restart|reload|force-reload|condrestart}" 

    111.         exit 2  

    112.         esac  

    113.          

    114.         exit $? 

    #启动服务

     

    1. #产生服务文件  

    2. chmod +x /etc/init.d/rsyslog  

    3. #启动前先把syslog停止  

    4. service syslog stop  

    5. service rsyslog start 

    #配置服务端

    vi/etc/rsyslog.conf #在文件开始加上,同时确保514端口能够被客户端用tcp访问

     

    1. #指定日志文件的拥有者  

    2. $FileOwner apache  

    3. #使用tcp方式  

    4. $ModLoad imtcp # needs to be done just once 

    5. #tcp接收连接数为500  

    6. $InputTCPMaxSessions 500  

    7. #tcp接收信息的端口  

    8. $InputTCPServerRun 514  

    9.  

    10. #为信息加上日志时间  

    11. $template logformat,"%TIMESTAMP:::date-mysql% %FROMHOST-IP%%msg%\n"   

    12. #定义的日志文件的名称,按照年月日  

    13. $template DynFile,"/Application/sdns/log/%$year%%$month%%$day%.log"   

    14. #把包含sdns_log标志的信息写到DynFile定义的日志文件里   

    15. :rawmsg, contains"sdns_log" ?DynFile;logformat   

    16. #这个表示丢弃包含sdns_log标志的信息   

    17. :rawmsg, contains"sdns_log" ~ 

    配置客户端

    vi/etc/rsyslog.conf #在文件开始加上

     

    1. #把包含sdns_log的信息通过tcp发到192.168.1.2 @@表示tcp @表示udp  

    2. :rawmsg, contains"sdns_log" @@192.168.1.2  

    3. #这个表示丢弃包含sdns_log标志的信息,防止这个信息写到本机的/var/log/message  

    4. :rawmsg, contains"sdns_log" ~ 

    测试:

    在客户端上执行

    logger-p user.info "sdns_log 34334"

    在服务端的/Application/sdns/log/目录里是否有日志产生

    Yum安装

    服务端:192.168.12.98        Centos6.2

    客户端:192.168.12.57       Centos5.5

     

    服务端安装:

    1.      安装rsyslog以及rsyslog-mysql接口支持:

    #yum install -y rsyslog rsyslog-mysql

    2.      修改配置

    #vim /etc/rsyslog.conf

    # if you experience problems, check

    # http://www.rsyslog.com/troubleshoot for assistance

     

    # rsyslog v3: load input modules

    # If you do not load inputs, nothing happens!

    # You may need to set the module load path if modulesare not found.

     

    $ModLoad immark  # provides --MARK-- message capability

    $ModLoad imuxsock # provides support for local systemlogging (e.g. via logger command)

    $ModLoad imklog  # kernel logging (formerly provided by rklogd)

     

    # 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                                                *

     

    # Save news errors of level crit and higher in aspecial file.

    uucp,news.crit                                         -/var/log/spooler

     

    # Save boot messages also to boot.log

    local7.*                                               /var/log/boot.log

     

    # Remote Logging (we use TCP for reliable delivery)

    # An on-disk queue is created for this action. If theremote host is

    # down, messages are spooled to disk and sent when itis up again.

    #$WorkDirectory /rsyslog/spool # where to place spoolfiles

    #$ActionQueueFileName uniqName # unique name prefixfor spool files

    #$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)

    #$ActionQueueSaveOnShutdown on # save messages todisk 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.12.14:514

     

     

    # ######### Receiving Messages from Remote Hosts##########

    # TCP Syslog Server:

    # provides TCP syslog reception and GSS-API (ifcompiled to support it)

    $ModLoad imtcp.so # load module

    $InputTCPServerRun 514 # start up TCP listener atport 514

    #tcp接收连接数为500 

    $InputTCPMaxSessions 500 

     

    # UDP Syslog Server:

    #$ModLoad imudp.so # provides UDP syslog reception

    #$UDPServerRun 514 # start a UDP syslog server atstandard port 514

     

    ##为信息加上日志时间 

    #$template logformat,"%TIMESTAMP:::date-mysql%%FROMHOST-IP%%msg%\n"  

    ##定义的日志文件的名称,按照年月日 

    #$templateDynFile,"/Application/sdns/log/%$year%%$month%%$day%.log"  

    ##把包含sdns_log标志的信息写到DynFile定义的日志文件里  

    #:rawmsg, contains, "sdns_log"?DynFile;logformat

    ##这个表示丢弃包含sdns_log标志的信息  

    #:rawmsg, contains, "sdns_log" ~

     

    3.      开启接收远程信息:

    #vim /etc/sysconfig/rsyslog

    修改成:SYSLOGD_OPTIONS=”-m0 –r”

     

    4.      确保防火墙没有阻止

    直接关闭防火墙

    或者

    iptables -I INPUT -p tcp -m state --state NEW -m tcp -dport514 -j ACCEPT

     

    5.      关闭syslog

    #service syslog stop

    6.      开启rsyslog

    #service rsyslog start

     

     

    客户端安装:

    1.      安装rsyslog

    #yum install -y rsyslog

    2.      修改配置

    #vim /etc/rsyslog.conf

    # Use traditional timestamp format

    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

     

    # Provides kernel logging support (previously done byrklogd)

    $ModLoad imklog

    # Provides support for local system logging (e.g. vialogger command)

    $ModLoad imuxsock

     

    # 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                                                *

     

    # Save news errors of level crit and higher in aspecial file.

    uucp,news.crit                                         /var/log/spooler

     

    # Save boot messages also to boot.log

    local7.*                                               /var/log/boot.log

     

    $ModLoad imtcp.so # load module

    $InputTCPServerRun 514 # start up TCP listener at port514

    #把包含sdns_log的信息通过tcp发到192.168.1.2@@表示tcp @表示udp 

    #:rawmsg, contains, "sdns_log"@@192.168.1.2 

    #这个表示丢弃包含sdns_log标志的信息,防止这个信息写到本机的/var/log/message 

    #:rawmsg, contains, "sdns_log" ~

    # @@表示tcp @表示udp

    *.*;mail.none;authpriv.none;cron.none                  @@192.168.12.98

    authpriv.*                                            @@192.168.12.98

    *.emerg                                               @@192.168.12.98

     

    3.      关闭syslog

    #service syslog stop

    4.      开启rsyslog

    #service rsyslog start

     

    都配置好了,测试:

    在客户端上执行:

    logger -p user.info "sdns_log34334"

    到服务端去看/var/log/message


    也可参考如下链接:

    http://yifangyou.blog.51cto.com/900206/609330

    http://blog.csdn.net/gui694278452/article/details/7755296

    http://xmgu2008.blog.163.com/blog/static/1391223802010518115219906/

    http://blog.csdn.net/hxh129/article/details/8089474

    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    学生信息录入(学号 姓名 成绩),并按学号查找。
    char、signed char、unsigned char的区别
    C语言-数组
    如何选取网站主要内容(转)
    git pull和git fetch的区别(转)
    yolov3训练
    Docker容器图形界面显示(运行GUI软件)的配置方法
    切换Ubuntu默认python版本的两种方法
    多用户远程linux+内网穿透工具frp使用详解
    pycharm远程调试docker containers
  • 原文地址:https://www.cnblogs.com/iplus/p/4467301.html
Copyright © 2011-2022 走看看