Logstash 保留 syslog 主机

Posted

技术标签:

【中文标题】Logstash 保留 syslog 主机【英文标题】:Logstash keep syslog host 【发布时间】:2016-08-10 13:07:00 【问题描述】:

我在同一台服务器上有一个系统日志服务器和 ELK 堆栈。我为每个系统日志源都有一个目录。 我正在尝试使用 Logstash 解析系统日志文件,并且我想将系统日志源的 IP 地址或主机名保留在“主机”字段中。目前我有 Logstash 解析后的 0.0.0.0 源。

我的 logstash.conf :

input 
  file 
    path => ["path/to/file.log"]
    start_position => "beginning"
    type => "linux-syslog"
    ignore_older => 0
  


filter 
  if [type] == "linux-syslog" 
    grok 
      match => "message" => "<%POSINT:syslog_pri>%SYSLOGTIMESTAMP:syslog_timestamp %SYSLOGHOST:syslog_hostname %DATA:syslog_program(?:[%POSINT:syslog_pid])?: %GREEDYDATA:syslog_message" 
    
  


output 
  elasticsearch 
    hosts => ["@IP_Elastic:Port_Elastic"]
  
stdout  codec => rubydebug 

【问题讨论】:

请使用示例系统日志消息更新您的问题 系统日志消息可能是:Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0 我没有日志的源 IP 地址或日志中的主机名,但是当我将日志存储在每个源的目录中时,我会喜欢用这些目录的名字来设置Logstash中的“host”字段 【参考方案1】:

一旦你解析了它,你就可以用你的 ip 变量覆盖你的主机。考虑这个例子:

Pipeline main started
"ip":"1.2.3.4"

       "message" => "\"ip\":\"1.2.3.4\"",
      "@version" => "1",
    "@timestamp" => "2016-08-10T13:36:18.875Z",
          "host" => "pandaadb",
            "ip" => "1.2.3.4",
         "@host" => "1.2.3.4"

我正在解析 json 以获取 IP。然后我将IP字段写入主机。

过滤器:

filter 
    # this parses the ip json
    json 
        source => "message"
    

    mutate 
        add_field =>  "@host" => "%ip" 
    

将 %ip 替换为包含您的 IP 地址的任何字段。

干杯, 阿图尔

【讨论】:

以上是关于Logstash 保留 syslog 主机的主要内容,如果未能解决你的问题,请参考以下文章

logstash收集日志,多台机器,必须要多台机器安装部署吗

如何从发送到 Logstash 的 syslog 日志中检索标签?

Python SysLogHandler -> syslog:logstash。设施未变

Logstash input输入 beats插件 和 syslog插件

通过 syslog 发送 log4j2 堆栈跟踪

logstash接受checkpoint防火墙日志并用ruby分词