zoukankan      html  css  js  c++  java
  • 将分布式中多台节点的日志信息集中到一个节点上

    转载:http://my.oschina.net/duxuefeng/blog/317570

    1,准备
    master:10.1.5.241
    slave01:10.1.5.242

    在服务器端和客户端分别安装rsyslog
    [root@master ~]# yum -y rsyslog
    [root@master ~]# 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,配置

    配置文件如下:
    [root@master ~]# egrep -v '^#|^$' /etc/rsyslog.conf
    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    $ModLoad imklog   # provides kernel logging support (previously done by rklogd)
    $ModLoad immark  # provides --MARK-- message capability
    $ModLoad imudp                            打开ucp连接,通过ucp传日志
    $UDPServerRun 514
    $ModLoad imtcp                                        打开tcp连接,通过tcp传日志
    $InputTCPServerRun 10514                 
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    $IncludeConfig /etc/rsyslog.d/*.conf
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    authpriv.*                                              /var/log/secure
    mail.*                                                  -/var/log/maillog
    cron.*                                                  /var/log/cron
    *.emerg                                                 *
    uucp,news.crit                                          /var/log/spooler
    local7.*                                                /var/log/boot.log




    例子1,
    简单配置:将所有系统log都放入服务器端下的/var/log/all.log下。
    配置:
    服务器:
    /etc/rsyslog.conf文件最后添加
    *.*                                    /var/log/all.log
    [root@master ~]# /etc/init.d/rsyslog restart

    客户端:
    /etc/rsyslog.conf文件最后添加
    *.*                                    @@10.1.5.241:10514    通过tcp传
    [root@slave01 ~]# /etc/init.d/rsyslog restart

    测试:
    tail -f /var/log/all.log

    例子2,
    自定义测试,
    配置:
    服务器:
    /etc/rsyslog.conf文件最后添加
    :fromhost,isequal, “slave01″ /var/log/all.log            #过滤来自lave01的日志,放入/var/log/all.log
    :fromhost,isequal, “slave01″ ~

    [root@master ~]# /etc/init.d/rsyslog restart

    客户端:
    *.*                    @10.1.5.241:514                     #通过udp传

    [root@slave01 ~]# /etc/init.d/rsyslog restart

    测试:
    [root@slave01 ~]# logger "hello world"           
    [root@master ~]# tail -f /var/log/all.log

    例子3,
    自定义测试,
    配置:
    服务器:
    /etc/rsyslog.conf文件最后添加
    local5.*        /var/log/all.log            #过滤local5级别的日志,放入/var/log/all.log
    local5.*        ~

    [root@master ~]# /etc/init.d/rsyslog restart

    客户端:
    local5.*                    @10.1.5.241:514                     #通过udp传

    [root@slave01 ~]# /etc/init.d/rsyslog restart

    测试:
    [root@slave01 ~]# logger -p local5.info  "hello world"          # 这里必须指定local5级别
    [root@master ~]# tail -f /var/log/all.log





    例子4,
    自定义测试,
    配置:
    服务器:
    /etc/rsyslog.conf文件最后添加
    $template logfile,    "/var/log/logfile_%$year%%$month%%$day%.log"
    :msg,contains,        "muyushan"            ?logfile

    [root@master ~]# /etc/init.d/rsyslog restart

    客户端:
    :msg,contains,        "muyushan"                @@10.1.5.241:10514                     #通过tdp传

    [root@slave01 ~]# /etc/init.d/rsyslog restart

    测试:
    [root@slave01 ~]# logger -t muyushan  "hello world"          # 在日志正文每行记录加上“muyushan”标签
    [root@master ~]# tail -f /var/log/all.log



    例子5,
    apache日志管理
    配置:
    服务器:
    mkdir /data/apache/logs
    chown apache:apache /data/apache/logs

    /etc/rsyslog.conf文件最后添加

    $template access_log, "%msg:2:$% "
    $template error_log, "%msg% " 

    # web1-access-log
    $template access_log_file_web1, "/data/apache/logs/%$NOW%/access-log/web1-access_log"
    # web1-error-log
    $template error_log_file_web1, "/data/apache/logs/%$NOW%/error-log/web1-error_log" 

    # web1-access-log
    if $syslogfacility-text == 'local6' and $syslogtag == 'http-access:' and $fromhost-ip == '10.1.5.241' then -?access_log_file_web1;access_log
    # web1-error-log
    if $syslogfacility-text == 'local6' and $syslogtag == 'http-error:' and $fromhost-ip == '10.1.5.241' then -?error_log_file_web1;error_log

    [root@master ~]# /etc/init.d/rsyslog restart

    客户端:
    vim /etc/http/conf/httpd.conf
     找到以下选项并将此选项标注#
    CustomLog logs/access_log combined
    ErrorLog logs/error_log
    分别在此2个选项下添加如下内容
    CustomLog "|/usr/bin/logger -p local6.info -t http-access" combined
    ErrorLog "| /usr/bin/logger -p local6.info -t http-error"

    /etc/rsyslog.conf文件最后添加
    local5.*        /var/log/all.log            #过滤local5级别的日志,放入/var/log/all.log
    local5.*        ~

    [root@slave01 ~]# /etc/init.d/rsyslog restart

    测试:
    [root@master ~]# tail -f /data/apache/logs/%$NOW%/access-log/web1-access_log
    [root@master ~]# tail -f /data/apache/logs/%$NOW%/error-log/web1-error_log

    附录:

    • 日志设备(可以理解为日志类型)

    日志设备/类型 说明
    auth –pam产生的日志
    authpriv –ssh,ftp等登录信息的验证信息
    cron –时间任务相关
    kern –内核
    lpr –打印
    mail –邮件
    mark(syslog) –rsyslog服务内部的信息,时间标识
    news –新闻组
    user –用户程序产生的相关信息
    uucp –unix to unix copy, unix主机之间相关的通讯
    local 1~7 –自定义的日志设备
    • 日志级别

    从上到下,级别从低到高,记录的信息越来越少 详细的可以查看手册: man 3 syslog

    级别 说明 级别值
    debug –有调式信息的,日志信息最多 7
    info –一般信息的日志,最常用  
    notice –最具有重要性的普通条件的信息  
    warning –警告级别 4
    err –错误级别,阻止某个功能或者模块不能正常工作的信息  
    crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息  
    alert –需要立刻修改的信息  
    emerg –内核崩溃等严重信息  
    none –什么都不记录  
    • 连接符号

    连接符号 说明
    .xxx 表示大于等于xxx级别的信息
    .=xxx 表示等于xxx级别的信息
    .!xxx 表示在xxx之外的等级的信息

    示例:

     :msg,contains,"error"        # 选择包含 error 的日志
     :hostname,isequal, "host1"   # 选择主机名为 host1 的日志
     :msg,!regex,"fatal .* error" # 选择不匹配指定正则表达式的日志

    logger的使用

    logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。

    logger -it error  -p local5.info "hello world"

    -i 在每行都记录进程ID

    -t 日志中的每一行都加一个error标签

    -p 指定自定义的日志设备,和配置文件的local5.*对应,配置文件里没有.info。

    说明,如果是自己写的程序,在生成日志的代码中需要用logger命令转到系统的日志接口。

  • 相关阅读:
    CentOS关闭防火墙
    CentOS 7升级Python到3.5后yum出错
    Windows本地Linux虚拟机ping不通的解决办法
    xshell上传下载文件(Windows、Linux)
    tensorflow,torch tips
    svn tips
    torch lua tips
    ios oc调用swift framework
    ios dyld: Library not loaded: @rpath/xxx.framework/xxx 之根本原因
    xcode,git tips
  • 原文地址:https://www.cnblogs.com/wzyxidian/p/4895204.html
Copyright © 2011-2022 走看看