log_reduce_full_fl()
함수 log_reduce_full_fl()
는 로그 줄과 같은 반구조화된 텍스트 열에서 공통 패턴을 찾아 추출된 패턴에 따라 줄을 클러스터합니다. 함수의 알고리즘과 대부분의 매개 변수는 log_reduce_fl()와 동일합니다. 그러나 log_reduce_fl()
패턴 요약 테이블을 출력하는 반면, 이 함수는 각 줄당 패턴 및 매개 변수를 포함하는 전체 테이블을 출력합니다.
사전 요구 사항
- 클러스터에서 Python 플러그 인 을 사용하도록 설정해야 합니다. 함수에 사용되는 인라인 Python에 필요합니다.
- 데이터베이스에서 Python 플러그 인 을 사용하도록 설정해야 합니다. 함수에 사용되는 인라인 Python에 필요합니다.
Syntax
T|
invoke
log_reduce_full_fl(
reduce_col [,
pattern_col [,
parameters_col [,
use_logram [,
use_drain [,
custom_regexes [,
custom_regexes_policy [,
구분 기호 [similarity_th [,
,
tree_depth [,
trigram_th [,
bigram_th ]]]]]]]]]]])
구문 규칙에 대해 자세히 알아봅니다.
매개 변수
다음 매개 변수 설명은 요약입니다. 자세한 내용은 알고리즘 섹션에 대한 자세한 내용을 참조하세요.
Name | 형식 | 필수 | Description |
---|---|---|---|
reduce_col | string |
✔️ | 함수가 적용되는 문자열 열의 이름입니다. |
pattern_col | string |
✔️ | 패턴을 채울 문자열 열의 이름입니다. |
parameters_col | string |
✔️ | 패턴의 매개 변수를 채울 문자열 열의 이름입니다. |
use_logram | bool |
Logram 알고리즘을 사용하거나 사용하지 않도록 설정합니다. 기본값은 true 여야 합니다. |
|
use_drain | bool |
드레이닝 알고리즘을 사용하거나 사용하지 않도록 설정합니다. 기본값은 true 여야 합니다. |
|
custom_regexes | dynamic |
각 입력 행에서 검색할 정규식 및 대체 기호 쌍을 포함하고 해당 일치 기호로 바꾸는 동적 배열입니다. 기본값은 dynamic([]) 여야 합니다. 기본 regex 테이블은 숫자, IP 및 GUID를 대체합니다. |
|
custom_regexes_policy | string |
'prepend', 'append' 또는 'replace'입니다. custom_regexes 기본 custom_regexes 앞에 추가/추가/바꿀지 여부를 제어합니다. 기본값은 'prepend'입니다. | |
delimiters | dynamic |
구분 기호 문자열을 포함하는 동적 배열입니다. 기본값은 이며 dynamic([" "]) 공백을 유일한 단일 문자 구분 기호로 정의합니다. |
|
similarity_th | real |
드레이닝 알고리즘에서 사용하는 유사성 임계값입니다. similarity_th 증가하면 클러스터가 더 구체화됩니다. 기본값은 0.5입니다. 드레이닝이 사용하지 않도록 설정된 경우 이 매개 변수는 영향을 주지 않습니다. | |
tree_depth | int |
tree_depth 늘리면 드레이닝 알고리즘의 런타임이 향상되지만 정확도가 저하될 수 있습니다. 기본값은 4입니다. 드레이닝이 사용하지 않도록 설정된 경우 이 매개 변수는 영향을 주지 않습니다. | |
trigram_th | int |
trigram_th 줄이면 Logram이 토큰을 와일드카드로 바꿀 가능성이 높아질 수 있습니다. 기본값은 10입니다. Logram을 사용하지 않도록 설정하면 이 매개 변수가 적용되지 않습니다. | |
bigram_th | int |
bigram_th 줄이면 Logram이 토큰을 와일드카드로 바꿀 가능성이 높아질 수 있습니다. 기본값은 15입니다. Logram을 사용하지 않도록 설정하면 이 매개 변수가 적용되지 않습니다. |
함수 정의
코드를 쿼리 정의 함수로 포함하거나 다음과 같이 데이터베이스에 저장된 함수로 만들어 함수를 정의할 수 있습니다.
다음 let 문을 사용하여 함수를 정의합니다. 사용 권한이 필요 없습니다.
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.
예제
다음 예제에서는 invoke 연산자를 사용하여 함수를 실행합니다.
쿼리 정의 함수를 사용하려면 포함된 함수 정의 다음에 호출합니다.
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
출력
데이터 | 패턴 | 매개 변수 |
---|---|---|
081110 | 215858 | 15485 INFO dfs. DataNode$PacketResponder: /10.251.43.21 081110 <NUM NUM><> INFO dfs에서 67108864 크기의 블록 blk_5080254298708411681 수신했습니다. DataNode$PacketResponder: 수신된 블록 blk_<> IP> "{""parameter_0""에서 <NUM 크기의 <NUM>": ""215858", ""parameter_1":"15485", ""parameter_2": ""5080254298708411681", ""parameter_3"": ""67108864", ""parameter_4"": ""/10.251.43.21"}" |
081110 | 215858 | 15494 INFO dfs. DataNode$DataXceiver: 수신 블록 blk_-7037346755429293022 src: /10.251.43.21:45933 dest: /10.251.43.21:50010 081110 <NUM NUM><> INFO dfs. DataNode$DataXceiver: 수신 블록 blk_<NUM> src: <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: 081110 <NUM NUM><> INFO dfs를 종료하는 블록 blk_-7746692545918257727 대한 PacketResponder 2입니다. DataNode$PacketResponder: 블록 blk_NUM> 종료 "{""parameter_0<"": ""215858", "parameter_1"": ""15496", ""parameter_2"": ""2", ""parameter_3"": ""-7746692545918257727"}" 블록에 대한 PacketResponder <NUM> |
081110 | 215858 | 15496 INFO dfs. DataNode$PacketResponder: /10.251.107.227 081110 <NUM NUM><> INFO dfs에서 67108864 크기의 블록 blk_ 7746692545918257727 수신했습니다. DataNode$PacketResponder: 수신된 블록 blk_<> IP> "{""parameter_0""에서 <NUM 크기의 <NUM>": ""215858", ""parameter_1"": ""15496", ""parameter_2"": ""-7746692545918257727"", ""parameter_3"": ""67108864", ""parameter_4"": ""/10.251.107.227"}" |
081110 | 215858 | 15511 INFO dfs. DataNode$DataXceiver: 수신 블록 blk_-8578644687709935034 src: /10.251.107.227:39600 dest: /10.251.107.227:50010 081110 <NUM><NUM> INFO dfs. DataNode$DataXceiver: 수신 블록 blk_<NUM> src: <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: 수신 블록 blk_722881101738646364 src: /10.251.75.79:58213 dest: /10.251.75.79:50010 081110 <NUM NUM><> INFO dfs. DataNode$DataXceiver: 수신 블록 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: 블록 blk_-7110736255599716271 종료 081110 <NUM NUM><> INFO dfs에 대한 PacketResponder 2입니다. DataNode$PacketResponder: <> 블록 blk_<NUM> 종료 "{""parameter_0"": ""215858", "parameter_1"": ""15517", ""parameter_2"": ""2", ""parameter_3"": ""-7110736255599716271"}" |
081110 | 215858 | 15517 INFO dfs. DataNode$PacketResponder: /10.251.42.246 081110 <NUM NUM><> INFO dfs에서 67108864 크기의 블록 blk_ 7110736255599716271 수신했습니다. DataNode$PacketResponder: 수신된 블록 blk_<> IP> "{""parameter_0""에서 <NUM 크기의 <NUM>": ""215858", ""parameter_1"": ""15517", ""parameter_2"": ""-7110736255599716271"", ""parameter_3"": ""67108864", ""parameter_4"": ""/10.251.42.246"}" |
081110 | 215858 | 15533 INFO dfs. DataNode$DataXceiver: 수신 블록 blk_7257432994295824826 src: /10.251.26.8:41803 dest: /10.251.26.8:50010 081110 <NUM NUM><> INFO dfs. DataNode$DataXceiver: 수신 블록 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: 수신 블록 blk_-7771332301119265281 src: /10.251.43.210:34258 dest: /10.251.43.210:50010 081110 <NUM NUM><> INFO dfs. DataNode$DataXceiver: 수신 블록 blk_<NUM> src: <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"}" |
이 기능은 지원되지 않습니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기