06 . Prometheus監控Redis並配置Grafana


List

  CentOS7.3
  prometheus-2.2.1.linux-amd64.tar.gz
  redis_exporter-v0.30.0.linux-amd64.tar.gz
節點名 IP 軟件版本 硬件 網絡 說明
Prometheus 192.168.43.144 list 里面都有 2C4G Nat,內網 測試環境
Redis 192.168.43.134 list 里面都有 2C4G Nat,內網 測試環境

部署Prometheus

部署Promehteus請看我前面寫的文章

https://www.cnblogs.com/you-men/p/12839535.html

Redis單機部署

此篇文章只做單機服務器搭建,高可用哨兵和集群請看下一篇

環境
[Redis-Server]
	主機名 = redis-master-1
	系統 = CentOS7.6.1810
	地址 = 121.36.43.223
	軟件 = redis-4.0.14

# 版本
# Redis的奇數版本為非穩定版本,例如2.7.3.1,如果為偶數則為穩定版本,例如3.2,3.4;
節點名 IP 軟件版本 硬件 網絡 說明
redis-master 192.168.43.134 list 里面都有 2C4G Nat,內網 測試環境
下載解壓Redis源碼包
yum -y install gcc
wget http://download.redis.io/releases/redis-4.0.14.tar.gz
tar xvf redis-4.0.14.tar.gz -C /opt/
cd /opt/redis-4.0.14
編譯安裝
# Redis的編譯,只將命令文件編譯,將會在當前目錄生成bin目錄
make && make install  PREFIX=/usr/local/redis
cd ..
mv redis-4.0.14/* /usr/local/redis/

# 創建環境變量
echo 'PATH=$PATH:/usr/local/redis/src/' >> /etc/profile
source /etc/profile

# 此時在任何目錄位置都可以是用redis-server等相關命令
[root@redis1 ~]# redis-
redis-benchmark  redis-check-rdb  redis-sentinel   redis-trib.rb    
redis-check-aof  redis-cli        redis-server 
Redis可執行文件
可執行文件 作用
redis-server 啟動redis服務
redis-cli redis 命令行客戶端
redis-benchmark Redis基准測試工具
redis-check-aof redis AOF持久化文件檢測和修復工具
redis-check-dump redis RDB持久化文件檢測和修復工具
redis-sentinel 啟動redis sentinel
修改配置文件
# redis進程是否以守護進程的方式運行,yes為是,no為否(不以守護進程的方式運行會占用一個終端)
daemonize no


# 指定redis進程的PID文件存放位置
pidfile /var/run/redis.pid


# redis進程的端口號
port 6379


# 綁定的主機地址
bind 127.0.0.1


# 客戶端閑置多長時間后關閉連接,默認此參數為0即關閉此功能
timeout 300


# redis日志級別,可用的級別有debug.verbose.notice.warning
loglevel verbose


# log文件輸出位置,如果進程以守護進程的方式運行,此處又將輸出文件設置為stdout的話,就會將日志信息輸出到/dev/null里面去了
logfile stdout


# 設置數據庫的數量,默認為0可以使用select <dbid>命令在連接上指定數據庫id
databases 16


# 指定在多少時間內刷新次數達到多少的時候會將數據同步到數據文件
save <seconds> <changes>


# 指定存儲至本地數據庫時是否壓縮文件,默認為yes即啟用存儲
rdbcompression yes


# 指定本地數據庫文件名
dbfilename dump.db


# 指定本地數據問就按存放位置
dir ./


# 指定當本機為slave服務時,設置master服務的IP地址及端口,在redis啟動的時候他會自動跟master進行數據同步
slaveof <masterip> <masterport>


# 當master設置了密碼保護時,slave服務連接master的密碼
masterauth <master-password>


# 設置redis連接密碼,如果配置了連接密碼,客戶端在連接redis是需要通過AUTH<password>命令提供密碼,默認關閉
requirepass footbared


# 設置同一時間最大客戶連接數,默認無限制。redis可以同時連接的客戶端數為redis程序可以打開的最大文件描述符,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回 max number of clients reached 錯誤信息
maxclients 128


# 指定Redis最大內存限制,Redis在啟動時會把數據加載到內存中,達到最大內存后,Redis會先嘗試清除已到期或即將到期的Key。當此方法處理后,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內存,Value會存放在swap區
maxmemory<bytes>


# 指定是否在每次更新操作后進行日志記錄,Redis在默認情況下是異步的把數據寫入磁盤,如果不開啟,可能會在斷電時導致一段時間內的數據丟失。因為redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於內存中。默認為no。
appendonly no


# 指定跟新日志文件名默認為appendonly.aof
appendfilename appendonly.aof


# 指定更新日志的條件,有三個可選參數 - no:表示等操作系統進行數據緩存同步到磁盤(快),always:表示每次更新操作后手動調用fsync()將數據寫到磁盤(慢,安全), everysec:表示每秒同步一次(折衷,默認值);
appendfsync everysec

我們需要修改的配置

# 設置后台啟動
# 由於Redis默認是前台啟動,不建議使用.可以修改為后台
daemonize yes


# 禁止protected-mode yes/no(保護模式,是否只允許本地訪問)
protected-mode


# 設置遠程訪問
# Redis默認只允許本機訪問,把bind修改為bind 0.0.0.0 此設置會變成允許所有遠程訪問,如果指定限制訪問,可設置對應IP。
# bind指定是redis所在服務器網卡的IP,不指定本機網卡IP,可能導致你的Redis實例無法啟動
# 如果想限制IP訪問,內網的話通過網絡接口(網卡限定),讓客戶端訪問固定網卡鏈接redis
# 如果是公網,通過iptables指定某個IP允許訪問
bind 0.0.0.0

# 配置Redis日志記錄
# 找到logfile,默認為logfile "",改為自定義日志格式
logfile  /var/log/redis_6379.log

# 把requirepass修改為123456,修改之后重啟下服務
requirepass "123456"
# 不重啟Redis設置密碼
# 在配置文件中配置requirepass的密碼(當Redis重啟時密碼依然生效)
127.0.0.1:6379> config set requirepass test123
# 查詢密碼
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "test123"

# 密碼驗證
127.0.0.1:6379> auth test123
OK
127.0.0.1:6379> set name flying
OK
127.0.0.1:6379> get name
"flying"

# 遠程主機連接
# redis-cli  -h  redis_ip -p redis_port -a password
啟動測試
# 放到后台輸出,redis自帶日志了,可以輸出到黑洞
nohup redis-server /usr/local/redis/redis.conf &> /usr/local/redis/redis.log &

# 關閉命令
redis-cli -h 127.0.0.1 -p 6379 -a 123456 shutdown
# 注意:不建議使用 kill -9,這種方式不但不會做持久化操作,還會造成緩沖區等資源不能優雅關閉。極端情況下造成 AOF 和 復制丟失數據 的情況。
# shutdown 還有一個參數,代表是否在關閉 redis 前,生成 持久化文件,命令為 redis-cli shutdown nosave|save。


# 設置開機自啟動
echo "redis-server /usr/local/redis.conf" >> /etc/rc.local
注冊Redis為系統服務

在/etc/init.d目錄添加Redis服務的啟動,暫停和重啟腳本

vim /etc/init.d/redis
#!/usr/bin/env bash
# chkconfig: 2345 10 90  
# description: Start and Stop redis 
PORT=6379
EXEC=/usr/local/redis/src/redis-server
CLIEXEC=/usr/local/redis/src/redis-cli

PIDFILE=/var/run/redis_${PORT}.pid
CONF="/etc/redis/${PORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF &>/dev/null &
        fi
        ;;
    stop)
	PID=$(cat $PIDFILE)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                echo "Stopping ..."
                $CLIEXEC -p $PORT shutdown
                while [ -d /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    restart)
        "$0" stop
        sleep 3
        "$0" start
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac



chmod +x /etc/init.d/redis  
mkdir /etc/redis  
cp /usr/local/redis/redis.conf /etc/redis/6379.conf  
chkconfig --add redis  
chkconfig redis on  
  
service redis start  
service redis restart

Redis常用命令

Redis-value操作

此處Redis五種數據類型具體操作先不演示,只做一個簡單的key操作,具體操作等Python操作Redis再寫詳細,前面主要以運維為主

# 添加一個key[name]為youmen
127.0.0.1:6379> set name youmen
OK

# 獲取key
127.0.0.1:6379> get name
"youmen"

# 查看當前數據庫里面的key
127.0.0.1:6379> keys *
1) "name"

# 判斷key是否存在
127.0.0.1:6379> exists name
(integer) 1

# 刪除key值,也就刪除了這條數據
127.0.0.1:6379> del name
(integer) 1
# 查找不到對應的key返回值就會使(integer)0
127.0.0.1:6379> exists name
(integer) 0



# 設置key的過期時間,過期后key自動刪除
127.0.0.1:6379> set name youmen
OK
127.0.0.1:6379> set name youmen ex 2
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> ttl name
(integer) 6
127.0.0.1:6379> ttl name
(integer) 2
127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> exists name
(integer) 0
持久化命令
# save:將數據同步保存到磁盤
# bgsave:將數據異步保存到磁盤
# lastsave:返回上次成功將數據保存到磁盤的Unix時戳
# shundown:將數據同步保存到磁盤,然后關閉服務
遠程服務控制
# info:提供服務器的信息和統計
# info clients:  查看客戶端信息.
# monitor:實時轉儲收到的請求
# slaveof:改變復制策略設置
# config:在運行時配置Redis服務器
# client list: 查看鏈接的客戶端有哪些
# chient kill 127.0.0.1:50390:  殺掉客戶端鏈接
# config get dir: 查看存儲文件目錄
# config get *:  查看所有配置
# config set requirepass 123 : 修改配置,即時生效
# config get bind :  查看配置文件中的監聽地址

部署redis_exporter插件

下載redis_exporter插件
wget https://github.com/oliver006/redis_exporter/releases/download/v0.30.0/redis_exporter-v0.30.0.linux-amd64.tar.gz
解壓部署
tar xvf redis_exporter-v0.30.0.linux-amd64.tar.gz  -C /usr/local/redis

# 無密碼
nohup ./redis_exporter -redis.addr 192.168.1.120:6379 &
# 有密碼
nohup ./redis_exporter  -redis.addr 192.168.1.120:6379  -redis.password 123456 &
  
# 驗證服務可用性
 lsof -i:9121
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
redis_exp 18500 root    3u  IPv6  57511      0t0  TCP *:9121 (LISTEN)

配置Prometheus

tail -3 /usr/local/prometheus/prometheus.yml
  - job_name: 'redis_node134'
    static_configs:
      - targets: ['192.168.43.134:9121']
重啟Prometheus
systemctl restart prometheus

配置Grafana

先配置prometheus數據源

配置相應模板

我們可以去官網找模板下載json文件導入也可以直接輸入id就自動下載導入

剛導入數據可能沒數據導致圖形不是很形象,可以通過下面腳本批量插入

cat redis_test.sh 
#!/bin/bash
for ((i=0;i<10000;i++))
do
echo -en "helloworld" | redis-cli -h 192.168.43.134 -p 6379 -a 123456  -x set name$i >>redis.log
done


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM