본문 바로가기

EKS/Prometheus & Grafana

Grafana - Image Render Plugin & Slack Alert 연동

Kubernetes 환경에서 Image Render Plugin을 설치하여 Alert을 이미지와 함께 이쁘게 던지고 싶은데,

한글화된 자료가 없어서 좀 힘들었습니다.

 

공식자료들을 살펴보면 아래와 같은 value.yaml을 설정하면 가능하나,

실제로 적용했을 경우 알 수 없는 플러그인이라는 에러가 발생합니다.

 

plugins:
  - grafana-image-renderer

 

돌아돌아 살피던 중 방법을 알아냈는데 순서는 아래와 같습니다.

 

Grafana DashBoard Alert 세팅 -> Alert 발생 -> S3에 해당 이미지 업로드 -> Slack에 Alert 전달

 

따라서 먼저 S3에 관한 세팅해보도록 하겠습니다.

 

먼저 Grafana에서 사용할 수 있는 IAM 계정을 만들어줍니다.

저는 grafana-images-user라는 이름으로 만들고, 적용할 Policy는 아래와 같습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::grafana-alert-images"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::grafana-alert-images/*"
            ]
        }
    ]
}

 

이제 버킷을 grafana-alert-images라는 이름으로 만든 후, S3 퍼블릭 엑세스를 열어줍니다.

 

 

버킷 정책은 아래와 같습니다.

 

{
    "Version": "2012-10-17",
    "Id": "Policy1593677282668",
    "Statement": [
        {
            "Sid": "Stmt1593677280231",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{account_number}:user/grafana-images-user"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::grafana-alert-images"
        }
    ]
}

 

AWS에서 설정은 모두 끝났습니다. 

 

이제 Helm으로 Grafana를 설치할 때, Values.yaml에 아래와 같이 작성해주세요.

 

env:
  GF_RENDERING_SERVER_URL: http://localhost:8081/render
  GF_RENDERING_CALLBACK_URL: http://localhost:3000/
  GF_EXTERNAL_IMAGE_STORAGE_PROVIDER: s3
  GF_EXTERNAL_IMAGE_STORAGE_S3_BUCKET: grafana-alert-images
  GF_EXTERNAL_IMAGE_STORAGE_S3_REGION: ap-northeast-2
  GF_EXTERNAL_IMAGE_STORAGE_S3_ACCESS_KEY: {access_key}
  GF_EXTERNAL_IMAGE_STORAGE_S3_SECRET_KEY: {secret_key}

 

이후 아래 명령어를 수행 해줍시다.

 

helm install -f ./values.yaml -n grafana grafana stable/grafana
helm upgrade -f ./values.yaml -n grafana grafana stable/grafana

 

정상적으로 올라왔다면, 그라파나 Alert 세팅을 해보도록 하겠습니다.

 

 

Slack App에서 사용하고자 하는 채널에 맞게 Incoming Hook을 만드시고 해당 내역을 작성해 주시면 됩니다.

URL은 Incoming Hook URL / Recipient에는 #채널이름을 적어주시면 됩니다.

 

그러고 테스트를 해보면 아래와 같은 이미지를 보실 수 있습니다.

 

 

그리고 Alert을 위해 구성한 대시보드 혹은 대시보드에서 아래와 같이 얼럿을 설정해주시면 됩니다.

 

 

그러면 실제 사용률이 넘었을 경우 아래와 같은 내역을 보실 수 있습니다.

 

슬랙에 대한 구체적인 설정은 다른 슬랙 세팅에 많이 나와있으니, 참고하시면 될 것 같습니다.