이벤트 로그 메트릭을위한 데이터 아키텍처?


17

서비스에 많은 수의 사용자 이벤트가 있으며 " D 날짜 이후 의 이벤트 유형 T 발생 횟수"와 같은 작업을 수행하려고 합니다.

우리는 두 가지 기본 결정을 내리려고합니다.

  1. 무엇을 보관해야합니까? 모든 이벤트 저장 및 집계 저장

    • (이벤트 로그 스타일) 모든 이벤트를 기록하고 나중에 계산합니다.
    • (시계열 스타일) 매일 집계 된 단일 날짜 " D 의 이벤트 E 수"를 저장합니다.
  2. 데이터를 저장할 위치

    • 관계형 데이터베이스 (특히 MySQL)
    • 비 관계형 (NoSQL) 데이터베이스에서
    • 플랫 로그 파일 (을 통해 네트워크를 통해 중앙에서 수집 syslog-ng)

표준 시스템이란 무엇입니까? 다른 유형의 시스템 비교에 대한 자세한 내용은 어디에서 읽을 수 있습니까?


추가 세부 사항:

  • 총 이벤트 스트림은 하루 수십만 개에 달합니다.
  • 그러나 현재 우리의 요구는 그 안에있는 특정 유형의 이벤트 만 계산하는 것입니다.
  • 원시 데이터 또는 집계 결과에 실시간으로 액세스 할 필요는 없습니다.

IMHO는 "모든 이벤트를 파일에 기록하고, 나중에 스트림을 필터링하고 집계하기 위해 크롤링"하는 것은 매우 표준적인 UNIX 방법이지만, Rails-y 동포는 MySQL에 있지 않는 한 아무 것도 없다고 생각하는 것 같습니다.


1
이 프로젝트에 행운이 있습니까?
hiwaylon

2
@hiwaylon 우리는 하이브리드 시스템을 사용하여 끝났습니다 .1) 가능한 경우 MySQL (저용량) (을 사용하여 쉽게 집계 SELECT...GROUP BY하고 결과를 쉽게 저장할 수 있음 SELECT) 2) 간단한 대규모 집계 및 시각화를 위해 Graphite 사용 3) 참조 및 실시간으로 데이터 흐름의 세부 정보를 볼 수 있도록 전체 이벤트 기록. 각각은 실제로 다른 방식으로 가치가있었습니다.
elliot42

그것은 우리가하고있는 것과 매우 유사한 훌륭한 솔루션처럼 들립니다.
hiwaylon

1
1 년 후 업데이트를 통해 모든 것을 기록한 시스템을 구축하고 정기적으로 로그를 계산 한 다음 계산 된 수를 데이터베이스에 저장했습니다 (시계열 데이터베이스 일 수는 있었지만 MySQL은 충분했습니다). 이것은 몇 주간의 작업 이었지만 놀랍게도 강력하고 빠른 접근 방식으로 끝났습니다. 로그 된 JSON을 코드로 반복하는 코드 일 때 많은 메타 데이터를 쉽게 추가 할 수 있으며 코드가 정확히 무엇을위한 유연한 규칙을 갖기가 쉽습니다. 계산하고 싶다.
elliot42

1
업데이트 2016 : Kafka는 요즘에는 적어도 원시 스토리지에 대해 이러한 종류의 일을 할 수 있습니다. 그런 다음 큰 MapReduce 또는 Spark 작업 또는 Vertica와 같은 큰 창고에 쿼리하거나 집계하려는 경우이를 수행 할 수 있습니다.
elliot42

답변:


4

그것은 항상 달려 있습니다. 나는 당신에게 새로운 관점을 제공하기 위해 조언을 드릴 것입니다

무엇을 보관해야합니까? 모든 이벤트 저장 및 집계 저장

(이벤트 로그 스타일) 모든 이벤트를 기록하고 나중에 계산합니다.

세부 사항을 놓치지 않을 계획이라면, 지금은 관련이 없지만 내 눈에 가장 좋은 접근 방식입니다. 때로는 결과가 나오면 X 또는 Y에 대해서는 관련이없는 다른 이벤트를 찾습니다. 또는 추가 정보를 가져 오지 않았지만 일부 분석 후에는 간단하게 수행 할 수 있습니다. 기록 된 정보는 기록하지 않았으므로 사진에 추가하려면 시간이 다소 걸립니다. .

(시계열 스타일)는 매일 집계 된 "날짜 D에 대한 이벤트 E 수"를 매일 저장합니다.

내일 구현하고 사용하려면 작동 할 수 있지만 새로운 요구 사항이 있거나 어떤 이유로 든 생략 한 다른 이벤트와의 상관 관계를 발견하면이 새로운 이벤트를 추가 한 다음 일부를 기다려야합니다 좋은 집계 수준을 갖는 데 오랜 시간

데이터를 저장할 위치

관계형 데이터베이스 (특히 MySQL)

첫 번째 옵션은 모든 이벤트를 기록하려고하면 DB에 무거울 수 있으므로 두려워하는 MySQL이 너무 작아 질 수 있으며 RDBMS 솔루션을 원할 경우 PostgreSQL과 같이 더 크게 생각할 수도 있고 Oracle 또는 DB2와 같은 독점적이라고 생각할 수도 있습니다 .

그러나 집계를 위해서는 좋은 선택이 될 것입니다. 생성 된로드에 따라 코드에서 집계하고 이러한 집계를 DB에 삽입 할 수 있습니다.

비 관계형 (NoSQL) 데이터베이스에서

이 솔루션을 사용하려면 Wikipedia에서읽는 방법을 따라야 할 접근 방법 이 도움이 될 수 있습니다. 경험이 충분하지 않기 때문에 해당 주제에 대해 많은 도움을 줄 수 없으며 대부분 rdbms를 사용합니다.

플랫 로그 파일 (syslog-ng를 통해 네트워크를 통해 중앙에서 수집)

나는 개인적으로 그 옵션을 선택하지 말 것을 권장합니다. 파일이 너무 커지면 파싱하기가 더 어려울 수 있지만 여전히 주요 목적을 알지 못합니다. 시스템을 추적하거나 단순히 로그를 확인하는 것입니다 파일 ...

그것이 도움이되기를 바랍니다!


1
로그 파일은 크기 또는 길이로 회전해야합니다. 나는 마지막 우려가 문제가 될 것이라고 생각하지 않습니다.
hiwaylon

1

로그를 구문 분석하고 결과를 계산하여 DB에 저장하는 아이디어가 유효하다고 생각합니다. 어쨌든 DB의 모든 원시 로그를 원한다는 것을 확신하지 못합니다 (동료가 제안한 것이라고 생각합니다). 이미 파일에 로그가 있습니다. 맞습니까? 그것들을 보관할 수 있습니다. 비트가 실제로 사용 사례에 달려 있다고 가정합니다.

또한 "댓글 답변"을 질문으로 옮기는 것에 대해서는 @ Thorbjørn Ravn Andersen에 동의하십시오.


1

사용 목적에 따라 다릅니다. 집계 값을 표시하는 표준 그래프 또는 보고서가있는 경우 이벤트가 들어올 때이를 필터링하고 해당 버킷으로 집계하는 것이 좋습니다. 특정 이벤트로 드릴 다운해야하거나 나중에 이벤트를 다시 분석 / 재 분류하려는 경우 개별 이벤트를 저장해야합니다.

시간과 공간이 있다면 일반적으로 데이터를 집계하지만 세부 사항을 (압축) 파일에 저장하는 것이 좋습니다. 거의 필요하지 않기 때문에 세부 정보에 쉽게 액세스 할 필요는 없지만 분류 기준이 변경되면 대량 재 처리에 사용할 수 있습니다.


"데이터를 집계하지만 세부 사항을 (압축 된) 파일에 저장하십시오." 특히 좋은 생각, 감사합니다!
elliot42

언급 된 OP 로깅의 양과 들어오는 + 필터링 + 집계와 관련된 문제가 있습니까? 로그 볼륨이 높거나 집계가 사소하지 않은 경우 병목 현상이 발생할 수 있습니다.
hiwaylon

OP는 "하루에 수십만 건의 이벤트"를 언급했습니다. 하루에 백만 건의 이벤트는 분당 700 개 미만 또는 약 11 초입니다. 입력이 긴 XML이 아닌 한 평균 서버는 땀을 흘리지 않고 처리 할 수 ​​있어야합니다. 솔루션을 디자인하고 배포 할 때 반드시 고려해야 할 사항입니다.
TMN

1

모든 아키텍처 결정은 비즈니스 요구에 따라 이루어져야합니다. 귀하의 경우, 로그 시스템에서 어떤 정보를 얻고 자하는지, 그리고 저장 방법,이 정보를 요구하는 빈도 및 결과를 얻기 위해 기다리는 시간을 결정하기 위해 더 명확한 아이디어를 가져야합니다. . 이것이 로그 수집기, 이벤트 상관기 및 이와 유사한 응용 프로그램의 디자인을 주도합니다.

내 의견을 제시하기보다는 개발하려는 응용 프로그램과 유사한 응용 프로그램을 살펴 보는 것이 좋습니다. 그들 중 일부는 개발하려는 척하는 것보다 훨씬 강력 할 수 있지만 아키텍처 및 스토리지 정책을 살펴보면 상처를 입지 않습니다. 전문가 측면에는 RSA 및 Arcsight와 같은 SIEM 응용 프로그램이 있으며 오픈 소스 측면에는 Kiwi 또는 OSSIM (전문 기기 기반 버전도 있음)과 같은 이니셔티브가 있습니다.

고려해야 할 또 다른 사항은 도구로 얻은 결과를 사용하기 시작하면 경영진으로부터 더 많은 정보와 더 자세한 정보를 얻기 위해 많은 요청을 받기 시작한다는 것입니다. 그러니 ... 조심해서 사용하고 시야를 넓히십시오. 더 많은 작업을 제공 할 수 있지만 많은 지원과 가시성을 얻을 수 있습니다 (패키지에 압력이 가해 짐) ....

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