Ich habe ein Shell-Skript, das jede Stunde über Cron-Job aufgerufen wird und durch die Stern-Logs durchsuchen und mir die eindeutigen IDs für einen Anruf, der mit Cause 31 endete.Grep große Anzahl von Mustern aus einer großen Protokolldatei
Das Problem ist, dass die While-Schleife zu langsam ist und für Genauigkeit habe ich 4 While-Schleifen wie oben erwähnt, um verschiedene Prüfungen durchzuführen.
callref.log-Datei besteht aus Call Identifier-Werten und jede Stunde wird es etwa 50-90 tausend Werte und das Skript dauert etwa 45-50 Minuten, um die Ausführung abzuschließen und mir den Bericht per E-Mail.
Es wäre sehr hilfreich, wenn ich die Ausführungszeit der Schleifen reduzieren könnte. Da die Größe der Datei sample.log ungefähr 20 GB beträgt und die Datei für jede Schleife geöffnet wird und die Suche ausgeführt wird, stellte ich fest, dass die while-Schleife hier der Flaschenhals ist.
Haben die Forschung und fand einige nützliche Links wie Link 1Link 2
Aber die Lösungen vorgeschlagen getan, was ich nicht umsetzen können oder nicht wissen, wie. Jeder Vorschlag wäre hilfreich. Danke
Da sample.log aus vertraulichen Informationen besteht, wäre ich nicht in der Lage, irgendwelche Protokolle zu teilen, aber unten sind einige Beispielprotokolle, die ich vom Internet bekommen habe.
Dec 16 18:02:04 asterisk1 asterisk[31774]: NOTICE[31787]: chan_sip.c:11242 in handle_request_register: Registration from '"503"<sip:[email protected]>' failed for '192.168.1.137' - Wrong password
Dec 16 18:03:13 asterisk1 asterisk[31774]: NOTICE[31787]: chan_sip.c:11242 in handle_request_register: Registration from '"502"<sip:[email protected]>' failed for '192.168.1.137' - Wrong password
Dec 16 18:04:49 asterisk1 asterisk[31774]: NOTICE[31787]: chan_sip.c:11242 in handle_request_register: Registration from '"1737245082"<sip:[email protected]>' failed for '192.168.1.137' - Username/auth name mismatch
Dec 16 18:04:49 asterisk1 asterisk[31774]: NOTICE[31787]: chan_sip.c:11242 in handle_request_register: Registration from '"100"<sip:[email protected]>' failed for '192.168.1.137' - Username/auth name mismatch
Jun 27 18:09:47 host asterisk[31774]: ERROR[27910]: chan_zap.c:10314 setup_zap: Unable to register channel '1-2'
Jun 27 18:09:47 host asterisk[31774]: WARNING[27910]: loader.c:414 __load_resource: chan_zap.so: load_module failed, returning -1
Jun 27 18:09:47 host asterisk[31774]: WARNING[27910]: loader.c:554 load_modules: Loading module chan_zap.so failed!
die Datei callref.log besteht aus einer Liste von Zeilen, die wie folgt aussieht -
C-001ec22d
C-001ec23d
C-001ec24d
C-001ec31d
C-001ec80d
auch die gewünschte Ausgabe der obigen while-Schleife sieht wie C-001ec80d
Auch mein Haupt Sorge ist es, die While-Schleife schneller laufen zu lassen. Laden Sie alle Werte von callref.log in ein Array und suchen Sie nach allen Werten gleichzeitig in einem einzigen Durchlauf von sample.log, falls möglich.
Könnte sein einen Blick wert, zB. das '-F'-Flag für Grep, das die Leistung der ersten beiden Greps verbessern kann, da Sie feste Strings verwenden (aber nicht für das letzte). Es gibt einige gute Tipps [https://stackoverflow.com/questions/13913014/grepping-a-huge-file-80gb-any-way-to-speed-it-up), die helfen sollten. – hnefatl
Sie meinen Sie können nicht awk verwenden? –
Wie wäre es mit der Veröffentlichung von 'sample.log' und' callref.log' und der erwarteten Ausgabe und ich denke, wir könnten Ihnen helfen. –