前言
利用prometheus監控redis.
github地址:https://github.com/oliver006/redis_exporter
技術架構

安裝redis_exporter
注:在redis集群下的所有節點上部署。
- 上傳解壓
從 redis_exporter下載 並上傳redis_exporter-v1.3.5.linux-amd64.tar安裝包並解壓到/usr/local目錄
wget https://github.com/oliver006/redis_exporter/releases/download/v1.3.5/redis_exporter-v1.3.5.linux-amd64.tar.gz
tar -xvf redis_exporter-v1.3.5.linux-amd64.tar
cd redis_exporter-v1.3.5.linux-amd64/
- 配置
使用默認配置
redis_exporter 常用的選項:
-redis.addr:指明一個或多個 Redis 節點的地址,多個節點使用逗號分隔,默認為 redis://localhost:6379 -redis.password:驗證 Redis 時使用的密碼; -redis.file:包含一個或多個redis 節點的文件路徑,每行一個節點,此選項與 -redis.addr 互斥。 -web.listen-address:監聽的地址和端口,默認為 0.0.0.0:9121
- 啟動
進入根目錄下,輸入以下命令:
cd redis_exporter-v1.3.5.linux-amd64 nohup ./redis_exporter -redis.addr 10.x.xxx.213:7000 10.x.xxx:7001 10.x.xxx.213:7002 10.x.xxx.213:7003 & tail -1000f nohup.out
注:-redis.addr 請修改相應環境redis服務地址,如同一台服務器部署了多個實例,全部都要填寫
啟動成功后,可以訪問 http://10.x.xx.100:9121/metrics/ (IP和端口要改成相應環境的)
看抓取的信息如下:
Prometheus配置
-
配置
修改prometheus組件的prometheus.yml加入redis監控:
vi /usr/local/prometheus-2.15.1/prometheus.yml
-
啟動驗證
先kill掉Prometheus進程,用以下命令重啟它,然后查看targets:
cd /usr/local/prometheus-2.15.1 nohup ./prometheus --config.file=prometheus.yml &
Grafana配置
- 導入儀表盤模板
導入標准 redis儀表盤模板,以下是在標准基礎上修改的模板文件(Redis-dashboard.json)
注意:Memory Usage這個圖表,一直是N/A。是因為redis_memory_max_bytes 獲取的值為0,導致 redis_memory_used_bytes / redis_memory_max_bytes 結果不正常。
解決辦法:將redis_memory_max_bytes 改為服務器的真實內存大小。更改計算公式:
redis_memory_used_bytes{instance=~"$instance"} / 8193428
-
預警指標
序號 |
預警名稱 |
預警規則 |
描述 |
1 |
節點數預警 |
當集群中的節點數達到閾值【!=12】時進行預警 |
|
2 |
客戶端連接數預警 |
當客戶端連接數達到閾值【>900】時進行預警 |
|
3 |
內存預警 |
當內存使用達到閾值【>80%】時進行預警 |
|
4 |
拒絕連接預警 |
因最大客戶端數量限制而被拒絕的連接請求數量達到閾值【>1】時進行預警 |
|
5 |
未命中預警 |
當根據key找不到數據的次數達到閾值【>10000000】時進行預警 |
|
其它
-
注冊為系統服務開機自動啟動
## 准備配置文件 cat <<\EOF >/etc/systemd/system/redis_exporter.service [Unit] Description=Prometheus exporter for Redis metrics. Documentation=Supports Redis 2.x, 3.x, 4.x, and 5.x [Service] ExecStart=/usr/local/redis_exporter/redis_exporter -redis.addr=redis://localhost:6379 [Install] WantedBy=multi-user.target EOF ## 啟動並設置為開機自動啟動 systemctl daemon-reload systemctl enable redis_exporter.service systemctl stop redis_exporter.service systemctl start redis_exporter.service systemctl status redis_exporter.service