zoukankan      html  css  js  c++  java
  • 通过syslog接收远程日志

    通过syslog接收远程日志
     
    通过syslog接收远程主机的日志,需要做一些环境配置。
     
    客户机A通过syslog将日志信息发送到服务主机B(或称日志采集服务器)。以下说明配置过程
    (我的实验环境是,客户机A:Solaris 10,服务主机B:redhat linux企业服务器版):  www.2cto.com  
     
    客户机A配置:
    vi /etc/syslog.conf
    *.info;*.!emerg;mail.none;authpriv.none;cron.none /var/log/messages
    。。。。。。
    # 自定义syslog消息处理方式,这里是发送到远程主机
    syslog.info                                     @10.10.65.143
     
    其中,10.10.65.143就是服务主机B的ip地址。  www.2cto.com  
    重启syslog:
    # svcadm restart system-log
    或者
    # /etc/init.d/syslog restart
     
    服务器B配置:
    首先确定远程发来的消息是哪一级的,比如Panabit发过来的都是emerg级消息,某些路由器用的是notice级。实在不行就先用info然后过滤(具体办法见后文)。
     
    vi /etc/sysconfig/syslog
    SYSLOGD_OPTIONS="-r -x -m 0"
    -r: 打开接受外来日志消息的功能,其监控514 UDP端口;
    -x: 关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;
    vi /etc/syslog.conf
    # 把emerg等级的消息从messages中除开,免得重复记录:
    *.info;*.!emerg;mail.none;authpriv.none;cron.none /var/log/messages          # *.!emerg 表示不记录emerg级的消息
    #*.emerg    *                   # 注释掉原来的emerg,不将emerg级消息显示到控制台
    # 接收远程主机发来的syslog日志信息,输出到/var/log/mylog
    syslog.info                                             /var/log/mylog
    然后重启syslog:service syslog restart
    这样就把远程日志写入/var/log/mylog并且不影响本机syslog工作了。
     
    客户机A上的发送syslog日志小程序:
    #include <stdio.h>
    #include <syslog.h>
    int main(int argc, char* argv[])
    {
            //openlog(argv[0], LOG_CONS | LOG_PID, LOG_USER);
           
            int count = 0;
            while(count<5){
                    syslog(LOG_SYSLOG | LOG_INFO, "%d:, syslog info test", count);
                    count++;
            }
            //closelog();
            return 0;
    }
     
    客户机A上该程序运行后,在服务器B的/var/log/mylog中查看
    [root@localhost socket]# tail -f /var/log/mylog
    Jul  1 13:40:35 localhost syslogd 1.4.1: restart (remote reception).
    Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 0:, syslog info test
    Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 1:, syslog info test
    Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 2:, syslog info test
    Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 3:, syslog info test
    Jul  1 14:12:14 10.10.65.244 a.out[653]: [ID 852416 syslog.info] 4:, syslog info test
     
    可见,日志信息已经接收过来了。
     
    【附录】:关于/etc/syslog.conf写法,这里有个详细说明:
    /etc/syslog.conf 根据如下的格式定义规则:
    facility.level action
    设备.优先级 动作
     
    1、facility 定义日志消息的范围,其可使用的key有:
    auth -由 pam_pwdb 报告的认证活动。
    authpriv -包括特权信息如用户名在内的认证活动
    cron -与 cron 和 at 有关的计划任务信息。
    daemon -与 inetd 守护进程有关的后台进程信息。
    kern -内核信息,首先通过 klogd 传递。
    lpr -与打印服务有关的信息。
    mail -与电子邮件有关的信息
    mark - syslog内部功能用于生成时间戳
    news -来自新闻服务器的信息
    syslog -由 syslog 生成的信息
    user -由用户程序生成的信息
    uucp -由 uucp 生成的信息
    local0-local7 -与自定义程序使用
    * 通配符代表除了 mark 以外的所有功能
     
    除mark为内部使用外,还有security为一个旧的key定义,等同于auth,已经不再建议使用。
     
    2、level级别定义消息的紧急程度。按严重程度由高到低顺序排列为:
    emerg -该系统不可用,等同panic
    alert -需要立即被修改的条件
    crit -阻止某些工具或子系统功能实现的错误条件
    err -阻止工具或某些子系统部分功能实现的错误条件,等同error
    warning -预警信息,等同warn
    notice -具有重要性的普通条件
    info -提供信息的消息
    debug -不包含函数条件或问题的其他信息
    none -没有重要级,通常用于排错
    * 所有级别,除了none
     
    其中,panic、error、warn均为旧的标识符,不再建议使用。
     
    在定义level级别的时候,需要注意两点:
    1)优先级是由应用程序在编程的时候已经决定的,除非修改源码再编译,否则不能改变消息的优先级;
    2)低的优先级包含高优先级,例如,为某个应用程序定义info的日志导向,则涵盖notice、warning、err、crit、alert、emerg等消息。(除非使用=号定义)
     
    3、selector选择条件
    通过小数点符号“.”把facility和level连接在一起则成为selector(选择条件)。
    可以使用分号“;”同时定义多个选择条件。也支持三个修饰符:
    * - 所有日志信息
    = - 等于,即仅包含本优先级的日志信息
    ! - 不等于,本优先级日志信息除外
     
    4、action动作 由前面选择条件定义的日志信息,可执行下面的动作:
    file-指定日志文件的绝对路径
    terminal 或 print -发送到串行或并行设备标志符,例如/dev/ttyS2
    @host -远程的日志服务器
    username -发送信息本机的指定用户信息窗口中,但该用户必须已经登陆到系统中
    named pipe -发送到预先使用 mkfifo 命令来创建的 FIFO 文件的绝对路径
     
    ※注意,不能通过“|/var/xxx.sh”方式导向日志到其他脚本中处理!!





  • 相关阅读:
    JavaScript中的闭包(closure)
    JavaScript中的继承与原型链
    一个PHP操作大变量的例子
    深入PHP内核之参数
    django创建一个简单的web站点
    django通过添加session来保存公共变量
    第一次登录mysql,使用任何命令都报错ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    django搭建的站点,通过localhost能访问,但是通过ip不能访问
    django models实际操作中遇到的一些问题
    python3 django连接mysql,同步表结构
  • 原文地址:https://www.cnblogs.com/wudonghang/p/66125863f1f001891081e0ff90759e64.html
Copyright © 2011-2022 走看看