log_reduce_full_fl()
Funkcja log_reduce_full_fl()
znajduje typowe wzorce w częściowo ustrukturyzowanych kolumnach tekstowych, takich jak wiersze dziennika i klasteruje wiersze zgodnie z wyodrębnionym wzorcem. Algorytm funkcji i większość parametrów są identyczne z log_reduce_fl(). Zwraca log_reduce_fl()
jednak tabelę podsumowania wzorców, natomiast ta funkcja zwraca pełną tabelę zawierającą wzorzec i parametry dla każdego wiersza.
Wymagania wstępne
- Wtyczka języka Python musi być włączona w klastrze. Jest to wymagane w przypadku wbudowanego języka Python używanego w funkcji .
- Wtyczka języka Python musi być włączona w bazie danych. Jest to wymagane w przypadku wbudowanego języka Python używanego w funkcji .
Składnia
T|
invoke
log_reduce_full_fl(
,
reduce_col [pattern_col [,
parameters_col,
[use_logram,
[use_drain [,
custom_regexes [,
custom_regexes_policy [,
ograniczniki [,
similarity_th [,
tree_depth [trigram_th [,
,
bigram_th ]]]]]]]]]]])
Dowiedz się więcej o konwencjach składniowych.
Parametry
Poniższy opis parametrów jest podsumowaniem. Aby uzyskać więcej informacji, zobacz sekcję Więcej informacji na temat algorytmu .
Nazwa | Typ | Wymagane | Opis |
---|---|---|---|
reduce_col | string |
✔️ | Nazwa kolumny ciągu, do których jest stosowana funkcja. |
pattern_col | string |
✔️ | Nazwa kolumny ciągu do wypełnienia wzorca. |
parameters_col | string |
✔️ | Nazwa kolumny ciągu do wypełnienia parametrów wzorca. |
use_logram | bool |
Włącz lub wyłącz algorytm Logramu. Wartość domyślna to true . |
|
use_drain | bool |
Włącz lub wyłącz algorytm opróżniania. Wartość domyślna to true . |
|
custom_regexes | dynamic |
Tablica dynamiczna zawierająca pary wyrażeń regularnych i symboli zastępczych, które mają być przeszukiwane w każdym wierszu wejściowym, i zastąpiona odpowiednim symbolem dopasowania. Wartość domyślna to dynamic([]) . Domyślna tabela wyrażeń regularnych zastępuje liczby, adresy IP i identyfikatory GUID. |
|
custom_regexes_policy | string |
Albo "prepend", "append" lub "replace". Określa, czy custom_regexes są prepend/append/replace domyślnych. Wartość domyślna to "prepend". | |
Ograniczniki | dynamic |
Tablica dynamiczna zawierająca ciągi ograniczników. Wartość domyślna to dynamic([" "]) , definiując spację jako jedyny ogranicznik pojedynczego znaku. |
|
similarity_th | real |
Próg podobieństwa używany przez algorytm opróżniania. Zwiększenie similarity_th powoduje zwiększenie udoskonaleń klastrów. Wartość domyślna to 0,5. Jeśli opróżnianie jest wyłączone, ten parametr nie ma efektu. | |
tree_depth | int |
Zwiększenie tree_depth poprawia środowisko uruchomieniowe algorytmu opróżniania, ale może zmniejszyć jego dokładność. Wartość domyślna to 4. Jeśli opróżnianie jest wyłączone, ten parametr nie ma efektu. | |
trigram_th | int |
Zmniejszenie trigram_th zwiększa prawdopodobieństwo, że Logram zastąpi tokeny symbolami wieloznacznymi. Wartość domyślna to 10. Jeśli Logram jest wyłączony, ten parametr nie ma efektu. | |
bigram_th | int |
Zmniejszenie bigram_th zwiększa prawdopodobieństwo, że Logram zastąpi tokeny symbolami wieloznacznymi. Wartość domyślna to 15. Jeśli Logram jest wyłączony, ten parametr nie ma efektu. |
Definicja funkcji
Funkcję można zdefiniować, osadzając jej kod jako funkcję zdefiniowaną przez zapytanie lub tworząc ją jako funkcję przechowywaną w bazie danych w następujący sposób:
Zdefiniuj funkcję przy użyciu następującej instrukcji let. Nie są wymagane żadne uprawnienia.
Ważne
Instrukcja let nie może być uruchamiana samodzielnie. Po nim musi znajdować się instrukcja wyrażenia tabelarycznego. Aby uruchomić działający przykład log_reduce_fl()
polecenia , zobacz Przykład.
let log_reduce_full_fl=(tbl:(*), reduce_col:string, pattern_col:string, parameters_col:string,
use_logram:bool=True, use_drain:bool=True, custom_regexes: dynamic = dynamic([]), custom_regexes_policy: string = 'prepend',
delimiters:dynamic = dynamic(' '), similarity_th:double=0.5, tree_depth:int = 4, trigram_th:int=10, bigram_th:int=15)
{
let default_regex_table = pack_array('(/|)([0-9]+\\.){3}[0-9]+(:[0-9]+|)(:|)', '<IP>',
'([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})', '<GUID>',
'(?<=[^A-Za-z0-9])(\\-?\\+?\\d+)(?=[^A-Za-z0-9])|[0-9]+$', '<NUM>');
let kwargs = bag_pack('reduced_column', reduce_col, 'delimiters', delimiters,'output_column', pattern_col, 'parameters_column', parameters_col,
'trigram_th', trigram_th, 'bigram_th', bigram_th, 'default_regexes', default_regex_table,
'custom_regexes', custom_regexes, 'custom_regexes_policy', custom_regexes_policy, 'tree_depth', tree_depth, 'similarity_th', similarity_th,
'use_drain', use_drain, 'use_logram', use_logram, 'save_regex_tuples_in_output', True, 'regex_tuples_column', 'RegexesColumn',
'output_type', 'full');
let code = ```if 1:
from log_cluster import log_reduce
result = log_reduce.log_reduce(df, kargs)
```;
tbl
| evaluate python(typeof(*), code, kwargs)
};
// Write your query to use the function here.
Przykład
W poniższym przykładzie użyto operatora invoke do uruchomienia funkcji.
Aby użyć funkcji zdefiniowanej przez zapytanie, wywołaj ją po definicji funkcji osadzonej.
let log_reduce_full_fl=(tbl:(*), reduce_col:string, pattern_col:string, parameters_col:string,
use_logram:bool=True, use_drain:bool=True, custom_regexes: dynamic = dynamic([]), custom_regexes_policy: string = 'prepend',
delimiters:dynamic = dynamic(' '), similarity_th:double=0.5, tree_depth:int = 4, trigram_th:int=10, bigram_th:int=15)
{
let default_regex_table = pack_array('(/|)([0-9]+\\.){3}[0-9]+(:[0-9]+|)(:|)', '<IP>',
'([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})', '<GUID>',
'(?<=[^A-Za-z0-9])(\\-?\\+?\\d+)(?=[^A-Za-z0-9])|[0-9]+$', '<NUM>');
let kwargs = bag_pack('reduced_column', reduce_col, 'delimiters', delimiters,'output_column', pattern_col, 'parameters_column', parameters_col,
'trigram_th', trigram_th, 'bigram_th', bigram_th, 'default_regexes', default_regex_table,
'custom_regexes', custom_regexes, 'custom_regexes_policy', custom_regexes_policy, 'tree_depth', tree_depth, 'similarity_th', similarity_th,
'use_drain', use_drain, 'use_logram', use_logram, 'save_regex_tuples_in_output', True, 'regex_tuples_column', 'RegexesColumn',
'output_type', 'full');
let code = ```if 1:
from log_cluster import log_reduce
result = log_reduce.log_reduce(df, kargs)
```;
tbl
| evaluate python(typeof(*), code, kwargs)
};
//
// Finding common patterns in HDFS logs, a commonly used benchmark for log parsing
//
HDFS_log
| take 100000
| extend Patterns="", Parameters=""
| invoke log_reduce_full_fl(reduce_col="data", pattern_col="Patterns", parameters_col="Parameters")
| take 10
Dane wyjściowe
dane | Wzorce | Parametry |
---|---|---|
081110 | 215858 | 15485 INFO dfs. DataNode$PacketResponder: odebrano blok blk_5080254298708411681 o rozmiarze 67108864 od /10.251.43.21 081110 <NUM><> INFO dfs. DataNode$PacketResponder: odebrano blok blk_<NUM o rozmiarze <NUM>> z <adresu IP> "{"parameter_0": ""215858", ""parameter_1": ""15485", ""parameter_2": ""5080254298708411681", ""parameter_3"": ""67108864", ""parameter_4"": ""/10.251.43.21"}" |
081110 | 215858 | 15494 INFO dfs. DataNode$DataXceiver: Odbieranie bloku blk_-7037346755429293022 src: /10.251.43.21:45933: /10.251.43.21:50010 081110 <NUM><> INFOs. DataNode$DataXceiver: odbieranie bloku blk_<NUM>: dest: IP dest: <<IP>> "{"parameter_0": ""215858", ""parameter_1": ""15494", ""parameter_2": ""-7037346755429293022", ""parameter_3": ""/10.251.43.21:45933", ""parameter_4": ""/10.251.43.21:50010"}" |
081110 | 215858 | 15496 INFO dfs. DataNode$PacketResponder: PacketResponder 2 dla bloku blk_-7746692545918257727 kończy 081110 <NUM><> INFO dfs. DataNode$PacketResponder: PacketResponder <NUM> dla bloku blk_<NUM> kończącego ciąg "{"parameter_0": ""215858", ""parameter_1": ""15496", ""parameter_2": ""2", ""parameter_3": ""-7746692545918257727 parameter_3"}" |
081110 | 215858 | 15496 INFO dfs. DataNode$PacketResponder: Odebrano blok blk_-7746692545918257727 o rozmiarze 67108864 od /10.251.107.227 081110 <NUM NUM><> INFO dfs. DataNode$PacketResponder: odebrano blok blk_<NUM o rozmiarze <NUM>> z <adresu IP> "{"parameter_0": ""215858", ""parameter_1": ""15496", ""parameter_2": ""-7746692545918257727", ""parameter_3"": ""67108864", ""parameter_4"": ""/10.251.107.227"}" |
081110 | 215858 | 15511 INFO dfs. DataNode$DataXceiver: Odbieranie bloku blk_-8578644687709935034 src: /10.251.107.227:39600 dest: /10.251.107.227:50010 081110 <NUM><> INFO dfs. DataNode$DataXceiver: Odbieranie bloku blk_<NUM> src: adres IP dest: <<IP>> "{"parameter_0": ""215858", ""parameter_1": ""15511", ""parameter_2": ""-8578644687709935034", ""parameter_3": ""/10.251.107.227:39600"", ""parameter_4": ""/10.251.107.227:50010"}" |
081110 | 215858 | 15514 INFO dfs. DataNode$DataXceiver: Odbieranie bloku blk_722881101738646364 src: /10.251.75.79:58213 dest: /10.251.75.79:50010 081110 <NUM><INFO> dfs. DataNode$DataXceiver: Receiving block blk_<NUM> src: IP dest: <<IP>> "{""parameter_0": ""215858", ""parameter_1"": ""15514", ""parameter_2": ""722881101738646364", ""parameter_3": ""/10.251.75.79:58213", ""parameter_4"": ""/10.251.75.79:50010"}" |
081110 | 215858 | 15517 INFO dfs. DataNode$PacketResponder: PacketResponder 2 dla blokowych blk_-7110736255599716271 kończących 081110 <NUM><> INFO dfs. DataNode$PacketResponder: PacketResponder <NUM> dla bloku blk_<NUM> kończącego ciąg "{""parameter_0": ""215858", ""parameter_1": ""15517", ""parameter_2": ""2", ""parameter_3"": ""-7110736255599716271"}" |
081110 | 215858 | 15517 INFO dfs. DataNode$PacketResponder: odebrano blok blk_-7110736255599716271 rozmiaru 67108864 od /10.251.42.246 081110 <NUM><> INFO dfs. DataNode$PacketResponder: odebrano blok blk_<NUM o rozmiarze <NUM>> z <adresu IP> "{"parameter_0": ""215858", ""parameter_1": ""15517", ""parameter_2": ""-7110736255599716271"", ""parameter_3"": ""67108864", ""parameter_4"": ""/10.251.42.246"}" |
081110 | 215858 | 15533 INFO dfs. DataNode$DataXceiver: Odbieranie bloku blk_7257432994295824826 src: /10.251.26.8:41803 dest: /10.251.26.8:50010 081110 <NUM><INFO> dfs. DataNode$DataXceiver: Odbieranie bloku blk_<NUM> src: ip dest: <<IP>> "{""parameter_0": ""215858", ""parameter_1": ""15533", ""parameter_2": ""7257432994295824826", ""parameter_3": ""/10.251.26.8:41803", ""parameter_4"": ""/10.251.26.8:50010"}" |
081110 | 215858 | 15533 INFO dfs. DataNode$DataXceiver: Odbieranie bloku blk_-7771332301119265281 src: /10.251.43.210:34258 dest: /10.251.43.210:50010 081110 <NUM><> INFO dfs. DataNode$DataXceiver: Odbieranie bloku blk_<NUM> src: adres IP dest: <<IP>> "{"parameter_0": ""215858", ""parameter_1": ""15533", ""parameter_2": ""-7771332301119265281", ""parameter_3": ""/10.251.43.210:34258", ""parameter_4": ""/10.251.43.210:50010"}" |
Ta funkcja nie jest obsługiwana.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla