Проблема среза в C ++ возникает из семантики значений ее объектов, которая оставалась в основном из-за совместимости с C-структурами. Вам нужно использовать явный синтаксис ссылок или указателей для достижения «нормального» поведения объекта, обнаруженного на большинстве других языков, которые выполняют объекты, т. Е. Объекты всегда передаются по ссылке.
Короткими ответами являются то, что вы нарезаете объект путем присвоения производного объекта базовому объекту значением , то есть оставшийся объект является лишь частью производного объекта. Чтобы сохранить семантику стоимости, нарезка является разумным поведением и имеет относительно редкое применение, которое не существует на большинстве других языков. Некоторые люди считают это особенностью C ++, в то время как многие считают ее одной из особенностей / недостатков C ++.
Должен ли я запускать столько экземпляров, сколько у меня есть разные типы журналов?
Нет! Вы можете запускать только один экземпляр для обработки журналов разных типов.
В файле конфигурации 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 } }
Надеюсь, это поможет вы:)
Я думаю, что logstash не может читать более двух файлов в разделе «Ввод». попробуйте ниже
input {
file {
type => "technical"
path => "/home/technical/log"
}
file {
type => "business"
path => "/home/business/log"
}
file {
type => "business1"
path => "/home/business/log1"
}
}
Я использовал теги для ввода нескольких файлов:
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}"
}
}
}
type
(с тем же синтаксисомtype => "value"
) в определении фильтра и вывода, который должен немного сократить дополнительное форматирование в файле конфигурации. Пример: gist.github.com/fairchild/3030472 В документации: добавьте поле «тип» ко всем событиям, обрабатываемым этим вводом. Типы используются в основном для активации фильтра. Тип сохраняется как часть самого события, поэтому вы также можете использовать его для поиска в веб-интерфейсе. – Tony Cesaro 29 March 2014 в 00:09type => "value"
в выходе, я получил следующее сообщение: «Вы используете устаревшую конфигурационную настройку & quot; type & quot; установлен в стандартном режиме. Устаревшие настройки будут продолжать работать, но планируются для удаления из логсташа в будущем. Вы можете добиться такого же поведения с новыми условными выражениями, например:if [type] == "sometype" { stdout { ... } }
. & Quot; Я отменяю свой предыдущий комментарий. :) – Tony Cesaro 29 March 2014 в 04:56type
не будет применяться, если на входе уже есть поле типа. Это специальный атрибут, который не отменяет и документируется. Я открыл билет в Elastic, и они рекомендовали мне использоватьtags
илиadd_field
вместоtype
– BornToCode 18 June 2017 в 15:05