Фильтр Logstash на входе redis [дубликат]

Проблема среза в C ++ возникает из семантики значений ее объектов, которая оставалась в основном из-за совместимости с C-структурами. Вам нужно использовать явный синтаксис ссылок или указателей для достижения «нормального» поведения объекта, обнаруженного на большинстве других языков, которые выполняют объекты, т. Е. Объекты всегда передаются по ссылке.

Короткими ответами являются то, что вы нарезаете объект путем присвоения производного объекта базовому объекту значением , то есть оставшийся объект является лишь частью производного объекта. Чтобы сохранить семантику стоимости, нарезка является разумным поведением и имеет относительно редкое применение, которое не существует на большинстве других языков. Некоторые люди считают это особенностью C ++, в то время как многие считают ее одной из особенностей / недостатков C ++.

82
задан David 20 August 2013 в 09:49
поделиться

3 ответа

Должен ли я запускать столько экземпляров, сколько у меня есть разные типы журналов?

Нет! Вы можете запускать только один экземпляр для обработки журналов разных типов.

В файле конфигурации logstash вы можете указать каждый вход с помощью другого типа . Затем в фильтре вы можете использовать , если для различной обработки, а также на выходе вы можете использовать вывод «if» для другого адресата.

input {
    file {
            type => "technical"
            path => "/home/technical/log"
    }
    file {
            type => "business"
            path => "/home/business/log"
    }
} 
filter {
    if [type] == "technical" {
            # processing .......
    }
    if [type] == "business" {
            # processing .......
    }
}
output {
    if [type] == "technical" {
            # output to gelf
    }
    if [type] == "business" {
            # output to elasticsearch
    }
}

Надеюсь, это поможет вы:)

168
ответ дан Adam Michalik 21 August 2018 в 03:26
поделиться
  • 1
    Вы также можете использовать атрибут type (с тем же синтаксисом type => "value") в определении фильтра и вывода, который должен немного сократить дополнительное форматирование в файле конфигурации. Пример: gist.github.com/fairchild/3030472 В документации: добавьте поле «тип» ко всем событиям, обрабатываемым этим вводом. Типы используются в основном для активации фильтра. Тип сохраняется как часть самого события, поэтому вы также можете использовать его для поиска в веб-интерфейсе. – Tony Cesaro 29 March 2014 в 00:09
  • 2
    Ну, похоже, что именно Беном на самом деле является новым способом сделать это. Когда я использовал type => "value" в выходе, я получил следующее сообщение: «Вы используете устаревшую конфигурационную настройку & quot; type & quot; установлен в стандартном режиме. Устаревшие настройки будут продолжать работать, но планируются для удаления из логсташа в будущем. Вы можете добиться такого же поведения с новыми условными выражениями, например: if [type] == "sometype" { stdout { ... } }. & Quot; Я отменяю свой предыдущий комментарий. :) – Tony Cesaro 29 March 2014 в 04:56
  • 3
    Это должен быть принятый ответ. – w00t 18 February 2016 в 14:54
  • 4
  • 5
    Обратите внимание, что атрибут type не будет применяться, если на входе уже есть поле типа. Это специальный атрибут, который не отменяет и документируется. Я открыл билет в Elastic, и они рекомендовали мне использовать tags или add_field вместо type – BornToCode 18 June 2017 в 15:05

Я думаю, что logstash не может читать более двух файлов в разделе «Ввод». попробуйте ниже

input {
    file {
            type => "technical"
            path => "/home/technical/log"
    }
    file {
            type => "business"
            path => "/home/business/log"
    }
 file {
            type => "business1"
            path => "/home/business/log1"
    }
} 
0
ответ дан Osama AbuSitta 21 August 2018 в 03:26
поделиться

Я использовал теги для ввода нескольких файлов:

input {
    file {
        type => "java"
        path => "/usr/aaa/logs/stdout.log"
        codec => multiline {
            ...
        },
        tags => ["aaa"]
    }

    file {
        type => "java"
        path => "/usr/bbb/logs/stdout.log"
        codec => multiline {
                ...
        }
        tags => ["bbb"]
    }
}
output {
    stdout {
        codec => rubydebug
    }
    if "aaa" in [tags] {
        elasticsearch {
            hosts => ["192.168.100.211:9200"]
            index => "aaa"
            document_type => "aaa-%{+YYYY.MM.dd}"
        }
    }

    if "bbb" in [tags] {
        elasticsearch {
            hosts => ["192.168.100.211:9200"]
            index => "bbb"
            document_type => "bbb-%{+YYYY.MM.dd}"
        }
    }
}
5
ответ дан Robin Wang 21 August 2018 в 03:26
поделиться
  • 1
    Это лучше, чем принятый ответ: он позволяет вводить несколько входов в файл logstash. В таких случаях тип "тип" свойство установлено в "log" и не может быть изменен. – Régis B. 20 March 2018 в 17:07
  • 2