# Filebeat로 App Service 로그 적재 ### Flow Spring Boot App -> Message Broker -> Filebeat -> Elastic Cloud ![](https://i.imgur.com/B6m9lTU.png) ### Message Broker (Event Hubs) - Azure App Service는 로그를 적재하는 방법 1. Storage Account 2. Event Hubs (Message Broker) 3. 3rd Party (Azure에서 Marketplace로 제공하는 것만 가능) - Azure App Service 로그를 Filebeat와 연동하는 방법 1. Spring Boot 앱과 동일한 머신에 Filebeat 설치 후 local path로 input 받기 2. Message Broker를 사용해서 Filebeat 서버로 송신 - 위 두 경우를 고려해 보았을 때 편할것 같은 Message Broker 선택 - Event Hubs 설정방법 - Azure에서 Event Hubs Namespace생성 - 왼쪽의 "Shared Access Policy" 메뉴에서 connection string 발급 - Event Hubs 생성 ![](https://i.imgur.com/iMS2s1N.png) - App Service Log 설정 - App Service 좌측 메뉴에서 Diagnostic Setting 진입 - 진단 설정 추가하여 위에서 생성한 Event Hubs에 연결 ![](https://i.imgur.com/hn6uNP7.png) ### Filebeat - ```docker pull docker.elastic.co/beats/filebeat:8.4.0``` - filebeat.yml 환경설정 ``` filebeat.modules: - module: azure # Filebeat의 azure 모듈 사용 activitylogs: enabled: true var: eventhub: "insights-logs-activitylogs" # 위에서 설정한 event hub 이름 consumer_group: "$Default" connection_string: "" # 위에서 발급한 event hub connection string storage_account: "" # SA 설정 (event hub의 상태값을 저장하는 용도) storage_account_key: "" # event hub이 멈춰도 재시작시 SA에 저장된 상태값으로 원복 auditlogs: enabled: true var: eventhub: "insights-logs-auditlogs" consumer_group: "$Default" connection_string: "" storage_account: "" storage_account_key: "" signinlogs: enabled: false var: eventhub: "insights-logs-signinlogs" consumer_group: "$Default" connection_string: "" storage_account: "" storage_account_key: "" cloud.id: "" # Elastic Cloud ID cloud.auth: "" # Elast Search 계정 정보 "id:password 형식" output.elasticsearch.allow_older_versions: true # 옛날 버전의 ES와 호환되도록 ``` - Image 생성 (filebeat.yml 환경을 적용하기 위해) ``` # Dockerfile FROM docker.elastic.co/beats/filebeat:8.4.0 COPY --chown=root:filebeat filebeat.yml /usr/share/filebeat/filebeat.yml ``` ```docker build -t {image_name} .``` - Local Test ```docker run {image_name}``` - Event Hubs에 들어오는 로그 확인 ![](https://i.imgur.com/aAybqbZ.png) - Filebeat에 들어오는 로그 확인 ![](https://i.imgur.com/FpuL3Mg.png) - Elastic Search로 들어오는 로그 확인 ![](https://i.imgur.com/RjybBUo.png) ![](https://i.imgur.com/Sqh4N4y.png) ### 추가 팁 - Azure container instance에 Docker기반 배포 - Docker image 생성 ```docker build -t {name} {dockerfile_path}``` - Docker image tag 생성 ```docker tag {azure_container_registry_id}/{image_name} {image_name}``` - Container registry 로그인 ```docker login {registry_name}.azurecr.io``` - Push docker image ```docker push {above_tag}``` - Azure container instance 생성 1. Docker 배포 선택 ![](https://i.imgur.com/iW5INF1.png) 2. 위에서 배포한 image 선택 ![](https://i.imgur.com/ssMXQ4T.png) - Spring Boot 응답 캐싱 - https://prohannah.tistory.com/182