본문 바로가기

DevOps

Grafana 알람 사용시 Image Renderer 사용 이슈 정리

그라파나는 모니터링 대시보드로 많이 쓰이는 웹 애플리케이션입니다. 다양한 기능을 제공하는데 그 중 하나는 Alert기능이 있습니다. 이 기능에는 graph이미지를 추가로 전송할 수 있는데, slack, email 등에 noti를 보낼때 매우 유용하게 사용할 수 있습니다.

이미지를 전달하기 위한 Redering은 grafana의 Grafana Image Renderer플러그인이 chromium(headless browser)을 통해서 수행합니다. Grafana Image Renderer을 사용하기 위해서는 몇가지 제한사항과 이슈에 대해 확인해야하는데 이 부분에 대해 정리하고자 합니다.

 

Grafana Image Renderer 플러그인 사용 방법

1) grafana-cli로 설치

$ grafana-cli plugins install grafana-image-renderer

grafana-cli로 설치하는 것이 가장 깔끔하지만 외부인터넷망과 연결되지 않는 곳에서는 쉽게 적용 불가합니다. 이 때는 grafana-image-renderer github에서 package를 다운받아서 설치하는 것이 좋습니다.

 

github package url : https://github.com/grafana/grafana-image-renderer/releases

 

2) docker로 띄우기

$ docker pull grafana/grafana-image-renderer

docker에 이미 grafana-image-renderer 이미지가 준비되어 있으므로 이 docker image를 띄우면 됩니다.

 

3) standalone node.js application 띄우기

gitub에서 source를 다운받아서 아래와 같이 디펜던시를 빌드하고 실행하는 방법도 있습니다.

$ yarn install --pure-lockfile
$ yarn run build
$ node build/app.js server --port=8081

위 2), 3) 방식으로 사용할 때 반드시 grafana configuration에서 아래와 같이 external rendering server에 대해 설정하고 재시작 해야합니다.

[rendering]
server_url = http://localhost:8081/render
callback_url = http://localhost:3000/

 

grafana-cli 및 standalone application 사용시 주의사항

Docker를 사용할 경우 container가 디펜던시를 모두 가지고 있으므로 렌더링하는데 큰 문제가 생기지 않지만 plugin이나 standalone application을 사용할 때는 디펜던시에 대해 확인하고 사용해야 합니다.

 

plugin의 rendering engine은 chromium browser을 사용하는데 이 browser는 다수의 library dependency를 가지고 있습니다. 제대로 설치하지 않았을 경우 아래와 같은 에러가 발생하고, 이미지가 생성되지않음을 확인할 수 있습니다.

Rendering failed: Error: Failed to launch chrome!/var/lib/grafana/plugins/grafana-image-renderer/chrome-linux/chrome:
error while loading shared libraries: libX11.so.6: 
cannot open shared object file: No such file or directory\n\n\nTROUBLESHOOTING:https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

OS마다 요구되는 library는 다르지만 아래와 같은 library를 기본적으로 요구합니다.

 

Ubuntu:

libx11-6 libx11-xcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrender1 libxtst6 libglib2.0-0 libnss3 libcups2  libdbus-1-3 libxss1 libxrandr2 libgtk-3-0 libgtk-3-0 libasound2

 

Centos:

libXcomposite libXdamage libXtst cups libXScrnSaver pango atk adwaita-cursor-theme adwaita-icon-theme at at-spi2-atk at-spi2-core cairo-gobject colord-libs dconf desktop-file-utils ed emacs-filesystem gdk-pixbuf2 glib-networking gnutls gsettings-desktop-schemas gtk-update-icon-cache gtk3 hicolor-icon-theme jasper-libs json-glib libappindicator-gtk3 libdbusmenu libdbusmenu-gtk3 libepoxy liberation-fonts liberation-narrow-fonts liberation-sans-fonts liberation-serif-fonts libgusb libindicator-gtk3 libmodman libproxy libsoup libwayland-cursor libwayland-egl libxkbcommon m4 mailx nettle patch psmisc redhat-lsb-core redhat-lsb-submod-security rest spax time trousers xdg-utils xkeyboard-config

 

무엇이 문제인가?

Chromium browser는 더이상 centos 6를 지원하지 않습니다. 이로인해서 만약 grafana가 설치되어있고, rendering engine을 실행하려는 OS가 CentOS 6일 경우 정상적으로 동작하지 않습니다.

라이브러리를 추가해보려고 했으나 몇 라이브러리는 CentOS 7 전용 library이기 때문에 설치가 불가능했습니다.

 

그러므로 만약 CentOS에서 Grafana 그리고 Rendering engine을 사용할 경우 반드시 CentOS 7 이상에서 운영하는 것을 권장합니다.

 

관련 링크

- https://grafana.com/docs/grafana/latest/administration/image_rendering

- https://grafana.com/docs/grafana/latest/alerting/notifications/

- https://github.com/grafana/grafana-image-renderer

태그