다음을 통해 공유


log_reduce_full_fl()

함수 log_reduce_full_fl() 는 로그 줄과 같은 반구조화된 텍스트 열에서 공통 패턴을 찾아 추출된 패턴에 따라 줄을 클러스터합니다. 함수의 알고리즘과 대부분의 매개 변수는 log_reduce_fl()와 동일합니다. 그러나 log_reduce_fl() 패턴 요약 테이블을 출력하는 반면, 이 함수는 각 줄당 패턴 및 매개 변수를 포함하는 전체 테이블을 출력합니다.

사전 요구 사항

  • 클러스터에서 Python 플러그 인 을 사용하도록 설정해야 합니다. 함수에 사용되는 인라인 Python에 필요합니다.
  • 데이터베이스에서 Python 플러그 인 을 사용하도록 설정해야 합니다. 함수에 사용되는 인라인 Python에 필요합니다.

Syntax

T|invokelog_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_fl()를 참조 하세요.

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"}"

이 기능은 지원되지 않습니다.