Использование нескольких файлов конфигурации для logstash - PullRequest
0 голосов
/ 06 марта 2019

Я только учусь эластичный поиск, и мне нужно знать, как правильно разбить файл конфигурации на несколько. Я использую официальный logstash on docker с портами, связанными на 9600 и 5044. Первоначально у меня был рабочий файл logstash без условий, например:

input {
    beats {
        port => '5044'
    }
}

filter
{
    grok{
        match => {
            "message" => "%{TIMESTAMP_ISO8601:timestamp} \[(?<event_source>[\w\s]+)\]:\[(?<log_type>[\w\s]+)\]:\[(?<id>\d+)\] %{GREEDYDATA:details}"
            "source" => "%{GREEDYDATA}\\%{GREEDYDATA:app}.log"
        }
    }
    mutate{
        convert => { "id" => "integer" }
    }
    date {
        match => [ "timestamp", "ISO8601" ]
        locale => en
        remove_field => "timestamp"
    }
}


output
{
    elasticsearch {
        hosts => ["http://elastic:9200"]
        index => "logstash-supportworks"
    }

}

Когда я захотел добавить metricbeat, я решил разделить эту конфигурацию на новый файл. Итак, я получил 3 файла:

__ input.conf

input {
    beats {
        port => '5044'
    }
}

metric.conf

# for testing I'm adding no filters just to see what the data looks like

output {
  if ['@metadata']['beat'] == 'metricbeat' {
    elasticsearch {
        hosts => ["http://elastic:9200"]
        index => "%{[@metadata][beat]}-%{[@metadata][version]}" 
    }
  }
}

supportworks.conf

filter
{
    if ["source"] =~ /Supportwork Server/ {
        grok{
            match => {
                "message" => "%{TIMESTAMP_ISO8601:timestamp} \[(?<event_source>[\w\s]+)\]:\[(?<log_type>[\w\s]+)\]:\[(?<id>\d+)\] %{GREEDYDATA:details}"
                "source" => "%{GREEDYDATA}\\%{GREEDYDATA:app}.log"
            }
        }
        mutate{
            convert => { "id" => "integer" }
        }
        date {
            match => [ "timestamp", "ISO8601" ]
            locale => en
            remove_field => "timestamp"
        }
    }
}


output
{
    if ["source"] =~ /Supportwork Server/ {
        elasticsearch {
            hosts => ["http://elastic:9200"]
            index => "logstash-supportworks"
        }
    }

}

Теперь данные не отправляются в экземпляр ES. Я проверил, что, по крайней мере, filebeat работает и публикует сообщения, поэтому я ожидал, что, по крайней мере, многое увидит ES. Вот опубликованное сообщение с моего сервера, на котором работает filebeat

2019-03-06T09:16:44.634-0800    DEBUG   [publish]       pipeline/processor.go:308       Publish event: {
  "@timestamp": "2019-03-06T17:16:44.634Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "doc",
    "version": "6.6.1"
  },
  "source": "C:\\Program Files (x86)\\Hornbill\\Supportworks Server\\log\\swserver.log",
  "offset": 4773212,
  "log": {
    "file": {
      "path": "C:\\Program Files (x86)\\Hornbill\\Supportworks Server\\log\\swserver.log"
    }
  },
  "message": "2019-03-06 09:16:42 [COMMS]:[INFO ]:[4924] Helpdesk API (5005) Socket error while idle - 10053",
  "prospector": {
    "type": "log"
  },
  "input": {
    "type": "log"
  },
  "beat": {
    "name": "WIN-22VRRIEO8LM",
    "hostname": "WIN-22VRRIEO8LM",
    "version": "6.6.1"
  },
  "host": {
    "name": "WIN-22VRRIEO8LM",
    "architecture": "x86_64",
    "os": {
      "platform": "windows",
      "version": "6.3",
      "family": "windows",
      "name": "Windows Server 2012 R2 Standard",
      "build": "9600.0"
    },
    "id": "e5887ac2-6fbf-45ef-998d-e40437066f56"
  }
}

1 Ответ

0 голосов
/ 07 марта 2019

Я получил эту работу, добавив фильтр мутаций в __ input.conf , чтобы заменить обратные слэши на прямые косые черты в поле источника

filter {
    mutate{
        gsub => [ "source", "[\\]", "/" ]
    }
}

И удалив " из поляаксессоры в моих условностях

...