Redis Sunucusunu Prometheus ve Grafana ile  İzleme

Bu kılavuz, bir Linux sunucusundaki Redis uygulamasının izlenmesine odaklanacaktır. Redis, veritabanı, önbellek ve mesaj aracısı olarak kullanılan açık kaynaklı bir bellek içi veri yapısı deposudur. Redis, isteğe bağlı dayanıklılığa sahip dağıtılmış, bellek içi bir anahtar-değer veritabanı sağlar.

Redis, dizeler, kümeler, haritalar, listeler, sıralı kümeler, mekansal dizinler ve bit eşlemler gibi farklı türde soyut veri yapılarını destekler. 

Redis exporter tarafından neler dışa aktarılır?

INFO komutundaki öğelerin çoğu dışa aktarılır, ayrıntılar için http://redis.io/commands/info bakın. Buna ek olarak, her veritabanı için toplam anahtarlar, süresi dolan anahtarlar ve veritabanındaki anahtarlar için ortalama TTL ölçümleri vardır.

Ayrıca, sayısal biçimdeyse anahtarların değerlerini -check-keys bayrağını kullanarak dışa aktarabilirsiniz. Dışa aktaran ayrıca anahtarın boyutunu (veya veri türüne bağlı olarak uzunluğunu) dışa aktarır. Bu, (sıralanmış) kümeler, karmalar, listeler vb. öğelerin sayısını dışa aktarmak için kullanılabilir.

Setup Pre-requisite

  1. Yüklü Prometheus Sunucusu
  2. Yüklü Grafana Veri Görselleştirme ve izleme Sunucusu

Adım 1: Prometheus Redis exporter’ı kurun

Redis metrikleri için bu Prometheus Exporter Redis’i destekler:

curl -s https://api.github.com/repos/oliver006/redis_exporter/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -

İndirilen arşiv dosyasını ayıklayın

tar xvf redis_exporter-*.linux-amd64.tar.gz
sudo mv redis_exporter-*.linux-amd64/redis_exporter /usr/local/bin/
rm -rf redis_exporter-*.linux-amd64*

redis_exporter geçerli kabuğunuzdan çalıştırılabilir olmalıdır

$ redis_exporter  --version
INFO[0000] Redis Metrics Exporter v1.44.0    build date: 2022-08-25-05:21:38    sha1: 19f7b036bb46869858eec74d8d3fc2186d641399    Go: go1.19    GOOS: linux    GOARCH: amd64

Desteklenen tüm seçeneklerin bir listesini almak için –help seçeneğini iletin

$ redis_exporter  --help
Usage of redis_exporter:
  -check-keys string
    	Comma separated list of key-patterns to export value and length/size, searched for with SCAN
  -check-single-keys string
    	Comma separated list of single keys to export value and length/size
  -debug
    	Output verbose debug information
  -log-format string
    	Log format, valid options are txt and json (default "txt")
  -namespace string
    	Namespace for metrics (default "redis")
  -redis-only-metrics
    	Whether to export go runtime metrics also
  -redis.addr string
    	Address of one or more redis nodes, separated by separator
  -redis.alias string
    	Redis instance alias for one or more redis nodes, separated by separator
  -redis.file string
    	Path to file containing one or more redis nodes, separated by newline. NOTE: mutually exclusive with redis.addr
  -redis.password string
    	Password for one or more redis nodes, separated by separator
  -script string
    	Path to Lua Redis script for collecting extra metrics
  -separator string
    	separator used to split redis.addr, redis.password and redis.alias into several elements. (default ",")
  -use-cf-bindings
    	Use Cloud Foundry service bindings
  -version
    	Show version information and exit
  -web.listen-address string
    	Address to listen on for web interface and telemetry. (default ":9121")
  -web.telemetry-path string
    	Path under which to expose metrics. (default "/metrics")
...

Adım 2: Redis exporter systemd hizmeti / İnit betiği oluşturun

Hizmeti çalıştırmak için prometheus kullanıcısı kullanılacaktır. Yoksa Prometheus sistem kullanıcısını ekleyin

sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus

Ardından bir systemd hizmet birimi dosyası oluşturmaya devam edin.

sudo vim /etc/systemd/system/redis_exporter.service

Aşağıdaki içeriği ekleyin

[Unit]
Description=Prometheus
Documentation=https://github.com/oliver006/redis_exporter
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/redis_exporter \
  --log-format=txt \
  --namespace=redis \
  --web.listen-address=:9121 \
  --web.telemetry-path=/metrics

SyslogIdentifier=redis_exporter
Restart=always

[Install]
WantedBy=multi-user.target

İnit sistemi için

Daemonize’ı yükleyin (CentOS / Ubuntu )

sudo yum -y install daemonize
sudo apt-get install daemonize

Başlangıç komut dosyası oluştur

sudo vim /etc/init.d/redis_exporter

Ekleyin

#!/bin/bash
# Author: Josphat Mutai, [email protected] , https://github.com/jmutai
# redis_exporter     This shell script takes care of starting and stopping Prometheus redis exporter 
#
# chkconfig: 2345 80 80
# description: Prometheus redis exporter  start script
# processname: redis_exporter
# pidfile: /var/run/redis_exporter.pid

# Source function library.
. /etc/rc.d/init.d/functions

RETVAL=0
PROGNAME=redis_exporter
PROG=/usr/local/bin/${PROGNAME}
RUNAS=prometheus
LOCKFILE=/var/lock/subsys/${PROGNAME}
PIDFILE=/var/run/${PROGNAME}.pid
LOGFILE=/var/log/${PROGNAME}.log
DAEMON_SYSCONFIG=/etc/sysconfig/${PROGNAME}

# GO CPU core Limit

#GOMAXPROCS=$(grep -c ^processor /proc/cpuinfo)
GOMAXPROCS=1

# Source config

. ${DAEMON_SYSCONFIG}

start() {
    if [[ -f $PIDFILE ]] > /dev/null; then
        echo "redis_exporter  is already running"
        exit 0
    fi

    echo -n "Starting redis_exporter  service…"
    daemonize -u ${USER} -p ${PIDFILE} -l ${LOCKFILE} -a -e ${LOGFILE} -o ${LOGFILE} ${PROG} ${ARGS}
    RETVAL=$?
    echo ""
    return $RETVAL
}

stop() {
    if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then
        echo "Service not running"
        return 1
    fi
    echo 'Stopping service…'
    #kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE"
    killproc -p ${PIDFILE} -d 10 ${PROG}
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE}
    return $RETVAL
}

status() {
    if [ -f "$PIDFILE" ] || kill -0 $(cat "$PIDFILE"); then
      echo "redis exporter  service running..."
      echo "Service PID: `cat $PIDFILE`"
    else
      echo "Service not running"
    fi
     RETVAL=$?
     return $RETVAL
}

# Call function
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 2
esac

Bağımsız Değişken yapılandırma dosyası oluşturma

sudo vim /etc/sysconfig/redis_exporter

Kullanılan komut Argümanlarını tanımlayın

ARGS="--log-format=txt \
--namespace=redis \
--web.listen-address=:9121 \
--web.telemetry-path=/metrics"

Komut dosyasını sınayın

$ sudo /etc/init.d/redis_exporter
Usage: /etc/init.d/redis_exporter {start|stop|restart}

Adım 3: Redis Prometheus exporter’ı başlatın

Bir Systemd sunucusu için systemctl komutunu kullanın

sudo systemctl daemon-reload
sudo systemctl enable redis_exporter
sudo systemctl start redis_exporter

Servis durumunu onayla:

$ systemctl status redis_exporter redis_exporter.service - Prometheus
   Loaded: loaded (/etc/systemd/system/redis_exporter.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-10-14 13:07:23 UTC; 6s ago
     Docs: https://github.com/oliver006/redis_exporter
 Main PID: 1861 (redis_exporter)
   CGroup: /system.slice/redis_exporter.service
           └─1861 /usr/local/bin/redis_exporter --log-format=txt --namespace=redis --web.listen-address=:9121 --web.telemetry-path=/metrics

Oct 14 13:07:23 cent7.mylab.io systemd[1]: Started Prometheus.
Oct 14 13:07:23 cent7.mylab.io redis_exporter[1861]: time="2022-10-14T13:07:23Z" level=info msg="Redis Metrics Exporter v1.44.0    build date: 2022-08-25-05:21:38    sha1: 19f7b036bb4...ARCH: amd64"
Oct 14 13:07:23 cent7.mylab.io redis_exporter[1861]: time="2022-10-14T13:07:23Z" level=info msg="Providing metrics at :9121/metrics"

SysV İnit sistemi için şunları kullanın

sudo /etc/init.d/redis_exporter start
sudo chkconfig redis_exporter on

Hizmetin çalıştığını kullanarak doğrulayabilirsiniz

$ sudo /etc/init.d/redis_exporter status
redis exporter  service running...
Service PID: 27106

$ sudo chkconfig --list | grep redis_exporter
redis_exporter 0:off   1:off   2:on    3:on    4:on    5:on    6:off

$ sudo ss -tunelp | grep 9121
tcp    LISTEN     0      128                   :::9121                 :::*      users:(("redis_exporter",1970,6)) ino:1823474168 sk:ffff880341cd7800

Adım 4: Prometheus’a ihracatçı işi ekleyin

Son adım, metrikleri kazımak için Prometheus sunucusuna bir iş eklemektir. Düzenle /etc/prometheus/prometheus.yml

# Redis Servers
  - job_name: 10.10.10.3-redis
    static_configs:
      - targets: ['10.10.10.3:9121']
        labels:
          alias: 10.10.10.3

  - job_name: 10.10.10.4-redis
    static_configs:
      - targets: ['10.10.10.4:9121']
        labels:
          alias: 10.10.10.4

Veri metriklerinin kazınmaya başlaması için prometheus hizmetini yeniden başlatın

sudo systemctl restart prometheus

Prometheus sunucusundan 9121 numaralı bağlantı noktasına erişimi test edin, bağlanabilmelidir.

$ telnet 10.1.10.15 9121
Trying 10.1.10.15...
Connected to 10.1.10.15.
Escape character is '^]'.
^]

Bağlanamıyorsa, Servis bağlantı noktanızı ve güvenlik duvarınızı kontrol edin.

Adım 5: Grafana’ya Gösterge Tablosu Ekleyin

Grafana’ya Prometheus veri kaynağı ekleyin ve Redis için bir grafana gösterge tablosunu içe aktarın veya oluşturun.

Grafana gösterge tablosu şu adreste mevcuttur grafana.net ve / veya github.com. İş yapılandırmam bir takma ad kullanıyor, ana bilgisayar ve takma ad seçicili Grafana gösterge tablosunu kullanacağım github.com.

Pano json dosyasını indirin

wget https://raw.githubusercontent.com/oliver006/redis_exporter/master/contrib/grafana_prometheus_redis_dashboard.json

Grafana Kullanıcı Arayüzünde Oluştur > Panoyu İçe Aktar > Yükle’ye gidin .json Dosyası. İndirilen json dosyasını seçin ve “İçe Aktar“ı tıklayın.

prometheus redis import dashboard min 1068x498 1

Grafana Gösterge Tablonuzda verilerin görünmeye başlamasını bekleyin, aşağıda örnek bir görünüm verilmiştir

prometheus redis dashboard min 1068x459 1

Redis sunucularınızı izlemek için Grafana’yı kullanmanın keyfini çıkarın.

Yazının orijinalini buradan okuyabilirsiniz.

Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.