EK (ElasticSearch / Kibana) & Filebeat
- 로컬에서는 ELK + Filebeat로 세팅해서 테스트를 해보았는데, 아무래도 단순 로깅 작업에 logstash를 쓸 필요성이 그다지 없는 듯 하고 리소스(프리티어) 절약 차원에서 logstash는 구성에서 제외했다.
- EK 는 AWS 오픈서치 프리티어로 간단히 구성했다.
Filebeat
- 도커를 사용해서 구성했다.
- 서버에서 바로 시스템을 설치하는 것이... 굉장히 부담스럽게 느껴진다.
- 실제로 서버에 시스템 설치를 하다보면 환경설정이 꼬일 수도 있고, 부담스러운 작업은 맞는 듯. 그리고 도커가 그런 문제를 해소해주는 아주 훌륭한 역할을 수행하지 않나.
- 그래서 도커를 이용해서 일단 실행해보고 테스트해보고 지우고 난리를...ㅎㅎ 여튼 아주 편리하다.
- 도커 컴포즈 파일로 구성했다.
- 볼륨 설정 잡는데 아주 편리하기 때문에...!
docker-compose.yml
services:
filebeat:
container_name: filebeat
image: docker.elastic.co/beats/filebeat-oss:7.10.0
user: root
volumes:
- ./config/filebeat.yml:/usr/share/filebeat/filebeat.yml # filebeat.yml 설정 파일 세팅
- /var/log/nginx:/var/log/nginx
- ../back/logs/spring.log.json:/var/log/spring/spring.log.json
- ./logs:/usr/share/filebeat/logs # filebeat 로그 가져오는 용도
command: ["--strict.perms=false"]
- opensearch 버전에 맞추어 filebeat를 구성한다.
- 프리티어 사용을 위해서 오픈서치는 구버전인 7.10.0으로 세팅했고, filebeat도 이를 따라간다.
-oss
버전을 굳이 사용하지 않아도 실행엔 문제가 없는 듯 했다.
- 프리티어 사용을 위해서 오픈서치는 구버전인 7.10.0으로 세팅했고, filebeat도 이를 따라간다.
- filebeat 로그파일은 /usr/share/filebeat/logs 이하 filebeat 파일로 생성된다.
filebeat.yml 파일
- 이 파일은 권한 설정을 잘 해주어야 한다!
- 유저만이 읽기 권한을 가져야 하는데... 파일 권한 설정하기가 까다로워서
- command: ["--strict.perms=false"] 로 타협을 보았다.
- 참고 : https://discuss.elastic.co/t/volume-mapped-filebeat-yml-permissions-from-docker-on-windows-host/91893
- 유저만이 읽기 권한을 가져야 하는데... 파일 권한 설정하기가 까다로워서
- 도커 파일을 쓰는 경우엔 아래와 같이 작성하는 듯 했다.
- 조금씩 다른 구성으로 파일을 작성하는데 아래와 같이 작업하면 되는 듯 하다. (테스트 해보지 않았다.)
- 도커 컴포즈를 이용해 아래 파일로 이미지를 빌드하는 경우에는 여전히 에러가 해소가 되지 않아서 나는 도커 파일 없이 작업했다.
# Dockerfile FROM docker.elastic.co/beats/filebeat:7.10.0 COPY /config/filebeat.yml /usr/share/filebeat/filebeat.yml USER root RUN chmod go-w /usr/share/filebeat/filebeat.yml RUN chown -R root /usr/share/filebeat
- 도커 컴포즈를 이용해 아래 파일로 이미지를 빌드하는 경우에는 여전히 에러가 해소가 되지 않아서 나는 도커 파일 없이 작업했다.
- 조금씩 다른 구성으로 파일을 작성하는데 아래와 같이 작업하면 되는 듯 하다. (테스트 해보지 않았다.)
filebeat.yml
- 로그 파일 위치를 세팅하고, 엘라스틱 서치로 전송하도록 구성했다.
# ============================== Filebeat inputs =============================== filebeat.inputs: - type: log id: api-log # API 로그 fields: index_name: "api-log" enabled: true paths: - /var/log/spring/*.json json.keys_under_root: true json.overwrite_keys: true json.add_error_key: true json.expand_keys: true - type: log id: api-log # API 로그 fields: index_name: "nginx-log" enabled: true paths: - /var/log/nginx/*.log # ================================== Outputs =================================== # ------------------------------ OpenSearch Output ------------------------------ output.elasticsearch: hosts: ["{대충 주소}.es.amazonaws.com:443"] # 443 포트로 연결 / 포트 안 넣어두면 자동으로 9200 포트로 전송하니 꼭 포트 정보도 적는다. protocol: "https" username: "{username}" password: "{password}" index: "{}" # 인덱스 설정이 없으면, filebeat-yyyymmdd 대충 이런 형태로 기본 설정된다. # setup.ilm.enabled: false setup.pack.security.enabled: false setup.xpack.graph.enabled: false setup.xpack.watcher.enabled: false setup.xpack.monitoring.enabled: false setup.xpack.reporting.enabled: false
- 아래 setup 관련해서 false로 지정을 해야 오픈서치와 잘 커넥션이 이루어진다.
키바나
- 결과물 확인
- 대강 아래와 같이 로그를 확인해볼 수 있다.
- 로그 생성 로직은 더 수정할 예정
참고 문서
'Sever > AWS' 카테고리의 다른 글
[AWS]OpenSearch 프리티어 생성해보기 (0) | 2023.09.24 |
---|---|
[AWS]Elastic IP 주소 할당 + Route53 호스팅 (0) | 2023.07.09 |