남아 도는 노트북으로 ELK 서버를 구성하여 AWS와 연동해보자

Minu·2025년 3월 5일
3

네트워크

목록 보기
3/3

집엔 남아도는 M1이 있어요
-> 그 비싼걸 왜 안써요?
제작년 침수됐습니다.

근데 오랜만에 켜보니 다시 켜지네요.
물론 화면엔 가로줄 + 잔상 + 키보드 잘 안눌림 이슈가 있긴하지만 냅두기엔 아깝잖아요.

그렇다고 웹 서버를 24시간 돌리기엔 노트북을 하루종일 켜놓을수도 없고,,,
AWS에 ELK 돌릴려고 인스턴스를 더 만들면 돈도 더 나가고,,

로그 서버는 보고 싶을때 실행만 하면 되니까 로그 모니터링 서버를 침수된 M1에 ELK서버를 구축하고, 운영중인 AWS 톰캣 서버 로그를 침수된 M1에 보내기로 했습니다.

제가 구성한 아키텍처는 다음과 같아요.

아키텍처

IP는 1.1.1.1(AWS)과 2.2.2.2(집)로 예시를 들겠습니다

AWS 서버 (IP 1.1.1.1)

  1. 로그 데이터를 LogStash Appender를 통해 집(2.2.2.2:5044)으로 전송

홈 서버 (IP 2.2.2.2)

  1. LogStash(5044)를 통해 로그 수집, 가공 후 ElasticSearch(9200)로 전달
  2. ElasticSearch(9200)에서 로그 데이터를 저장 및 검색 가능하도록 인덱싱
  3. Kibana(5601)를 통해 로그 데이터 시각화

시작하기

1. AWS 서버 로그 -> 홈서버로 전송하기

AWS서버에 Logback 설정하고, LogStash Appender 를 이용해 로그를 홈 서버(2.2.2.2:5044)로 전송해야 합니다. (사진 참고)
(AWS 인스턴스 생성 + 고정IP 설정+ JAR배포 과정은 생략할게요)

1. logback.xml 파일 작성

  • src/main/resources/logback.xml
    logback.xml 파일은 각 서버에 맞게 설정하시면 될거같아요.
<configuration>
    <property name="LOG_FILE" value="application.log"/>

        <!-- #참고1 - 집(2.2.2.2:5044)으로 로그 전송 -->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>2.2.2.2:5044</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder" />
    </appender>

    <!-- 콘솔 출력 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- #참고2 - 파일 저장 및 압축 형식 (하루 단위, 최대 5일 보관) -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>application.%d{yyyy-MM-dd_HH-mm}.log.gz</fileNamePattern>
            <maxHistory>5</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Logger 설정 -->
    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
        <!-- #참고3 - Logstash로 로그 전송 적용 -->
        <appender-ref ref="LOGSTASH" />
    </root>
</configuration>
  • 참고1: AWS Lightsail에서 집(2.2.2.2:5044)으로 로그 전송
  • 참고2: 로그 파일을 하루 단위로 application.날짜.log.gz 형식으로 저장하며, 최대 5일 동안 보관
  • 참고3: Logstash Appender를 통해 집으로 로그를 실시간 전송하도록 설정

2. logstash 의존성 추가

implementation 'net.logstash.logback:logstash-logback-encoder:8.0'

서버가 잘 작동하고 로그 파일이 로컬에 남기만하면 끝입니다.
다음과 같이 말이죠.
저는 설정을 다르게 설정해서 dev, prod 로그파일이 나눠진 상태 입니다.

2. 집 WIFI 포트포워딩

외부요청을 허용하도록 집에있는 WIFI 포트포워딩을 설정해야 합니다.
다음 처리 과정을 구성하는 단계입니다.

1. AWS에서 2.2.2.2:5044 요청
2. 집 WIFI 5044 포트포워딩으로 요청 받음
3. 내부 IP 172.30.1.50:5044전송 (침수된 노트북 내부 IP)

(KT WIFI 사용중이므로, KT WIFI 기준으로 합니다)

초기 아이디, 비밀번호
아이디 : ktuser
비밀번호 : homehub

(‼️ 만약 아이디, 비밀번호를 잊어버렸을 경우)
https://oiwkl.tistory.com/167

  1. 로그인 후 메뉴바에서 장치설정 - 트래픽 관리

2. 포트 포워딩 설정 - 빈칸 입력 - 추가

📌 소스 IP주소는 꼭 AWS의 IP로 설정해야합니다. 그래야 다른 IP에서 접속하는걸 방지할수있어요. 빈칸으로두면 절대 안됩니다.

3. ELK서버 구축

노트북에 ELK서버를 Docker로 구축하고 Docker Network를 이용해 연결합니다.

1. ElasticSearch 도커로 실행

docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e "xpack.security.http.ssl.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:8.10.0

2. logstash 실행 설정 파일 생성(logstash.conf)

해당 설정 파일은 5044 PORT로 들어온 로그를 ElasticSearch 에 맞게 JSON으로 가공 후, Docker Network를 이용해 구성한 "elasticsearch:9200" 엔드포인트에 전송하는 설정 파일입니다.

input {
    tcp {
        port => 5044
        codec => json
    }
}
output {
    elasticsearch {
        hosts => ["http://elasticsearch:9200"]
        index => "application-logs-%{+YYYY.MM.dd}"
    }
}

저는 해당 경로에 설정파일을 만들었습니다.

  • /Users/my/Desktop/logstash/logstash.conf

3. logstash 도커로 실행 (경로 주의)

docker run -d --name logstash -p 5044:5044 -p 9600:9600 -v /Users/my/Desktop/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf docker.elastic.co/logstash/logstash:8.10.0

4. 도커 컨테이너간 통신을 위한 네트워크 생성

docker network create elastic-network
docker network connect elastic-network elasticsearch
docker network connect elastic-network logstash

5. kibana 도커로 실행

docker run -d --name kibana --network elastic-network -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" kibana:8.10.1

4. Kibana 접속

  • localhost:5601

이로써 AWS -> 홈 서버 -> 집 노트북으로 로그 모니터링 구축 했습니다

여려분도 안쓰는 노트북 있으면 잘 활용해봐요~!

📌 해당 글에선 집WIFI 고정 IP를 설정하지 않았습니다.


참고

0개의 댓글

관련 채용 정보