팁 (조언)
이 콘텐츠는 eBook, Architecting Cloud Native .NET Applications for Azure에서 발췌한 것으로, .NET Docs 또는 오프라인에서 읽을 수 있는 다운로드 가능한 무료 PDF로 제공됩니다.
많은 좋은 중앙 집중식 로깅 도구가 있으며 무료 오픈 소스 도구에서 더 비싼 옵션에 이르기까지 다양한 비용이 듭니다. 대부분의 경우 무료 도구는 유료 제품보다 좋거나 더 좋습니다. 이러한 도구 중 하나는 Elasticsearch, Logstash 및 Kibana의 세 가지 오픈 소스 구성 요소 조합입니다.
총체적으로 이러한 도구를 탄력적 스택 또는 ELK 스택이라고 합니다.
탄력적 스택
Elastic Stack은 Kubernetes 클러스터에서 정보를 수집하기 위한 강력한 옵션입니다. Kubernetes는 Elasticsearch 엔드포인트로 로그 전송을 지원하며, 대부분의 경우 그림 7-5와 같이 환경 변수를 설정하기만 하면 됩니다.
KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true
그림 7-5. Kubernetes에 대한 구성 변수
이 단계에서는 클러스터에 Elasticsearch를 설치하고 모든 클러스터 로그를 이 서버로 전달하도록 설정합니다.
Kubernetes
An example of a Kibana dashboard showing the results of a query against logs ingested from Kubernetes그림 7-6입니다. Kubernetes에서 수집된 로그에 대한 쿼리 결과를 보여 주는 Kibana 대시보드의 예
구성에 대한 자세한 내용은 구성 로깅(Kibana)을 참조하세요.
탄력적 스택의 장점은 무엇인가요?
Elastic Stack은 저렴하고 확장 가능하며 클라우드 친화적인 방식으로 중앙 집중식 로깅을 제공합니다. 사용자 인터페이스는 데이터 분석을 간소화하므로 어설픈 인터페이스로 싸우는 대신 데이터에서 인사이트를 수집하는 데 시간을 할애할 수 있습니다. 다양한 입력을 지원하므로 분산 애플리케이션이 점점 더 다양한 종류의 서비스에 걸쳐 있으므로 로그 및 메트릭 데이터를 시스템에 계속 공급할 수 있을 것으로 예상할 수 있습니다. 또한 Elastic Stack은 큰 데이터 집합에서 빠른 검색을 지원하므로 대규모 애플리케이션에서도 자세한 데이터를 기록하고 성능이 좋은 방식으로 데이터를 볼 수 있습니다.
Logstash
첫 번째 구성 요소는 Logstash입니다. 이 도구는 다양한 소스에서 로그 정보를 수집하는 데 사용됩니다. 예를 들어 Logstash는 디스크에서 로그를 읽고 Serilog와 같은 로깅 라이브러리에서 메시지를 받을 수도 있습니다. Logstash는 로그가 도착하면 몇 가지 기본 필터링 및 확장을 수행할 수 있습니다. 예를 들어 로그에 IP 주소가 포함된 경우 Logstash는 지리적 조회를 수행하고 해당 메시지에 대한 국가/지역 또는 원본 도시를 가져오도록 구성할 수 있습니다.
Serilog는 매개 변수가 있는 로깅을 허용하는 .NET 언어에 대한 로깅 라이브러리입니다. 필드를 포함하는 텍스트 로그 메시지를 생성하는 대신 매개 변수는 별도로 유지됩니다. 이 라이브러리를 사용하면 보다 지능적인 필터링 및 검색이 가능합니다. Logstash에 쓰기 위한 샘플 Serilog 구성은 그림 7-7에 나타납니다.
var log = new LoggerConfiguration()
.WriteTo.Http("http://localhost:8080")
.CreateLogger();
그림 7-7. HTTP를 통해 logstash에 직접 로그 정보를 작성하기 위한 Serilog 구성
Logstash는 그림 7-8에 표시된 것과 같은 구성을 사용합니다.
input {
http {
#default host 0.0.0.0:8080
codec => json
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
index=>"sales-%{+xxxx.ww}"
}
}
그림 7-8. Serilog에서 로그를 수집하는 Logstash 구성
광범위한 로그 조작이 필요하지 않은 시나리오의 경우 Beats라고 하는 Logstash에 대한 대안 이 있습니다. Beats는 로그에서 네트워크 데이터 및 가동 시간 정보에 이르기까지 다양한 데이터를 수집할 수 있는 도구 제품군입니다. 많은 애플리케이션에서 Logstash와 Beats를 모두 사용합니다.
Logstash에서 로그를 수집한 후에는 로그를 보관할 장소가 필요합니다. Logstash는 다양한 출력을 지원하지만 더 흥미로운 출력 중 하나는 Elasticsearch입니다.
Elasticsearch
Elasticsearch는 로그가 도착하면 인덱싱할 수 있는 강력한 검색 엔진입니다. 로그에 대한 쿼리를 빠르게 실행할 수 있습니다. Elasticsearch는 엄청난 양의 로그를 처리할 수 있으며, 극단적인 경우 여러 노드에서 확장할 수 있습니다.
매개 변수를 포함하도록 작성되었거나 Logstash 처리를 통해 매개 변수가 분할된 로그 메시지는 Elasticsearch가 이 정보를 유지하므로 직접 쿼리할 수 있습니다.
방문한 상위 10개 페이지를 검색하는 jill@example.com쿼리가 그림 7-9에 나타납니다.
"query": {
"match": {
"user": "jill@example.com"
}
},
"aggregations": {
"top_10_pages": {
"terms": {
"field": "page",
"size": 10
}
}
}
그림 7-9. 사용자가 방문한 상위 10개 페이지를 찾기 위한 Elasticsearch 쿼리
Kibana 웹 대시보드를 사용하여 정보 시각화
스택의 최종 구성 요소는 Kibana입니다. 이 도구는 웹 대시보드에서 대화형 시각화를 제공하는 데 사용됩니다. 대시보드는 기술적이지 않은 사용자도 만들 수 있습니다. Elasticsearch 인덱스에 상주하는 대부분의 데이터는 Kibana 대시보드에 포함될 수 있습니다. 개별 사용자는 대시보드 요구 사항이 다를 수 있으며 Kibana는 사용자별 대시보드를 허용하여 이러한 사용자 지정을 사용하도록 설정합니다.
Azure에 Elastic Stack 설치
탄력적 스택은 여러 가지 방법으로 Azure에 설치할 수 있습니다. 언제나처럼 가상 머신을 프로비전하고 직접 Elastic Stack을 설치할 수 있습니다. 이 옵션은 가장 높은 수준의 사용자 지정 기능을 제공하기 때문에 일부 숙련된 사용자가 선호합니다. 인프라 as a Service에 배포하면 해당 경로를 사용하는 사람들이 머신 보안 및 패치를 사용하여 up-to-date 유지와 같은 서비스로서의 인프라와 관련된 모든 작업의 소유권을 갖도록 강제하는 상당한 관리 오버헤드가 발생합니다.
오버헤드가 적은 옵션은 Elastic Stack이 이미 구성된 많은 Docker 컨테이너 중 하나를 사용하는 것입니다. 이러한 컨테이너는 기존 Kubernetes 클러스터에 삭제하고 애플리케이션 코드와 함께 실행할 수 있습니다. sebp/elk 컨테이너는 잘 문서화되고 테스트된 Elastic Stack 컨테이너입니다.
또 다른 옵션은 최근에 발표된 ELK-as-a-Service 제품입니다.
참고문헌
.NET