모니터링/prometheus

[ Cloudwatch ] fluent-bit에서 CW으로 로그 적재

김붕어87 2024. 1. 17. 14:56
반응형
개요
kubernetes pod의 로그를 수집하기 위해서 fluent-bit을 사용할 수 있습니다.
(그외 다른 것도 있습니다.)

로그 수집 흐름
example 1) fluent-bit -> Loki -> Grafana
example 2) fluent-bit -> CloudWatch -> Grafana
example 3) fluent-bit -> ElasticSearch -> Grafana
> 로그 저장소를 원하는 것으로 선택하시면 됩니다.

참조 링크 
1. fluent-bit 커스텀 설치 : https://dongwook35.tistory.com/93

2. AWS CloudWatch 로그 수집 공식 메뉴얼 : https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/Container-Insights-setup-logs-FluentBit.html

 

 

Fluent Bit 로그 수집 흐름도

 

 

1. IAM 설정

  • Fluent Bit(Pod)에서 로그를 수집하고 CloudWatch에 로그 그룹에 로그 적재에 필요한 권한이 필요합니다.

 

1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.
2. 왼쪽 탐색 창에서 역할(Roles)을 선택합니다. 그런 다음 역할 생성(Create role)을 선택합니다.

 

 

 

 

 

3. 사용자 지정 신뢰 정책 클릭

1. 사용자 지정 신뢰 정책 내용 입력하기

  • xxx 내용에 해당 정보 넣기
    • AccountID, OIDC URL 정보
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "",
			"Effect": "Allow",
			"Principal": {
				"Federated": "arn:aws:iam::xxxxx:oidc-provider/oidc.eks.ap-northeast-2.amazonaws.com/id/xxx"
			},
			"Action": "sts:AssumeRoleWithWebIdentity",
			"Condition": {
				"StringEquals": {
					"oidc.eks.ap-northeast-2.amazonaws.com/id/xxx:sub": "system:serviceaccount:amazon-cloudwatch:fluent-bit",
					"oidc.eks.ap-northeast-2.amazonaws.com/id/xxx:aud": "sts.amazonaws.com"
				}
			}
		}
	]
}

 

2. 다음(Next)을 선택합니다.

 

 

 

 

 

 

 

 

4. 권한 추가에서 "cloudwatchFullAccess"를 입력합니다.

그런 다음 검색에 반환된 정책 이름 왼쪽에 있는 확인란을 체크합니다.

다음(Next)을 선택합니다.

 

 

 

 

 

5. 역할 생성

  • 역할 이름 입력
  • 설명 입력 

 

 

 

 

 

 

 

 

 

 

 

 

2. NameSpaces 생성

fluent-bit PoD를 배포할 Namespace를 생성합니다.

 

 

  • namespace 배포
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml

 

 

 

 

 

 

 

 

3. ConfigMap 생성

fluent-bit PoD에 옵션 설정으로 사용할 ConfigMap 생성합니다.

 

 

  • 변수 설정
# 변수 설정

ClusterName=ddo-apne2-dev-xxx
RegionName=ap-northeast-2
FluentBitHttpPort='2020'
FluentBitReadFromHead='Off'
[[ ${FluentBitReadFromHead} = 'On' ]] && FluentBitReadFromTail='Off'|| FluentBitReadFromTail='On'
[[ -z ${FluentBitHttpPort} ]] && FluentBitHttpServer='Off' || FluentBitHttpServer='On'

 

 

  • ConfigMap 배포
# cluster-info라는 ConfigMap을 생성합니다

kubectl create configmap fluent-bit-cluster-info \
--from-literal=cluster.name=${ClusterName} \
--from-literal=http.server=${FluentBitHttpServer} \
--from-literal=http.port=${FluentBitHttpPort} \
--from-literal=read.head=${FluentBitReadFromHead} \
--from-literal=read.tail=${FluentBitReadFromTail} \
--from-literal=logs.region=${RegionName} -n amazon-cloudwatch

> #FluentBitReadFromHead : 기본적으로 Fluent Bit는 테일에서 로그 파일을 읽으며 배포된 후 새 로그만 캡처합니다. 
반대를 원하는 경우 FluentBitReadFromHead='On'으로 설정하면 파일 시스템의 모든 로그를 수집합니다



배포 확인 명령어
kubectl get cm fluent-bit-cluster-info -o yaml -n amazon-cloudwatch

 

 

 

 

 

 

 

 

4. Fluent bit 설치

fluent-bit pod를 daemonset으로 배포합니다.

 

 

  • fluentd-bit yaml 다운로드 및 수정
# Fluentbit deamonset yaml 파일 다운로드
wget https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/fluent-bit/fluent-bit.yaml


# Fluentbit serviceaccount RBAC 설정
# xxxxx에 알맞은 정보를 입력하세요.
# 위에서 생성한 Cloudwatch Role ARN 주소
vi fluent-bit.yaml
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::xxxxx:role/ddo-apne2-dev-xxxx

 

 

  • fluent-bit 설치
# fluent-bit 설치
kubectl apply -f fluent-bit.yaml -n amazon-cloudwatch


# fluent-bit 설치 확인
kubectl get pods -n amazon-cloudwatch

 

 

 

5. Fluent bit Log 수집 확인

fluent-bit log을 확인해서 정상적으로 로그수집 및 Cloudwatch으로 로그가 저장이 되고 있는지 확인

 

# fluent-bit 로그 확인
kubectl log fluent-bit-xxx -n amazon-cloudwatch

 

 

6. CloudWatch 로그그룹에 로그 저장 확인

Cloudwatch으로 로그가 저장이 되고 있는지 확인

 

  1. AWS CloudWatch 로그인 : https://ap-northeast-2.console.aws.amazon.com/cloudwatch
  2. 탐색창 > 로그 그룹 클릭 > 목록 확인
  • /aws/containerinsights/Cluster_Name/application
  • /aws/containerinsights/Cluster_Name/host
  • /aws/containerinsights/Cluster_Name/dataplane

 

 

 

 

6. Grafana 설정

  • Import ID : 14109

 

 

 

 

반응형