如何在远程系统日志中查看客户端的 IP 地址而不是主机名

问题描述 投票:0回答:0

我的客户端机器有 syslog-ng 而我的远程机器有 rsyslog 配置。 我的服务器/远程机器管理着许多客户端,我需要区分哪台机器正在发送哪些日志。 通常我会在服务器端使用 syslog-ng,但这些机器并不意味着拥有它们。 还想提一下,它不适用于 apache 或 web 服务器,只是物理机器。

在客户端

  1. 尝试更改和添加不同的选项或将它们分别更改为是/否。

    options { 
    keep_hostname(yes);
    create_dirs(no);
    use_dns(no);
    };
    

    例如:keep_hostname 为 no,它有效,但只有当我将主机名更改为机器的 ip 地址时。这不是我想要的。

  2. 使用模板

    template("$(ISODATE) $(FULLHOST_FROM) $(SOURCEIP) $(HOST) $(HOSTNAME) ${PROGRAM}: ${MESSAGE}\n")
    

    输出:

    day time localhost abc[ID]  .source.s_local SourceIP=127.0.0.1 localhost localhost (root) CMD (xyz.conf)#ID
    
    

    这不是我想要的输出,当我想要它代替“主机”时,它正在消息部分打印,我不明白源 ip 是环回地址。

  3. 使用结构化日志记录

    rewrite r_sourceip{
    set('${SOURCEIP}' value(HOST));
    };
    
    
    log { source(s_local); rewrite(r_sourceip);destination(d_syslog_tcp); };
    

    输出: 并且 ip 在日志中显示为环回地址而不是机器 ip。

    day date time 127.0.0.1  syslog-ng.service: Succeeded. 

  4. 尝试在我的客户端上安装 rsyslog 但它不起作用

    sudo add-apt-repository ppa:adiscon/v8-stable
    sudo apt-get update
    sudo apt-get install rsyslog
    

    我一直遇到很多错误,由于操作系统版本或类型的不同,修复它们是不可能的。

    add apt repository command not found
    wget command not found

在服务器端

  1. 使用模板 它使用客户端的主机名创建一个文件夹,并将日志存储在该特定文件夹中。 不是我想要的解决方案。

    $template DynaFile,"/var/log/%FROMHOST-IP%/%syslogfacility-text%.log"
    *.* -?DynaFile
    

    我希望日志这样显示

    day date time `client's ip address`  syslog-ng.service: Succeeded.
    

有人能给我建议一个解决方案吗?为什么我一直把环回地址作为我客户的 ip?

linux syslog rsyslog syslog-ng syslog4j
© www.soinside.com 2019 - 2024. All rights reserved.