들어가며
Apache License 2.0인 Grafana v7.5 기준으로
- Grafana panel을 png image로 렌더링하고,
- 이를 외부 저장소에 저장하여,
- 알럿으로 전송하는 워크플로우에 대해 이야기합니다.
Image rendering
Grafana는 공식 Image renderer 플러그인을 통해 알럿 발생 시 대쉬보드 패널을 png image로 자동 변환하는 기능을 지원합니다.
이를 통해 Grafana는 자동으로 패널 이미지를 생성하여 alert에 추가할 수 있습니다.
패널과 대쉬보드를 png 파일로 변환하기 위해서는 Grafana Image Renderer 플러그인을 필수적으로 설치해야 하는데요.
Grafana v7.5 기준에서 image renderer 최신 호환은 v3.5.0 입니다.
그라파나 공식 문서에서는 dependency 이슈로 docker container로 구성하는 것을 권장하고 있는데요.
빠른 구성을 위해서는 docker-compose 로 작성한 github repository를 참고하면 되겠습니다.
추가로 temp_data_lifetime 옵션을 사용하여 생성된 이미지의 생명주기를 설정할 수 있는데요.
이에 대한 자세한 내용은 아래의 Configuration 에서 다룹니다.
Memory requirements
렌더링을 위해 최소 16GB 의 메모리가 권장됩니다.
Grafana가 실제 렌더링을 위해 백그라운드에서 브라우저 인스턴스를 만드는데, 렌더링 이미지에는 많은 메모리가 필요할 수 있습니다.
여러 이미지가 병렬로 렌더링 되면 메모리 사용량이 더 커지게 되고, 이를 해결하기 위해 원격 렌더링 서비스를 이용할 수도 있습니다.
Configuration
그라파나는 .ini 확장자의 configuration 파일에 지정하거나, 환경 변수를 사용하여 지정하는 등의 configuration 옵션이 있습니다.
대쉬보드 패널 이미지를 png 파일로 렌더링하고, 외부 스토리지에 저장하기 위해서는 몇 가지 configuration 옵션을 설정해야 하는데요.
여기서는 grafana.ini configuration 파일을 기준으로 설명합니다.
[paths]
data
grafana가 관리하는 데이터들에 경로를 지정합니다.
패널 이미지가 저장되는 png 디렉토리 또한 이곳에 위치합니다.
default는 /var/lib/grafana 입니다.
temp_data_lifetime
생성된 패널 이미지 파일의 생명주기를 설정합니다.
예를 들어 1h, 15m 등으로 입력하여 시간, 분 단위로 설정 가능합니다.
이미지 파일이 생성되고 temp_data_lifetime이 지나면 grafana가 해당 파일을 삭제합니다.
[external_image_storage]
이 옵션을 사용하여 Slack이나, email 메시지와 같은 서비스에서 공유할 수 있도록 이미지를 공개하는 방법을 제어할 수 있습니다.
provider
s3, webdav, gcs, azure_blob, local과 같은 옵션이 있습니다.
설정된 옵션이 없다면, 그라파나는 파일 업로드를 수행하지 않습니다.
[external_image_storage.s3]
이 옵션으로 AWS S3 스토리지를 사용하기 위해 구성을 적용할 수 있습니다.
옵션 구성 상세는 공식 문서 참고
[external_image_storage.local]
알럿 발생시 이미지를 로컬에 저장합니다. 이 옵션의 경우 추가 구성은 없습니다.
따로 data path를 지정하지 않았다면 컨테이너 내부 기준으로 /var/lib/grafana/png에 저장되며, 볼륨을 두어 컨테이너 외부와 공유하여 사용하면 되겠습니다.
알럿을 1분마다 evaluate하여 패널 이미지가 1분마다 생성된 것을 확인할 수 있습니다.
생성된 이미지 패널 예시입니다.
Use Images in notification
Grafana v9.4 기준 Grafana 공식문서에서 설명하는 내용입니다.
Grafana v7.5 기준으로 작성한 문서이지만, 알럿에 이미지를 사용하기 위해 필요한 요구사항과, 워크플로우에 대해 잘 정리되어 있어 참고 가치가 있다고 판단하여 추가합니다.
그라파나는 각 알럿에 대해 최대 두 개의 알럿을 생성합니다.
- 알럿이 발생할 때
- 알럿이 해결될 때
알럿이 firing 되는 동안 스크린샷이 다시 생성되지 않습니다.
대신 그라파나에서 패널을 열어 실시간으로 데이터를 추적해야 합니다.
또한 알럿 룰에서 알럿이 그룹화되는 방식에 따라 Grafana는 동일한 패널의 여러 스크린샷과 함께 알럿을 보낼 수 있습니다.
스크린샷을 생성하면 Grafana는 AWS S3, Azure Blob Storage, 또는 Google Cloud Storage와 같은 클라우드 스토리지 서비스에 업로드 할 수 있습니다(혹은 내부 서버에 업로드하거나 슬랙과 같은 메신저 서버스에 바로 업로드 하는 것도 가능합니다.)
- Grafana v8.0 미만에서 slack channel은 오직 webhook receiver 형태로만 접근할 수 있습니다.
- v8.0+부터 image file을 slack channel에 직접 전송이 가능합니다.
Granafa Image alerting 101
- image renderer 필수 구성
- 스크린샷이 생성될 때, data 폴더에 저장
- 외부 스토리지 저장소에 저장할 때도 마찬가지
- 그라파나는 data 폴더 쓰기 권한이 있어야 함.
- Discord, Email, Pushhover, Slack 또는 Telegram에 알럿을 전송하지 않는 한 클라우드 스토리지 서비스를 사용.
- 위의 서비스의 경우에만 알럿에 이미지를 첨부하는 기능을 지원
- 그 외 서비스는 클라우드 스토리지 버킷에 업로드된 스크린샷을 연결
- 클라우드 스토리지 서비스가 구성된 경우, 클라우드 스토리지 버킷에서 스크린샷을 연결하는 것을 default로 함.
- 스크린샷을 외부 클라우드 스토리지 서비스에 업로드하고 버킷의 스크린샷에 액세스하기 위해 auth가 요구됨.
- 일부 서비스가 CDN을 사용하기 위해 URL을 다시 작성하기 때문에 이미지 미리 보기가 일부 인스턴스 메시징 및 통신 플랫폼에서 작동하지 않을 수 있음.
- 이 경우 3번의 서비스를 사용하거나, 알럿에서 이미지를 사용하지 않는 것이 좋음.
- 클라우드 스토리지에 업로드 되는 스크린샷 파일은 랜덤한 20개의 문자열로 이루어진 이름으로 저장.
- 그라파나는 클라우드 스토리지에 저장된 이미지를 삭제하지 않음.
- 크론잡 구성하여 삭제하는 것을 권장.
- 보안 정책으로 이미지 파일 조회가 public하지 못할 수 있음.
- 일부 서비스가 CDN을 사용하기 위해 URL을 다시 작성하기 때문에 이미지 미리 보기가 일부 인스턴스 메시징 및 통신 플랫폼에서 작동하지 않을 수 있음.
- 이 경우 3번의 서비스를 사용하거나, 알럿에서 이미지를 사용하지 않는 것이 좋음.
- 그라파나는 내부 웹 서버에 저장된 이미지를 삭제하지 않음.
- 크론잡 구성하여 삭제하는 것을 권장.
Reference
https://grafana.com/docs/grafana/v7.5/administration/image_rendering/
https://grafana.com/docs/grafana/v7.5/administration/configuration/#external_image_storage
그라파나 최신 버전 참고
https://grafana.com/docs/grafana/latest/alerting/manage-notifications/images-in-notifications/
'devOps' 카테고리의 다른 글
Grafana Alerting(v7.5 기준) (1) | 2023.08.09 |
---|