2017-03-10 7 views
1

Wie kann ich filefeat so konfigurieren, dass nur ein Prozentsatz der Logs (ein Beispiel, wenn du willst) an Logstash gesendet wird?Nur einen Prozentsatz von Logs an logstash senden

Im Protokollordner der Anwendung werden die Protokolle auf jeweils etwa 20 MB aufgeteilt. Ich möchte, dass FileBeat nur etwa 1/300 des Log-Volumens an Logstash liefert.

Ich muss das Protokoll-Volume verkleinern, bevor ich es über die Leitung zu Logstash senden, so kann ich nicht diese Filterung von Logstash es auf dem Endpunkt passieren muss, bevor es den Server verlässt.

fragte ich diese Frage in dem ES-Forum und jemand sagte, es mit filebeat nicht möglich war: https://discuss.elastic.co/t/ship-only-a-percentage-of-logs-to-logstash/77393/2

Gibt es wirklich keine Möglichkeit, ich filebeat verlängern kann, dies zu tun? Kann nxlog oder ein anderes Produkt dazu?

+1

Ja, NXLog kann dies und es ist nur wenig Platz. Sie können filtern und ablegen() basierend auf verschiedenen Bedingungen (z. B. Regex). – b0ti

+0

hmmm Regex? Ich bin mir nicht sicher, ob das funktionieren wird. Ich möchte keine Arten von Nachrichten herausfiltern. Ich möchte nur einen Prozentsatz des gleichen Nachrichtentyps senden. – red888

Antwort

1

Es ist nicht möglich, Filefeat so zu konfigurieren, dass beliebige Ereignisse basierend auf einer Wahrscheinlichkeit gelöscht werden. Aber Filebeat kann Ereignisse basierend auf Bedingungen löschen. Es gibt zwei Möglichkeiten, Ereignisse zu filtern.

Filebeat bietet eine Möglichkeit zum Angeben oder Ausschließen von Zeilen beim Lesen der Datei. Dies ist der effizienteste Ort, an dem die Filterung angewendet werden kann, da dies früh geschieht. Dies geschieht mit include_lines und exclude_lines in der Konfigurationsdatei.

filebeat.prospectors: 
- paths: 
    - /var/log/myapp/*.log 
    exclude_lines: ['^DEBUG'] 

Alle Beats haben "processors", mit denen Sie eine Aktion anzuwenden, der auf der Grundlage einer Bedingung. Eine Aktion ist drop_events und die Bedingungen sind regexp, contains, equals und range.

processors: 
- drop_event: 
    when: 
     regexp: 
     message: '^DEBUG' 
+0

Nun, ich versuche nicht, bestimmte Linien herauszufiltern, die Linien, die ich will, werden von einem großen Volumen sein, also will ich nur einen Prozentsatz versenden. Könnte ich etwas mit drop_event und einer Bedingung tun, die dazu führen würde, dass es nur x% der Protokolle über einen bestimmten Zeitraum sendet? – red888

+0

Könnte ich: Legen Sie eine Variable mit einem Zeitstempel fest. Dann wäre die Bedingung Sendeprotokolle, wenn die aktuelle Zeit <(Zeitstempel + 5 Minuten). Wenn aktuelle Zeit> (Zeitstempel + 5 Minuten) keine Protokolle bis zur aktuellen Zeit senden == (aktuelle Zeit + 30 Minuten). Setzen Sie dann die Variable timestamp erneut und beginnen Sie von vorne. Ist so etwas möglich? – red888

2

Nach meinem besten Wissen gibt es keine Möglichkeit, dies mit FileBeat zu tun. Sie können tun es mit Logstash, obwohl.

filter { 
    drop { 
    percentage => 99.7 
    } 
} 

Dies kann ein Anwendungsfall, in dem Sie Logstash im Versandmodus auf dem Server, anstatt FileBeat verwenden würden.

input { 
    file { 
    path => "/var/log/hugelogs/*.log" 
    add_tags => [ 'sampled' ] 
    } 
} 

filter { 
    drop { 
    percentage => 99.7 
    } 
} 

output { 
    tcp { 
    host => 'logstash.prod.internal' 
    port => '3390' 
    } 
} 

Es bedeutet, Logstash auf Ihren Servern zu installieren. Sie konfigurieren es jedoch so minimal wie möglich. Nur eine Eingabe, genug Filter, um den gewünschten Effekt zu erzielen, und eine einzige Ausgabe (Tcp in diesem Fall, aber es könnte alles sein). Die vollständige Filterung erfolgt in der Pipeline.

+0

Ich dachte, dass die Protokollversandversion von logstash veraltet ist. – red888

+1

@ red888 Es ist jedoch Logstash selbst kann konfiguriert werden, um zu versenden. Es ist nicht so klein wie FootBeat, aber es wird die Arbeit erledigen. So machen wir es. – sysadmin1138

Verwandte Themen