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님께 감사의 말씀을 올립니다.
'Infra > Kubernetes & EKS' 카테고리의 다른 글
쿠버네티스 kubectl 주요 명령어 정리 (2) | 2024.06.10 |
---|---|
[EKS] ArgoCD 설치 및 ingress 설정 방법 (0) | 2023.12.09 |
AWS EKS 클러스터 생성 방법 정리(eksctl 사용) (2) | 2023.12.05 |