0

Pour être précis, je gère un fichier journal qui contient presque des millions d'enregistrements. Comme il s'agit d'un journal de récapitulatif de facturation, les informations client ne seront pas enregistrées dans un ordre particulier. J'utilise customized GROK Patterns et logstash XML filter plugin pour extraire les données qui seraient suffisantes pour suivre. Pour suivre les activités des clients individuels, j'utilise "Customer_ID" comme clé unique. Donc, même si je suis en utilisant plusieurs Logstash fichiers et modèles de GROK multiples, toutes ses informations pourrait être borné/Agrégé en utilisant son « Customer_ID » (clé unique)Face à un problème lors de l'envoi de données depuis Filebeats vers plusieurs fichiers Logstash

voici mon exemple de fichier journal,
7-04-2017 08:49:41 INFO abcinfo (ABC_RemoteONUS_Processor.java52) - Customer_Entry :::<?xml version="1.0" encoding="UTF-8"?><ns2:ReqListAccount xmlns:ns2="http://vcb.org/abc/schema/"/"><Head msgId="1ABCDEFegAQtQOSuJTEs3u" orgId="ABC" ts="2017-04-27T08:49:51+05:30" ver="1.0"/><Cust id="ABCDVFR233cd662a74a229002159220ce762c" note="Account CUST Listing" refId="DCVD849512576821682" refUrl="http://www.ABC.org.in/" ts="2017-04-27T08:49:51+05:30"

Mon Grok motif,

grok { 
patterns_dir => "D:\elk\logstash-5.2.1\vendor\bundle\jruby\1.9\gems\logstash-patterns-core-4.0.2\patterns" 
match => [ "message" , "%{DATESTAMP:datestamp} %{LOGLEVEL:Logseverity}\s+%{WORD:ModuleInfo} \(%{NOTSPACE:JavaClass}\)%{ABC:Customer_Init}%{GREEDYDATA:Cust}"]add_field => { "Details" => "Request" }remove_tag => ["_grokparsefailure"]} 

Mon profil personnalisé qui est stocké à l'intérieur Pattern_dir,

ABC (- Customer_Entry :::) 

Mon plug-in XML Filter,

xml { 
source => "Cust" 
store_xml =>false 
xpath => [ 
    "//Head/@ts", "Cust_Req_time", 
    "//Cust/@id", "Customer_ID", 
    "//Cust/@note", "Cust_note", ] 
    } 

Alors quelles que soient les détails vient derrière ** - ** Customer_Entry :::, je serai en mesure d'extraire à l'aide de XML Plugin Filter (sera stocké similaire à plusieurs lignes codec). J'ai écrit 5 fichiers Logstash différents pour extraire différentes Activités du Client avec 5 Patterns Grok différents. Ce qui nous le dira,

1.Customer_Entry
2.Customer_Purchase
3.Customer_Last_Purchase
4.Customer_Transaction
5.Customer_Authorization

Tous les modèles ci-dessus Grok a différents ensemble d'informations, qui seront regroupées par Customer_ID comme je l'ai dit plus tôt.

Je peux extraire les informations et les visualiser clairement dans Kibana sans aucun défaut en utilisant mon modèle personnalisé avec différents fichiers journaux. Depuis que j'ai des centaines de fichiers journaux chaque jour à mettre dans logstash, j'ai opté pour Filebeats, mais Filebeats fonctionne avec un seul port "5044". J'ai essayé de courir avec 5 ports différents pour 5 fichiers logstash différents mais cela ne fonctionnait pas, Un seul fichier logstash de 5 était chargé Le reste des fichiers de configuration était inactif.
ici est mon exemple filebeat output.prospector,

output.logstash:
hôtes: [ "localhost: 5044"]

output.logstash:
hôtes: [ "localhost: 5045" ]

output.logstash:
hôtes: [ "localhost: 5046"]

je ne pouvais pas ajouter tous les grok Patt erns dans un fichier de configuration logstash, car le plugin XML Filter prend la source "GREEDYDATA". dans ce cas, je vais avoir 5 différents Source=> pour 5 modèles de Grok différents. J'ai même essayé ça aussi mais ça ne fonctionnait pas.

Vous cherchez une meilleure approche.

Répondre

0

On dirait que vous cherchez l'échelle, avec une ingestion parallèle. En l'occurrence, File beats prend en charge quelque chose appelé load-balancing qui ressemble à ce que vous cherchez.

output.logstash: 
    hosts: [ "localhost:5044", "localhost:5045", "localhost:5046" ] 
    loadbalance: true 

C'est pour les sorties. Bien que, je crois que vous vouliez multithreading sur l'entrée. FileBeats est censé suivre tous les fichiers spécifiés dans la configuration du prospecteur, mais vous avez trouvé des limites. Globbing ou en spécifiant un répertoire fera un seul thread les fichiers dans ce répertoire glob /. Si vos noms de fichier le supportent, la globalisation créative peut vous permettre d'obtenir un meilleur parallélisme en définissant plusieurs globs dans le même répertoire.

En supposant que vos journaux arrivent par type:

- input_type: log 
    paths: 
    - /mnt/billing/*entry.log 
    - /mnt/billing/*purchase.log 
    - /mnt/billing/*transaction.log 

permettrait prospecteurs sur plusieurs threads de lecture dans des fichiers parallèles ici.

Si vos journaux sont à venir avec des noms aléatoires, vous pouvez utiliser une configuration similaire

- input_type: log 
    paths: 
    - /mnt/billing/a* 
    - /mnt/billing/b* 
    - /mnt/billing/c* 
    [...] 
    - /mnt/billing/z* 

Si vous traitez beaucoup de fichiers avec des noms uniques qui se répètent jamais, en ajoutant la config-option de configuration clean_inactive à votre les prospecteurs vont faire tourner votre FileBeat rapidement.

- input_type: log 
    ignore_older: 18h 
    clean_inactive: 24h 
    paths: 
    - /mnt/billing/a* 
    - /mnt/billing/b* 
    - /mnt/billing/c* 
    [...] 
    - /mnt/billing/z* 

Ce qui supprimera tout état pour les fichiers de plus de 24 heures et ne traitera aucun fichier de plus de 18 heures.

+0

Ouais ça fonctionnait .. !! mais je veux m'assurer que, chargera le journal d'analyse d'équilibrage chaque ligne? parce que comme je l'ai mentionné dans ma question, j'ai plusieurs fichiers de configuration avec des modèles différents. Je ne veux pas que l'équilibrage de charge laisse un de ces motifs. et aussi pourriez-vous nous parler de globbing? et comment la globalisation augmentera le parallélisme quand je tiens plusieurs fichiers de configuration. Parce que j'utilise un caractère générique dans mon prospecteur d'intrants. –