【问题标题】:Logstash keep syslog hostLogstash 保留 syslog 主机
【发布时间】: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”字段

标签: logstash syslog


【解决方案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 地址的任何字段。

干杯, 阿图尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-11
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多