Infra/Kubernetes & EKS

[EKS] Grafana 사용을 위한 Loki + Promtail 설정 방법

jimmy_AI 2023. 12. 25. 22:43
반응형

EKS 환경 내 Grafana에서 로그 모니터링을 하려면

Loki와 Promtail을 세팅하여야 각 pod에서 로그가 정상적으로 수집될 수 있습니다.

 

이번 글에서는 Loki와 Promtail을 EKS 내에서 세팅하는 방법을 살펴보도록 하겠습니다.

(Loki는 저장소, Promtail은 로그를 담아주는 역할입니다.)

 

 

1. Loki 설치

1. 먼저, Loki 작동을 위해서는 ebs-csi-addon을 설치해야 합니다.

설치 명령어는 다음과 같습니다.

cluster_name=my-eks-cluster-name
eksctl create addon --name aws-ebs-csi-driver --cluster $cluster_name --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --force

cluster_name 변수에는 설치하실 EKS 클러스터의 이름을 적어주시면 됩니다.

 

 

2. 설치 후에는 ebs-csi-controller-sa라는 이름의 서비스 어카운트에 권한을 부여해야 합니다.

권한 부여 명령어는 다음과 같습니다.

eksctl create iamserviceaccount --name ebs-csi-controller-sa --namespace kube-system --cluster $cluster_name --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --approve --override-existing-serviceaccounts

 

 

3. Loki를 위한 서비스 어카운트를 생성해줍니다.

(loki라는 네임스페이스에서 loki-sa라는 서비스 어카운트를 생성하는 것을 가정했습니다.)

oidc_id=$(aws eks describe-cluster --name $cluster_name --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)

# 등록 여부 확인
echo $oidc_id

# oidc 등록
eksctl utils associate-iam-oidc-provider --cluster $cluster_name --approve
 
eksctl create iamserviceaccount --name loki-sa --namespace loki --cluster $cluster_name --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy --approve --override-existing-serviceaccounts

 

 

4. helm 차트를 통하여 Loki를 설치해줍니다.

helm install logging grafana/loki --namespace loki

 

 

5. Loki의 values.yaml 파일을 추출하여 가져옵니다.

helm show values grafana/loki > values.yaml

 

 

6. values.yaml 파일에서 serviceacount 부분의 create를 False로 바꿔주고,

위에서 생성한 Loki의 서비스 어카운트의 이름(위 예시에서 loki-sa)도 적어줍니다.

 

반응형

 

7. 정상적인 Loki의 실행을 위해서는 values.yaml 파일에서 s3 설정을 해주어야 합니다.

s3 버킷을 하나 만든 뒤, 다음과 같이 항목을 바꿔줍니다.

storage:
    bucketNames:
      chunks: <your-bucket-name>
      ruler: <your-bucket-name>
      admin: <your-bucket-name>
    type: s3
    s3:
      s3: s3://<your-bucket-name>
      endpoint: s3.<your-region>.amazonaws.com
      region: <your-region>
      secretAccessKey: ""
      accessKeyId: ""
      signatureVersion: null
      s3ForcePathStyle: false
      insecure: false
      http_config: {}

 

 

8. toleration 설정이 필요한 경우라면 values.yaml 파일에서 같이 진행해줍니다.

 

 

9. s3 접근을 위한 IAM 역할을 생성하고, 다음과 같이 helm 차트 업그레이드를 진행합니다.

helm upgrade --install logging grafana/loki -f values.yaml --namespace loki --set loki.auth_enabled=false --set loki.storage.s3.accessKeyId=<iam_secret_id> --set loki.storage.s3.secretAccessKey=<iam_secret_key>

 

 

2. Promtail 설치

1. helm 차트로 promtail을 설치합니다.

helm install promtail grafana/promtail --namespace loki --set config.lokiAddress=http://loki-gateway.loki.svc.cluster.local:3100/loki/api/v1/push

 

 

2. values.yaml 파일을 추출하여 가져옵니다.

helm show values grafana/promtail > values.yaml

 

 

3. values.yaml에서 toleration 부분을 아래와 같이 수정해줍니다.

(모든 namespace의 로그를 확인하기 위한 과정입니다.)

tolerations:
  - operator: Exists
    effect: NoSchedule

 

 

4. 변경된 values.yaml 파일을 적용해줍니다.

helm upgrade --install promtail grafana/promtail -f values.yaml --namespace loki --set config.lokiAddress=http://loki-gateway.loki.svc.cluster.local:3100/loki/api/v1/push

 

 

5. Grafana에서 <service-name>.<namespace-of-the-service>.svc.cluster.local

양식의 url을 입력하여 데이터 소스가 연결되는지 확인해주시면 완료됩니다.

(이 글 기준에서는 http://loki-gateway.loki.svc.cluster.local/입니다.)

 

P.S. 이 글 작성에 도움을 주신 JuneKyu Park님께 감사의 말씀을 올립니다.