2016-08-10 4 views
0

동일한 서버에 syslog 서버와 ELK 스택이 있습니다. 각 syslog 소스에 대한 디렉토리가 있습니다. Logstash를 사용하여 syslog 파일을 구문 분석하려고하는데 "IP 주소"또는 "호스트"필드에 syslog 소스의 호스트 이름을 유지하고 싶습니다. Logstash 구문 분석 후 0.0.0.0 소스가 있습니다.Logstash는 syslog 호스트를 유지합니다.

내 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 } 
} 
+0

로그 메시지 – pandaadb

+0

이 시스템 로그 메시지가 될 수있는 예와 귀하의 질문에 업데이트하십시오 : '월 12 6시 30분 0초 1.2.3.4 apache_server : 1.2.3.4 - - [12/월을/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의 "호스트"필드를 설정하기 위해이 디렉토리의 이름을 사용하고 싶습니다. – ted

답변

0

당신이 당신의 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" 
} 

IP를 가져 오기 위해 json을 구문 분석하고 있습니다. 그런 다음 IP 필드를 호스트에 씁니다.

필터 :

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

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

필드는 사용자의 IP 주소를 포함 무엇이든지 % {IP}를 교체합니다.

건배, 아르투르

관련 문제