로그 파일 분석을위한 AI 설계


12

알려진 장비의 오류를 찾고 새로운 실패 패턴을 찾기 위해 AI 도구를 개발 중입니다. 이 로그 파일은 시간 기반이며 알려진 메시지 (정보 및 오류)를 가지고 있습니다. JavaScript 라이브러리를 사용하고 있습니다. 부드러운 방법으로 데이터를 표시하기 위해 이벤트 드롭을 사용하지만 실제 직업과 의심은 AI가 알려진 것을 찾도록 훈련시키는 방법입니다 패턴과 새로운 가능한 패턴을 찾으십시오. 몇 가지 요구 사항이 있습니다.

1-도구는 a. 추가 환경 설치에 의존하지 않거나 b. 덜 나을수록 좋습니다 (완벽한 시나리오는 브라우저에서 도구를 독립형 모드로 완전히 실행하는 것입니다).

2-패턴 분석기를 모듈화 할 수있는 가능성, 오류 당 하나의 모듈;

이를 위해 권장되는 알고리즘은 무엇입니까 (신경망, 유전자 알고리즘 등)? JavaScript를 사용하여 작동하는 것이 있습니까? 그렇지 않다면이 AI를 만드는 데 가장 적합한 언어는 무엇입니까?


1
나는 의심 뭔가 기계 학습보다는이 더 적절할 것 같다 규칙 기반
antlersoft

@antlersoft 알려진 문제에 대해서는 동의하지만 결함과의 상관 관계를 만들기 위해 패턴을 검색하려고합니다.
Juliano Oliveira

추천? 생각 해보자 ... regexp를 사용 하는가? 신경망은 기존 알고리즘을 사용하는 솔루션이없는 문제에 권장됩니다. 거의 모든 신경망은 전처리 된 데이터를 얻습니다. 로그를 "전처리"하면 솔루션도 얻을 수 있습니다.
betontalpfa

답변:


9

항목 간의 상관

첫 번째 권장 사항은 로그 파일의 적절한 경고 및 정보 항목이 솔루션의 기계 학습 구성 요소에 오류와 함께 표시되도록하는 것입니다. 정보 메시지, 경고 및 오류간에 상관 관계가있을 수있는 경우 모든 로그 항목은 잠재적으로 유용한 입력 데이터입니다. 때로는 상관 관계가 강력하여 학습 속도를 극대화하는 데 중요합니다.

시스템 관리자는 종종 경고에 표시된 상태로 인한 오류가 뒤 따르는 일련의 경고로이를 경험합니다. 경고의 정보는 시스템 또는 서브 시스템이 심각하게 실패 할 때 작성된 오류 항목보다 실패의 근본 원인을 나타냅니다.

이 질문에 해당되는 것처럼 보이는 상호 운용되는 장비 또는 장비의 시스템 상태 대시 보드를 구축하는 경우 문제의 근본 원인과 초기 경고 기능이 핵심 정보입니다.

또한 모든 열악한 시스템 상태가 실패로 끝나는 것은 아닙니다.

학습 메커니즘을 제시하기 전에 여과에 의해 제거되어야하는 유일한 로그 항목은 반드시 관련이없고 상관되지 않은 로그 항목입니다. 로그 파일이 여러 시스템의 로깅 집계 인 경우에 해당됩니다. 이 경우 분석중인 독립 시스템에 대한 항목은 분석중인 현상과 상관 될 수없는 항목과 분리하여 추출해야합니다.

분석을 한 번에 하나의 항목으로 제한하면 대시 보드의 유용성이 크게 제한됩니다. 시스템의 상태는 가장 최근의 로그 항목의 상태 표시와 같지 않습니다. 가장 최근의 N 항목에 대한 상태 표시의 선형 합계조차도 아닙니다.

시스템 상태는 많은 항목과 매우 비선형적이고 시간적으로 의존적 인 관계를 갖습니다. 패턴은 여러 유형의 시스템에서 며칠 동안 점차적으로 나타날 수 있습니다. 시스템의 기본 (또는 기본) 신경망은 매우 유용한 대시 보드가 필요한 경우 건강, 임박한 위험 및 위험 조건의 이러한 비선형 표시를 식별하도록 훈련되어야합니다. 임박한 고장 또는 품질 관리 문제의 가능성을 표시하려면 상당한 길이의 로그 항목의 전체 시간 창이이 신경망에 입력되어야합니다.

알려진 패턴과 알려지지 않은 패턴의 구별

알려진 패턴의 식별은 새로운 패턴의 식별과 하나의 중요한 측면에서 다릅니다. 알려진 에러의 엔트리 구문의 특유성은 이미 식별되었으며, 이들 엔트리에 대한 처리의 입력 정규화 단계에서의 학습 부담을 상당히 감소시킨다. 새로운 오류 유형의 구문 특질을 먼저 발견해야합니다.

알려진 유형의 항목을 알려지지 않은 항목과 분리하여 알려진 구문 유형을 학습 데이터로 사용하여 새로운 구문 패턴을 학습 할 수 있습니다. 목표는 의미 론적 분석에 구문 적으로 정규화 된 정보를 제시하는 것입니다.

로그 파일에 특정한 정규화의 첫 단계

타임 스탬프가 항목에서 항상 같은 위치에있는 경우 시간을 상대 밀리 초로 변환하고 0x0a 문자 이전의 0x0d 문자를 제거하면 정규화의 첫 단계로 다른 작업보다 먼저 수행 할 수 있습니다. 스택 추적은 또한 로그 항목과 로그 라인 사이에 일대일 대응이 가능하도록 탭으로 구분 된 추적 레벨 배열로 접을 수 있습니다.

알려진 및 알려지지 않은 에러 및 비 에러 타입 엔트리로부터 발생하는 구문 적으로 정규화 된 정보는 시맨틱 구조의 카테고리의 순진한 식별을 위해 감독되지 않은 네트에 제공 될 수있다. 사용자 이름 또는 부품 일련 번호와 같은 숫자 또는 텍스트 변수를 분류하지 않습니다.

구문 적으로 정규화 된 정보가 카운트, 용량, 메트릭 및 타임 스탬프와 같이 매우 가변적 인 기호를 나타내도록 적절히 표시되는 경우, 의미 구조와 변수의 구별을 유지하는 방식으로 표현 패턴을 학습하기 위해 특징 추출이 적용될 수 있습니다. 이러한 구별을 유지하면 시스템 메트릭스에서보다 연속적인 (이산적인) 추세를 추적 할 수 있습니다. 각 엔트리는 선험적으로 알려 진지 또는 특징 추출을 통해 최근에 획득 된지에 관계없이 0 개 이상의 이러한 변수를 가질 수있다.

시간 또는 특정 종류의 인스턴스 수에 대해 추세를 그래프로 나타낼 수 있습니다. 이러한 그래픽은 기계적 피로, 용량 초과 조건의 접근 또는 고 장점으로 확대되는 기타 위험을 식별하는 데 도움이 될 수 있습니다. 추세가 그러한 상황이 임박했음을 나타내는 경우 경고 표시기를 생성하도록 추가 신경망을 훈련시킬 수 있습니다.

게으른 로깅

소프트웨어 아키텍트와 기술 담당자가 중요한 시스템 정보의 스토리지 형식을 소프트웨어 개발자의 다양하고 편리한 변덕에 남겨 두지 않으면이 모든 로그 분석은 어리 석습니다. 로그 파일은 일반적으로 혼란스럽고 패턴에 대한 통계 정보를 추출하는 것은 소프트웨어 품질 관리에서 가장 일반적인 과제 중 하나입니다. 널리 사용되는 로깅 프레임 워크 중 어느 것도 엄격함을 장려하지 않기 때문에 엄격하게 로깅에 보편적으로 적용될 가능성은 적습니다. 이것이이 질문을 자주 보는 이유 일 것입니다.

이 특정 질문의 요구 사항 섹션

이 질문에 제시된 특정 사례에서 요구 사항 # 1은 브라우저에서 분석을 실행하기위한 기본 설정을 나타내며 가능하지만 권장되지는 않습니다. ECMA는 훌륭한 스크립팅 언어이지만 파서를 학습하는 데 도움이 될 수있는 정규식 메커니즘이 ECMA에 내장되어 있지만 (추가 설치가 필요하지 않은 요구 사항 # 1의 다른 부분과 호환 됨) 컴파일되지 않은 언어는 거의 그렇지 않습니다. 자바처럼 효율적입니다. 또한 가비지 수집 및 비 효율성으로 인해 바이트 코드를 기계 코드에 런타임으로 위임하여 발생하는 Java로 인해 C만큼 효율적이지 않습니다.

머신 러닝에 대한 많은 실험은 또 다른 훌륭한 언어 인 Python을 사용하지만, 파이썬에서 수행 한 대부분의 작업은 계산 효율이 높은 C ++로 이식되어 많은 경우 속도가 거의 1,000에서 1로 향상되었습니다. C ++ 메소드 검색조차도 병목 현상이 발생했기 때문에 포트는 ECMA 스타일의 상속은 거의 사용하지 않지만 훨씬 더 빠릅니다. 일반적인 커널 코드에서 C 구조와 함수 포인터를 사용하면 vtable 오버 헤드가 제거됩니다.

모듈러 핸들러의 두 번째 요구 사항은 합리적이며 많은 사람들이 NN 아키텍처와 호환되지 않는다고 생각할 수도있는 트리거 된 규칙 환경을 암시하지만 그렇지 않습니다. 패턴 범주가 식별되면 추가 입력 데이터에서 가장 일반적인 범주를 찾는 것이 이미 위의 프로세스에 이미 포함 된 알려진 / 알 수없는 구별에 내포되어 있습니다. 그러나이 모듈 방식에는 문제가 있습니다.

시스템 상태는 종종 단일 항목이 아닌 트렌드로 표시되고 (시스템에서 언급 한 바와 같이) 시스템 상태가 개별 항목의 상태 값의 선형 합이 아니기 때문에 항목을 처리하기위한 모듈 식 접근 방식은 더 이상 디스플레이에 파이프되지 않아야합니다. 분석. 이것은 실제로 신경망이 건강 모니터링에서 가장 큰 기능적 이익을 제공 할 곳입니다. 모듈의 출력은 건강, 임박한 위험 및 위험 조건에 대한 이러한 비선형 표시를 식별하도록 훈련 될 수있는 신경망으로 들어가야합니다.

또한, 사전 장애 행동의 시간적 측면은 상당한 길이의 로그 항목의 전체 시간 창이이 그물에 입력되어야 함을 의미합니다. 이것은 또한 솔루션의 계산 집약적 부분에 대한 선택으로서 ECMA 또는 Python의 부적합성을 암시합니다. (파이썬의 트렌드는 C ++로하는 일을하는 것입니다. 객체 지향 설계, 캡슐화, 감독 코드를위한 설계 패턴을 따르고 실제 학습 및 기타 계산 집약적 또는 데이터 집약적 인 매우 계산적인 커널 유사 코드 사용 기능.)

알고리즘 따기

아키텍처의 초기 단계에서 알고리즘을 선택하는 것은 권장되지 않습니다 (질문 끝에서 암시 된 것처럼). 먼저 프로세스를 설계하십시오. 학습 구성 요소, 필요한 유형, 교육 후 목표 상태, 강화를 사용할 수있는 위치 및 원하는 네트워크 동작을 강화 / 수정하기 위해 건강 / 오류 신호가 생성되는 방법을 결정하십시오. 이러한 결정은 원하는 디스플레이 컨텐츠뿐만 아니라 예상 처리량, 컴퓨팅 리소스 요구 사항 및 최소의 효과적인 학습 속도를 바탕으로합니다. 시스템에 대한 알고리즘, 언어 및 용량 계획은 모든 사항을 대략적으로 정의한 후에 만 ​​의미있게 선택할 수 있습니다.

생산에서의 유사한 작업

실험실에서는 간단한 적응 형 구문 분석이 소셜 네트워킹 자동화의 일부로 실행되지만 제한된 심볼 세트 및 순차 패턴에만 적용됩니다. 하드웨어 용량 및 처리량에 의해서만 제한되는 임의로 큰 기본 언어 단위, 접두사, 끝 및 접미사로 재구성하지 않고 확장됩니다. 정규식 라이브러리의 존재는 디자인을 단순하게 유지하는 데 도움이되었습니다. 우리는 구성 가능한 창 크기와 이동 증분 크기로 입력 텍스트를 통해 이동하는 창에서 기능 추출을 위해 이방성 형태의 DCNN이 제공하는 PCRE 버전 8 시리즈 라이브러리를 사용합니다. 첫 번째 단계에서 수집 된 입력 텍스트 통계에 적용되는 휴리스틱은 두 계층으로 구성된 일련의 가상 PCRE를 생성합니다.

혼란스럽게 교란 된 텍스트 검색에서 최상의 PCRE에 높은 확률 적 가중치를 적용하기 위해 최적화가 수행됩니다. 트레이닝에서 NN 백 전파에 사용 된 것과 동일한 경사 하강 수렴 전략을 사용합니다. 백 트레이스, 파일 또는 오류의 존재와 같은 가정을하지 않는 순진한 접근 방식입니다. 아랍어 메시지와 스페인어 메시지에 동일하게 적용됩니다.

출력은 메모리에있는 임의의 방향성 그래프이며, 객체 지향 데이터베이스의 덤프와 유사합니다.

قنبلة -> dangereux -> 4anlyss
bomba -> dangereux
ambiguïté -> 4anlyss -> préemption -> قنبلة

강화 버전의 재진입 알고리즘이 스텁 아웃되고 웰빙 신호가 이미 사용 가능하지만 다른 작업은 적응 형 구문 분석기를 향상 시키거나 다음 단계로 자연 언어 작업을 사용하도록 선점했습니다. 언어 이해의 아이디어 회상 측면을 모방하는 아이디어를 나타내는 필터.

최종 코멘트

시스템에는 로그 분석 문제와 유사한 구성 요소 및 프로세스 아키텍처가 있으며 위에 나열된 개념을 증명합니다. 물론, 로깅을 수행하는 시스템 개발자 사이에서 로깅이 수행되는 방식이 더 체계화되지 않을수록 인간 또는 인공 에이전트가 항목을 명확하게하는 것이 더 어려워집니다. 일부 시스템 로깅은 품질 관리 수준이 너무 낮아서 로그가 거의 쓸모가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.