본문 바로가기

Log Aggregation

(9)
Spring Logback -> FluentD -> ES 연동 - 3. FluentD Systemd Service 구성 지난 글에서 아래와 같이 수행하여 AutoScaling의 경우 수행하면 된다고 하였지만, fluentd -c /home/ec2-user/.fluentd-ui/fluentd-ui.conf -d /home/ec2-user/.fluentd-ui/fluentd-ui.pid Systemctl enable로 해놓으면 서버가 켜지면서 수행되기 때문에 신경쓸 필요가 없습니다. 먼저 저는 수행하다보니 .fluentd-ui의 폴더 경로를 찾지 못하는 에러를 발견하여서 /home/ec2-user/fluentd라는 폴더를 만들고 해당 폴더에 conf를 세팅하겠습니다. mkdir fluentd cp .fluent-ui/fluent.conf fluentd/fluentd.conf 해당 폴더에 세팅이 되었으면 아래 경로에 fluen..
Spring Logback -> FluentD -> ES 연동 - 2. Spring Logback 설정 꽤나 고생한 부분인데, FluentdAppender가 따로있어, 이를 적용하여 사용하였습니다. 일반적인 LogbackSocket을 사용할 경우 아래와 같은 에러가 발생하여, FluentdAppender를 사용하여 처리하였습니다. 먼저 Pom.xml입니다. ch.qos.logback logback-classic 1.2.3 com.sndyuk logback-more-appenders 1.8.3 org.fluentd fluent-logger 0.3.4 org.komamitsu fluency-core 2.4.1 true org.komamitsu fluency-fluentd 2.4.1 true 다음은 Logback.xml입니다. 저희는 zipkin-slueth까지 설정하여 TraceId를 부여하고 있기 때문에 아..
Spring Logback -> FluentD -> ES 연동 - 1.FluentD UI 설치 및 Config 세팅 EKS를 사용하면서, 로그를 어떻게 넘기는 것이 좋을까 고민을 많이하였습니다. Log Stdout을 fluentd ds로 넘기려하다가 각 노드에 ds가 많아지면 노드가 하나 생성될 때, 기본적으로 차지하는 리소스 및 IP수 때문에, 실 서비스만 구동하여 관리하려던 설계와 방향이 맞지 않았습니다. 따라서 Spring Logback에서 부터 FluentD 서버로 FluentD -> ES Service로 시행착오를 거쳐 잘 진행된 부분입니다. 관리를 편하게 하기 위해서 UI가 있는 FluentD UI를 설치해보겠습니다. Amazon Linux2에서 아래 쉘을 통해 루비 및 FluentD를 설치해줍니다. sudo amazon-linux-extras install -y epel sudo amazon-linux-e..
4. ELB, CloudFront, VPC Flow Logs, CloudTrail 수집 - S3 서버의 CMD, Application Logs들에 대한 수집 외에도 ELB, CloudFront, VPC Flowlogs, CloudTrail 로그들도 모두 S3에 남긴 후 ES Service에서 중앙화 한 후 Kibana를 통해 간편하게 볼 수 있습니다. 각 서비스들에 대해서 로그를 남기는 방법을 간단하게 보도록 하겠습니다. 먼저, CloudTrail입니다. 추적생성을 통해서 각 계정의 서비스에 이벤트나, S3에서 일어나는 API콜 등에 대해서 모두 종합적으로 로그를 남기게 할 수 있습니다. 그 다음은 VPC Flow Logs입니다. 해당 VPC에서 통신되는 부분들에 대한 로그들을 수집해서 보실 수 있으나, 서비스가 크면 클수록 데이터량이 상당하여 생각보다 많은 비용을 발생시킵니다. 따라서 해당 로그활..
3. EC2 Linux Application Logs - S3 (Logstash) 가장 먼저 S3 Bucket을 만들어 주도록 하겠습니다. 이제 서버 설정을 해보겠습니다. EC2에 S3 FullAccess 정책을 붙인 롤을 할당해줍니다. (Put과 Describe에 대한 권한으로 최소화 시키셔도 됩니다.) 먼저, Java11을 설치해야 합니다. 아래 명령어를 수행해서 기본적인 업데이트를 해주겠습니다. sudo yum -y update sudo amazon-linux-extras install -y epel Amazon Linux2에서는 openjdk를 설치할 수 있는것이 아래와 같습니다. 직접 11버전을 찾아서 강제로 설치하는 방법도 있겠으나, 가장 최신버전을 그냥 설치하도록 하겠습니다. sudo yum -y install java-latest-openjdk-devel cat > ja..
6. ECS Log 수집 - S3 (Fluent.D)
5. ECS Log 수집 - Cloudwatch ECS Container의 로그를 수집하는 방법에 대해 알아보겠습니다. 먼저 컨테이너에서 돌아가는 서비스의 로그 중 STDOUT, STDEER I/O 스트림에 대한 부분을 전송해준다고 합니다. 로그는 아래와같이 구성하시면 됩니다. 위와 같은 구성으로 전달할 수 있으나, STDOUT, STDERR외에 Custom하게 생성된 로그에 대해서는 전달 할 방법이 없게됩니다. 따라서 저는 기존에 EC2 로그 수집방법을 활용하여서 Cluster Logs 폴더를 만들고 이를 Conatiner에 매핑한 후 Logs를 해당 폴더에 쌓아서 수집하는 형태로 구성하시는 것이 더 좋을 것이라고 판단됩니다. 이러한 구성을 만들어보도록 하겠습니다.
2. EC2 Linux Command Log 수집 - CW Agent CloudWatchAgentServerPolicy를 가진 Role을 EC2에 준 후, Cloudwatch Agent를 설치하고 어떠한 로그를 수집할지 정한 후 Agent를 실행시켜주면 됩니다. 하지만 Amazon Linux2에서는 세팅이 안 되기 때문에, CWAgent를 통해 수집해야합니다. 기본적으로 CWAgent 설치 및 세팅까지의 과정은 CWAgent Metric 수집과 동일합니다. 또한, CMD로그 세팅은 이전 CloudWatch Logs Agent글을 참고해주세요. 이 과정을 하나씩 진행해보도록 하겠습니다. 먼저, IAM에서 CloudWatchAgentServerPolicy을 가진 Role을 구성해보도록 하겠습니다. 사용 서비스는 EC2를 선택해주시고 다음으로 넘어가주시면 됩니다. 그 다음에는 ..