이 글은 기존 운영했던 WordPress 블로그인 PyxisPub: Development Life (pyxispub.uzuki.live) 에서 가져온 글 입니다. 모든 글을 가져오지는 않으며, 작성 시점과 현재 시점에는 차이가 많이 존재합니다.
작성 시점: 2020-05-03
지난 글인 Monitoring with cAdvisor + Prometheus + Grafana 에 이어서, 지난 글에서 다루지 못했던 Grafana Alert 기능에 대해 간단히 소개하고자 한다.
{"ok":true,"result":[{"update_id":917237895,
"message":{"message_id":703,"from":{"id":47220554,"is_bot":false,"first_name":"Pyxis","username":"WindSekirun","language_code":"ko"},"chat":{"id":-1001363414751,"title":"","type":"supergroup"},"date":1588476517,"text":"/start","entities":[{"offset":0,"length":,"type":"bot_command"}]}}]}
하드웨어나 OS 측정 항목에 대한 데이터를 제공하는 exporter로, 이 글에서는 '디스크 사용량'에 대해 Alert를 보낼 것이기 때문에 아래 인스턴스를 추가로 올린다.
nodeexporter:
image: prom/node-exporter:v0.18.1
container_name: nodeexporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($
restart: unless-stopped
prometheus.yml에는 아래와 같이 등록한다.
- job_name: 'nodeExporter'
scrape_interval: 5s
static_configs:
- targets: ['nodeexporter:9100']
제공하는 측정 항목에 대해서는 https://github.com/prometheus/node_exporter#enabled-by-default 에서 볼 수 있다.
Grafana Alerts 기능은 6.7.3 버전 기준으로 Email, Slack, Discord, LINE, Telegram, Webhooks 등 여러 타입을 제공한다. 이 글에서는 상기했었던 Telegram를 사용한다.
Grafana 의 왼쪽 알림 아이콘을 눌러 Notification Channel를 생성한다.
Name에는 알림 채널의 이름을 Bot API Token는 봇의 토큰, Chat ID에는 메세지를 보낼 대상을 선택한다.
타입 밑의 옵션은 다음과 같다.
기존 Panel를 사용해서 알림을 보낼 수 있지만, 이 글에서는 Node-exporter의 metrics를 사용하여 Panel를 추가하려고 한다.
node_filesystem_avail_bytes 는 사용 가능한 용량을, node_filesystem_size_bytes 는 전체 용량을 나타낸다. 따라서 디스크 사용량을 나타내기 위해 전체 용량에서 사용 가능한 용량을 빼고, 이를 MB 단위로 환산한다.
Panel 설정의 '알림' 아이콘을 눌러 새로운 알림을 생성하면, 아래와 같은 화면을 볼 수 있다.
각 옵션은 다음과 같다.
예시로 데이터 사용량이 80%를 임계했을 때 보내려고 하므로, 전체 디스크 용량의 80%를 MB로 환산한 값인 104857 를 입력하여 Condition을 작성한다. WHEN max() of query(A, 5m, now) IS ABOVW 104857
생성한 알림을 확인해보기 위해, time sh -c 'fallocate -l 10G aaa; sync'
를 입력하여 임시 파일을 생성하고, 약간만 기다리면 알림이 발송되는 것을 확인할 수 있다.