zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    常见的HTTP状态码有哪些?
    使用Hbuild打包APP
    Android APK反编译
    小程序|页面跳转的方法
    vi/vim 命令
    webpack学习笔记
    egg框架学习笔记
    IOS弹出系统键盘后,页面不恢复
    js上传文件
    webpack学习笔记
  • 原文地址:https://www.cnblogs.com/you-men/p/13205776.html
Copyright © 2011-2022 走看看