Spring Boot와 Flume을 기반으로 로그 수집 및 분석 시스템 구축
기업 시스템의 규모가 지속적으로 확장됨에 따라 시스템 로그는 점점 더 커지고 있으며, 안정적인 로그 수집 및 분석 시스템이 없으면 시스템을 효과적으로 모니터링하고 유지 관리하기가 어렵습니다. 이번 글에서는 Spring Boot와 Flume을 기반으로 효율적인 로그 수집 및 분석 시스템을 구축하는 방법을 소개합니다. PREREACESITES 시작하기 전에 다음 소프트웨어를 설치하고 설정해야합니다 이상 버전
- Kibana 7.6.2 이상 버전
Spring Boot 애플리케이션 구성
- 먼저 Spring Boot 애플리케이션을 생성하고 필요한 종속성을 추가해야 합니다.
- application.properties 파일에 다음을 추가합니다. 다음 구성:
- 위 구성에서는 애플리케이션의 포트 번호, log4j2 구성 파일, Flume 관련 구성 및 Elasticsearch 액세스 URI를 지정했습니다. Log Collector
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
# 应用端口号 server.port=8080 # log4j2配置 logging.config=classpath:log4j2.xml # flume配置 flume.agentName=myflume flume.sourceType=avro flume.clientType=load-balancing flume.hosts=localhost:41414 # elasticsearch配置 spring.elasticsearch.rest.uris=http://localhost:9200
- 위 코드에서는 로그 이벤트를 Flume 이벤트로 패키징하여 Flume 서버로 보내는 log4j2 Appender를 구현했습니다.
@Plugin(name = "Flume", category = "Core", elementType = "appender", printObject = true) public class FlumeAppender extends AbstractAppender { private static final ObjectMapper MAPPER = new ObjectMapper(); private final FlumeClient client; private final String sourceType; protected FlumeAppender(String name, Filter filter, Layout<? extends Serializable> layout, FlumeClient client, String sourceType) { super(name, filter, layout, true); this.client = client; this.sourceType = sourceType; } @PluginFactory public static FlumeAppender createAppender(@PluginAttr("name") String name, @PluginElement("Filters") Filter filter, @PluginElement("Layout") Layout<? extends Serializable> layout, @PluginAttr("sourceType") String sourceType, @PluginAttr("hosts") String hosts) { if (name == null) { LOGGER.error("FlumeAppender missing name"); return null; } if (client == null) { LOGGER.error("FlumeAppender missing client"); return null; } return new FlumeAppender(name, filter, layout, createClient(hosts), sourceType); } private static FlumeClient createClient(String hosts) { LoadBalancingRpcClient rpcClient = new LoadBalancingRpcClient(); String[] hostArray = hosts.split(","); for (String host : hostArray) { String[] hostParts = host.split(":"); rpcClient.addHost(new InetSocketAddress(hostParts[0], Integer.parseInt(hostParts[1]))); } Properties props = new Properties(); props.setProperty(RpcClientConfigurationConstants.CONFIG_CLIENT_TYPE, "default_loadbalance"); props.setProperty(RpcClientConfigurationConstants.CONFIG_HOSTS, hosts); props.setProperty(RpcClientConfigurationConstants.CONFIG_MAX_BACKOFF, "10000"); AvroEventSerializer serializer = new AvroEventSerializer(); serializer.configure(props, false); return new FlumeClient(rpcClient, serializer); } @Override public void append(LogEvent event) { try { byte[] body = ((StringLayout) this.getLayout()).toByteArray(event); Map<String, String> headers = new HashMap<>(); headers.put("timestamp", Long.toString(event.getTimeMillis())); headers.put("source", "log4j"); headers.put("sourceType", sourceType); Event flumeEvent = EventBuilder.withBody(body, headers); client.sendEvent(flumeEvent); } catch (Exception e) { LOGGER.error("Failed to send event to Flume", e); } } }
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Flume name="flume" sourceType="spring-boot" hosts="${flume.hosts}"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Flume> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="flume"/> </Root> </Loggers> </Configuration>
Flume 구성
- Flume Agent의 애플리케이션에서 보낸 로그 메시지를 받아 Elasticsearch로 보내도록 Flume을 구성해야 합니다.
# Define the agent name and the agent sources and sinks myflume.sources = mysource myflume.sinks = mysink myflume.channels = channel1 # Define the source myflume.sources.mysource.type = avro myflume.sources.mysource.bind = 0.0.0.0 myflume.sources.mysource.port = 41414 # Define the channel myflume.channels.channel1.type = memory myflume.channels.channel1.capacity = 10000 myflume.channels.channel1.transactionCapacity = 1000 # Define the sink myflume.sinks.mysink.type = org.elasticsearch.hadoop.flume.ElasticsearchSink myflume.sinks.mysink.hostNames = localhost:9200 myflume.sinks.mysink.indexName = ${type}-%{+YYYY.MM.dd} myflume.sinks.mysink.batchSize = 1000 myflume.sinks.mysink.typeName = ${type} # Link the source and sink with the channel myflume.sources.mysource.channels = channel1 myflume.sinks.mysink.channel = channel1
Elasticsearch 및 Kibana 구성
마지막으로 Elasticsearch 및 Kibana를 구성해야 합니다. Elasticsearch에서는 Flume 구성 파일에 정의된 인덱스 이름과 일치하는 인덱스를 생성해야 합니다.- Kibana에서는 인덱스 스키마를 생성해야 합니다. Kibana의 메인 메뉴에서 "관리"를 선택한 다음 "Kibana"를 선택하세요. Kibana 인덱스 패턴에서 "인덱스 패턴 생성"을 선택합니다. Flume 구성 파일에 정의된 인덱스 이름을 입력하고 프롬프트에 따라 구성합니다.
결론
이 글에서는 Spring Boot와 Flume을 활용하여 효율적인 로그 수집 및 분석 시스템을 구축하는 방법을 소개했습니다. 우리는 애플리케이션의 로그 이벤트를 Flume 서버로 보내기 위해 사용자 정의 log4j2 Appender를 구현했고, 로그 분석 및 시각화를 위해 Elasticsearch와 Kibana를 사용했습니다. 이 글이 여러분만의 로그 수집 및 분석 시스템을 구축하는 데 도움이 되기를 바랍니다.위 내용은 Spring Boot와 Flume을 기반으로 로그 수집 및 분석 시스템 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Linux 환경에서 로그 분석을 위해 Splunk를 사용하는 방법은 무엇입니까? 개요: Splunk는 대규모 로그 데이터에서 귀중한 정보를 실시간으로 검색, 분석 및 추출하는 데 도움이 되는 강력한 로그 분석 도구입니다. 이 문서에서는 Linux 환경에서 Splunk를 설치 및 구성하고 이를 로그 분석에 사용하는 방법을 소개합니다. Splunk 설치: 먼저 Linux 시스템에 Splunk를 다운로드하여 설치해야 합니다. 구체적인 작업은 다음과 같습니다. Splunk 공식 웹사이트(www.

실제 프로젝트에서는 분산 트랜잭션을 피하려고 노력합니다. 그러나 때로는 일부 서비스 분할을 수행해야 하므로 분산 트랜잭션 문제가 발생할 수 있습니다. 동시에 면접 시 시장에서도 분산 거래에 대한 질문을 하게 되는데, 이 사례를 가지고 연습도 할 수 있고, 면접에서는 123에 대해서도 이야기를 나눌 수 있습니다.

Linux 시스템의 로그 분석 및 오류 진단을 수행하려면 특정 코드 예제가 필요합니다. Linux 시스템에서 로그는 시스템의 실행 상태와 다양한 이벤트 발생을 기록하는 데 매우 중요합니다. 시스템 로그를 분석하고 진단함으로써 시스템 장애의 원인을 찾아 적시에 문제를 해결할 수 있도록 도와드립니다. 이 기사에서는 일반적으로 사용되는 Linux 로그 분석 및 오류 진단 방법을 소개하고 해당 코드 예제를 제공합니다. 로그 파일의 위치 및 형식 Linux 시스템에서 로그 파일은 일반적으로 /var/lo에 저장됩니다.

NginxProxyManager의 로그 분석 및 모니터링에는 특정 코드 예제가 필요합니다. 소개: NginxProxyManager는 Nginx를 기반으로 하는 프록시 서버 관리 도구로, 프록시 서버를 관리하고 모니터링하는 간단하고 효과적인 방법을 제공합니다. 실제 작업에서는 잠재적인 문제를 발견하거나 적시에 성능을 최적화하기 위해 NginxProxyManager의 로그를 분석하고 모니터링해야 하는 경우가 많습니다. 이 기사에서는 일반적으로 사용되는 몇 가지 사용 방법을 소개합니다.

읽기-쓰기 분리를 달성하는 방법, Spring Boot 프로젝트, 데이터베이스는 MySQL이고 지속성 레이어는 MyBatis를 사용합니다.

Python 및 Redis를 사용하여 로그 분석 시스템 구축: 실시간으로 시스템 상태를 모니터링하는 방법 소개: 시스템을 개발하고 유지 관리할 때 시스템 상태를 모니터링하는 것은 매우 중요합니다. 좋은 모니터링 시스템을 통해 시스템의 상태를 실시간으로 파악하고 적시에 문제를 발견 및 해결하며 시스템의 안정성과 성능을 향상시킬 수 있습니다. 이 기사에서는 Python과 Redis를 사용하여 시스템의 실행 상태를 실시간으로 모니터링하는 간단하면서도 실용적인 로그 분석 시스템을 구축하는 방법을 소개합니다. 환경 설정: 먼저 Python을 설정하고

Linux에서 로그 분석을 위해 grep 명령을 사용하는 방법은 무엇입니까? 서론: 로그는 시스템 운영 중에 생성되는 중요한 기록이며, 시스템 운영, 유지 관리, 문제 해결을 위해 로그 분석은 필수적인 작업입니다. Linux 운영 체제에서 grep 명령은 로그 분석에 매우 적합한 강력한 텍스트 검색 도구입니다. 이 기사에서는 로그 분석에 일반적으로 사용되는 grep 명령을 사용하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. grep 명령 소개 grep은 Linux 시스템의 파일입니다.

"Linux 로그 파일의 열 개수 분석 및 연구" Linux 시스템에서 로그 파일은 시스템 관리자가 시스템 작동을 모니터링하고 문제를 해결하며 주요 이벤트를 기록하는 데 도움이 되는 매우 중요한 정보 소스입니다. 로그 파일의 각 행에는 일반적으로 여러 열(필드)이 포함되며, 로그 파일마다 열 번호와 형식이 다를 수 있습니다. 시스템 관리자는 로그 파일의 열 수를 효과적으로 구문 분석하고 분석하는 방법을 이해해야 합니다. 이 문서에서는 Linux 명령과 코드 예제를 사용하여 이를 달성하는 방법을 살펴보겠습니다.
