로깅에 사용해야 하는 NoSQL 데이터베이스는 무엇입니까?
확장 가능한 앱을 위해 NoSQL 데이터베이스에 로깅한 경험이 있습니까?로깅을 위한 NoSQL 데이터베이스를 조사해보니 MongoDB가 좋은 선택인 것 같습니다.또한, 저는 log4mongo-net을 찾았는데, 이것은 매우 간단한 옵션인 것 같습니다.
이런 방법을 추천해 주시겠습니까?다른 제안이 있습니까?
저는 지난 18개월 동안 첨단 기술이 크게 발전했고, 훨씬 더 나은 대안이 존재하기 때문에 이 수용된 답변을 수정하기로 결정했습니다.
새 답변
MongoDB는 확장 가능한 로깅 솔루션을 위한 하위 옵션입니다.일반적인 이유가 있습니다(예: 로드 시 쓰기 성능).한 가지 더 말씀드리고 싶은 것은 로깅 솔루션에서 단일 사용 사례만 해결한다는 것입니다.
강력한 로깅 솔루션은 다음 단계 이상을 포함해야 합니다.
- 수집
- 운송
- 처리.
- 보관소
- 서치
- 시각화
MongoDB를 선택하면 스토리지 사용 사례만 해결할 수 있습니다(비록 다소 미흡하지만).전체 체인을 분석하면 더 적합한 솔루션이 있습니다.
@오타 카즈키는 몇 가지 옵션을 언급합니다.요즘 제가 선호하는 엔드 투 엔드 솔루션은 다음과 같습니다.
- 수집 및 전송을 위한 Logstash-Forwarder
- 처리를 위한 Logstash & Riemann
- 스토리지 및 쿼리에 대한 탄력적인 검색
- 시각화를 위한 키바나3
로그 데이터 스토리지를 위한 ElasticSearch의 기본적인 사용은 로깅 및 검색 사용 사례에 최신 최고 수준의 NoSQL 솔루션을 사용합니다.Logstash-Forwarder / Logstash / ElasticSearch / Kibana3가 ElasticSearch의 산하에 있다는 사실은 훨씬 더 설득력 있는 주장을 만듭니다.
Logstash는 Graphite 프록시 역할도 할 수 있기 때문에 로그뿐만 아니라 메트릭 수집 및 분석과 관련된 문제에 대해서도 매우 유사한 체인을 구축할 수 있습니다.
오래된 대답
MongoDB Capsed Collections는 매우 인기가 많고 로깅에 적합하며, 일반적으로 로깅에 의미적으로 적합한 'schemaless'라는 추가적인 이점이 있습니다.종종 프로젝트에 잘 로그인하고 싶은 항목만 알고 있거나 프로덕션에서 특정 문제가 발견된 후에만 로그인할 수 있습니다.관계형 데이터베이스나 엄격한 스키마는 이러한 경우 변경하기 어려운 경향이 있으며, 이러한 데이터베이스를 '유연하게' 만들려는 시도는 관계형 데이터베이스를 '느리고' 사용하거나 이해하기 어렵게 만드는 경향이 있습니다.
그러나 어둠 속에서 로그를 관리하고 레이저를 사용하여 마치 우주에서 온 것처럼 보이게 하려면 항상 Graylog2가 있습니다. Graylog2는 MongoDB를 전체 인프라의 일부로 사용하지만 공통의 확장 가능한 형식, 전용 로그 수집 서버, 분산 아키텍처 및 펑키한 UI와 같은 훨씬 더 많은 기능을 제공합니다.
많은 회사들이 애플리케이션 로그를 저장하기 위해 MongoDB를 사용하는 것을 보았습니다.스키마가 없는 것은 응용프로그램 로그에 매우 유연하며 스키마가 시간별로 변경되는 경향이 있습니다.또한 캡핑된 수집 기능은 오래된 데이터를 자동으로 삭제하여 데이터가 메모리에 맞도록 유지하기 때문에 매우 유용합니다.
사람들은 로그를 일반 그룹화 또는 맵리듀스로 집계하지만, 그렇게 빠르지는 않습니다.특히 MongoDB의 MapReduce는 단일 스레드 내에서만 작동하며 JavaScript 실행 오버헤드가 큽니다.새로운 집계 프레임워크가 이 문제를 해결할 수 있습니다.
로깅에 MongoDB를 사용할 때 문제는 높은 쓰기 처리량에 의한 잠금 경합입니다.MongoDB의 insert는 기본적으로 fire-and-forget 스타일이지만 insert()를 많이 호출하면 쓰기 잠금 경합이 많이 발생합니다.이는 응용 프로그램 성능에 영향을 미치고 판독기가 저장된 로그를 집계/필터링하지 못하게 할 수 있습니다.
한 가지 솔루션은 Fluentd, Logstash 또는 Flume과 같은 로그 수집기 프레임워크를 사용하는 것일 수 있습니다.이러한 데몬은 모든 애플리케이션 노드에서 실행되어야 하며 앱 프로세스에서 로그를 가져옵니다.

로그를 버퍼링하고 데이터를 MongoDB/Postgre와 같은 다른 시스템에 비동기식으로 기록합니다.SQL / 등쓰기는 일괄 처리되므로 앱에서 직접 쓰는 것보다 훨씬 효율적입니다.이 링크는 PHP 프로그램에서 Fluentd에 로그를 넣는 방법을 설명합니다.
다음은 MongoDB + Fluentd에 대한 몇 가지 튜토리얼입니다.
- Fluentd + MongoDB: 10gen 블로그에서 데이터를 효과적으로 기록하는 가장 쉬운 방법
- Fluentd:MongoDB에 Apache 로그 저장
MongoDB의 문제는 데이터 볼륨이 메모리 크기를 초과하면 속도가 느려진다는 것입니다.이 시점에서 Apache Hadoop 또는 Cassandra와 같은 다른 솔루션으로 전환할 수 있습니다.위에서 언급한 분산 로깅 계층이 있는 경우 확장에 따라 즉시 다른 솔루션으로 전환할 수 있습니다.이 자습서에서는 Fluentd를 사용하여 HDFS에 로그를 저장하는 방법에 대해 설명합니다.
앱에서 생성하는 로그 메시지의 종류를 지정해야 합니다.만약 당신이 많은 단순 로그 메시지만 기록한다면, MongoDB는 매우 잘 확장되기 때문에 매우 좋은 선택입니다.하지만 복잡한 인증 작업이나 많은 계층이 필요하다면 기존의 rdbms를 사용할 것입니다.
언급URL : https://stackoverflow.com/questions/10525725/which-nosql-database-should-i-use-for-logging
'programing' 카테고리의 다른 글
| Eclipse 검색에서 폴더 제외 (0) | 2023.05.17 |
|---|---|
| 오류 "npm WARN 패키지.json: 리포지토리 필드 없음" (0) | 2023.05.17 |
| MongoDB 노드에서 objectid가 유효한지 확인합니다. (0) | 2023.05.17 |
| 도구 설명에 브레이크라인 추가 (0) | 2023.05.17 |
| WPF: 하나의 바인딩에서 2개의 변환기를 사용하는 방법은 무엇입니까? (0) | 2023.05.12 |