2019/11/06 - [Server/Devops] - [ELK] AWS Elastic Load Balancer Log 분석하고 대시보드 만들기 [1]
이전 포스팅에서는 AWS의 ELB(Elastic Load Balancer)에 대해 간략하게 알아보고, ELB의 로그 기능을 활성화하여 AWS S3 서비스에 파일로 저장하는 과정까지 설명했다. 이번 포스팅에서는 Logstash에서 AWS S3에 올라가 있는 로그파일을 받아 데이터를 적절하게 변환하고 추출하는 filter 단계를 거쳐 ElasticSearch에 insert 하는 부분까지 설명하도록 하겠다.
ELK 설치 및 환경 구성은 따로 나중에 설명하기로 하고 본 포스팅에서는 해당 단계는 건너뛴다.
먼저 Logstash가 설치되어있는 디렉터리로 이동한다. Logstash를 설치할 디렉토리 경로를 따로 명시하지 않았다면 기본적으로는 /etc 하위에 logstash라는 디렉토리 이름으로 설치되어있다.
cd /etc/logstash
해당 디렉토리 내부를 살펴보면 다음과 같은 파일과 디렉터리가 있다.
위 설정 파일에 대한 내용은 다음과 같다. 사실 한글로 번역하기 귀찮아서... ElasticSearch 공식 페이지의 Logstash 설명에 있는 내용을 복붙 해본다.
logstash.yml : Contains Logstash configuration flags. You can set flags in this file instead of passing the flags at the command line. Any flags that you set at the command line override the corresponding settings in the logstash.yml file. See logstash.yml for more info.
요약: Logstash 설정 파일, 커맨드 라인에서 구동 시 전달될 플래그 값들을 미리 파일에 정의하여 쉽게 구동 가능.
pipelines.yml : Contains the framework and instructions for running multiple pipelines in a single Logstash instance. See Multiple Pipelines for more info.
요약: Logstash에서 처리할 데이터 파이프라인을 설정하는 파일, 여러 개의 파이프라인을 설정할 수 있음
jvm.options : Contains JVM configuration flags. Use this file to set initial and maximum values for total heap space. You can also use this file to set the locale for Logstash. Specify each flag on a separate line. All other settings in this file are considered expert settings.
요약: Logstash의 JVM 옵션을 설정할 수 있는 파일
log4j2.properties : Contains default settings for log4j 2 library. See Log4j2 configuration for more info.
요약: Logstash의 기본 로그 라이브러리인 Log4j2 관련 옵션 파일
startup.options (Linux) : Contains options used by the system-install script in /usr/share/logstash/bin to build the appropriate startup script for your system. When you install the Logstash package, the system-install script executes at the end of the installation process and uses the settings specified in startup.options to set options such as the user, group, service name, and service description. By default, Logstash services are installed under the user logstash. The startup.options file makes it easier for you to install multiple instances of the Logstash service. You can copy the file and change the values for specific settings. Note that the startup.options file is not read at startup. If you want to change the Logstash startup script (for example, to change the Logstash user or read from a different configuration path), you must re-run the system-install script (as root) to pass in the new settings.
요약: 리눅스 운영 환경에서 Logstash를 서비스로 등록 시겨 구동할 경우 사용되는 실행 스크립트
대략 설정 파일에 대한 내용은 위와 같다. 그럼 Logstash가 작업하는 내용을 담은 pipelines.yml 파일을 한번 살펴본다.
cat pipelines.yml
위 명령어를 실행해보면 다음과 같은 내용을 출력한다. pipelines.yml 파일에 아무런 설정을 하지 않았다면, 메인 파이프라인 하나가 정의되어있고, 해당 파이프라인의 설정 파일은 conf.d 디렉터리 하위의 *. conf 로 끝나는 파일들인것으로 정의되어있다. 그럼 우리는 conf.d 디렉토리 하위에 *.conf 파일을 적절하게 생성 또는 수정해서 원하는 작업을 처리하면 된다.
그럼 AWS ELB에서 AWS S3에 저장하는 Client Access Log 파일을 Logstash에서 가져오는 input 단계의 코드를 작성해보겠다.
input {
s3 {
bucket => "버켓이름"
prefix => "로그 파일 접두사" # AWSLogs/1234/elasticloadbalancing/ap-northeast-2/
region => "ap-northeast-2"
type => "elblogs"
additional_settings => {
force_path_style => true
follow_redirects => false
}
secret_access_key => ""
access_key_id => ""
}
}
Logstash에서는 AWS S3 플러그인이 존재하기 때문에 간단하게 S3라는 이름으로 블록을 만들고 관련 정보를 입력해주면 된다. bucket의 이름과 로그 대상 파일 접두사(디렉터리 경로) 그리고 region 정보를 입력하고 해당 로그들의 타입을 elblogs로 명시해주면 된다. additional_settings 부분은 말 그대로 필수가 아닌, 필요에 따라 설정하는 부분이다.
가장 중요한 부분은 바로 secret_access_key와 access_key_id 부분이다. AWS IAM User를 만들고, S3 서비스에만 관련된 권한을 설정하고 AWS CLI 혹은 AWS SDK를 활용할 수 있도록 secret_access_key 와 access_key_id를 발급받고 이를 위 항목 필드에 넣어주면 된다. AWS 기능을 사용하기 위한 인증 데이터이므로 반드시 필요하고 중요하다.
위와 같이 설정했다면, 이제 AWS ELB에서 S3에 올린 로그파일을 Logstash에서 가져올 수 있게 된다. 다음 포스트에선 Logstash에서 S3로부터 가져온 로그 파일의 로그 데이터를 어떻게 필터링하고 메시지를 변환하는 filter 단계에 대하여
포스팅을 해보도록 하겠다.
PS: 요즘 회사일이 너무나도 바빠서 글을 자주 못 올리고 있다.... 최대한 빨리 연재해보도록 노력해봐야겠다
'Programming > Server' 카테고리의 다른 글
[Docker] Docker Container Deploy for Private Network (0) | 2020.07.19 |
---|---|
[Shell Script] ECR 도커 컨테이너 이미지 명 및 태그 정보 추출 (0) | 2020.07.16 |
[ELK] AWS Elastic Load Balancer Log 분석하고 대시보드 만들기[1] (0) | 2019.11.06 |
[Network HTTP, HTTPS] CORS 정책에 따른 쿠키 보안 (0) | 2019.08.13 |
[DevOps] 로그 수집 및 모니터링 시스템 - Sentry (2탄) (1) | 2019.06.25 |