DevOps課程-Prometheus 13

安裝Redis Exporter

ZONGRU Li
10 min readOct 28, 2022

這章節就要來教怎麼安裝"Redis Exporter"

來提供Prometheus要監控Redis服務的Endpoint

來監控Redis服務的流量,連線...etc

首先透過google找到"Redis Exporter":

然後就會找到這個Github寫好,提供多數人使用的"Redis Exporter"

LINK

然後我們卻不曉得如何安裝該"Redis Exporter"

實際上應用我們可能會透過Helm來佈署這個找到的"Redis Exporter"

並且透過Helm Chart來進行設定

這時候再重新透過google搜尋"redis exporter helm chart":

然後找到Prometheus社群維護的helm chart:

LINK

在這邊就可以找到多數常見的應用程式服務對應的ExporterHelm Chart

也可以看看上一層還有哪些對應的常見應用程式:

後面還有很多

回頭看到prometheus-redis-exporter

在前面解說頁也有提到,並有對應連結:

所以直接透過Helm來管理整個"oliver006/redis_exporter"

而不用花太多時間研究其怎麼運作

而這之中我們可能會需要有自己的設定

參考到其values.yaml:

這邊我調整一下Github用暗黑模式,不然白底很難看:

一邊參考上面這份values.yaml檔的設定

在本機編輯一個"redis-values.yaml"檔案

首先要建立的部分設定是"serviceMonitor":

github上參考

前篇有提到,這是告知Prometheus其要監控的Endpoint位置

也就是描述Prometheus要監控的target集合K8S元件

這樣Prometheus才會去抓資料:

記得要開enabled

然後如上設置後

其實仍然不夠告知我們所安裝的Prometheus要去抓哪一個Target

這邊還要額外加上labels才能讓Prometheus夠分辨這個Target

#這邊可以看看其他exporter範例對應的ServiceMonitor元件,先找到隨便一個元件:
kubectl get servicemonitor -n monitoring
#查看其中一個的設定:
kubectl get servicemonitor {隨便挑一個名稱} -n monitoring -o yaml

就會看到yaml內的labels都有標示"release: monitoring"

再來就是告知Prometheus要抓資料的位置,參考:

#查找redis佈署的service元件的名稱:
kubectl get svc |grep redis

然後改成:

然後正常情況下,別的應用程式要連接到Redis一般是需要帳密的

只是現在課程是簡單的demo,所以暫時不用打帳密

否則我爬文看到可以這樣打:

又或著帳密設置在env內:

不過我們佈署的是最簡單版的:

這個連線沒有帳密的

詳細可以看到docker hub上的官方redisimage解說:

裡面有解說保護模式是關掉的,所以不用密碼

接著另外可以注意到的Helm Chartvalues.yaml設置是 →prometheusRule:

如同前面課程設置過的這個Alert Rule:

也能設置在ExporterHelm Chartvalues.yaml

而講師這邊則是不會同時放在這邊做設置

因為我們有可能會很常調整PrometheusAlert Rule來監控Redis服務

比如新增Rule,移除Rule等等狀況

所以建議還是分開寫

目前完成的內容只有以下:

所以當前完成的redis-values.yaml:

github頁面回到前一頁,首先要先安裝

LINK

往下拉到:

#這邊整理Helm要做的指令,首先新增Chart:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update#安裝這個Redis Exporter的Chart,其中[RELEASE_NAME]改為"redis-exporter",並且要帶我們設置好的values.yaml:
helm install redis-exporter prometheus-community/prometheus-redis-exporter -f redis-values.yaml
#接著可以透過helm工具確認:
helm ls
#然後也可以確認redis exporter的pod,會多出redis exporter:
kubectl get pod
#也可以直接地看servicemonitor元件:
kubectl get servicemonitor
#也可以順便看看他的設定yaml,也可以看到會有labels是release: monitor對應,底下還會有target位置:
kubectl get servicemonitor redis-exporter-prometheus-redis-exporter -o yaml

這邊插入題外話:

這邊我特別注意到上述畫面中的紅框內

endpoint的第一行port的值是"redis-exporter",而不是數字

這個其實在後來16篇筆記針對自己應用程式撰寫serviceMonitor時候會提到

serviceMonitor上面寫的Endpoint裡的PORT

是要對應到service元件裡面PORT的名子

是得沒錯,service元件裡面的PORT是可以起名子的

所以對應helmtemplate可以看到:

對應在values檔案裡面看到這個:

這時候PrometheusWeb上刷新後也能看到redis相關的Metrics資訊

可以直接先看到Status Target(不過跟其他不一樣的是,這個長在default):

展開看到狀態:

#其中上面對應的Endpoint是redis-exporter的svc對應的,可以用指令看:
kubectl describe svc redis-exporter-prometheus-redis-exporter

回到搜尋頁查找redis也可以看到很多很多的相關Metrics:

這邊有點複雜,簡單總結一下:

像第三方的應用程式如Redis這個DB

我們要讓他暴露Metrics資訊給Prometheus

以利做後續查詢甚至後面要設Alert Rule

要加裝對應的Exporter也就是Redis-Exporter

Redis-Exporter會幫我們把Redis應用程式內的Metrix資訊轉換並暴露出來

並且我們會需要serviceMonitor元件來告知Prometheus,現在你要多收集這個Redis-Exporter暴露出來的Metrix資訊

好家在有Helm打包好的Redis-Exporter Chart

裡面連帶可以設置serviceMonitor元件,甚至也有Alert Rule元件

(只是我們Alert Rule暫時不考慮寫在一起)

所以透過撰寫好Helm Chartvalues.yaml,我們一次裝好了:

  1. Redis-Exporter(有看到pod,svc,deploy)
  2. serviceMonitor元件(只是告訴Prometheus要新增這個Target)

參考課程reference

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet