LNMP高可用+Zabbix监控

A9bot 429 0

LNMP高可用+Zabbix监控

设备

6台centos7.9

主机名 主机角色 IP 配置
CentOS7_LNMP_zabbix_mysql_redis 数据库 192.168.174.120 1核心CPU/1G内存/20G硬盘
CentOS7_LNMP_zabbix_web01 web服务器 192.168.174.121 1核心CPU/1G内存/20G硬盘
CentOS7_LNMP_zabbix_web02 web服务器 192.168.174.122 1核心CPU/1G内存/20G硬盘
CentOS7_LNMP_zabbix_nginx01 负载均衡 192.168.174.123 1核心CPU/1G内存/20G硬盘
CentOS7_LNMP_zabbix_nginx02 负载均衡 192.168.174.124 1核心CPU/1G内存/20G硬盘
CentOS7_LNMP_zabbix_zabbix 监控 192.168.174.125 2核心CPU/4G内存/50G硬盘

部署

初始化脚本

每台主机都跑一遍

#!/bin/bash
echo "=====系统环境初始化脚本====="
sleep 3
echo "——>>> 关闭防火墙与SELinux <<<——"
sleep 3
systemctl stop firewalld
systemctl disable firewalld &> /dev/null
setenforce 0
sed -i '/SELINUX/{s/enforcing/disabled/}' /etc/selinux/config

echo "——>>> 创建阿里仓库 <<<——"
sleep 3
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 
yum -y install wget
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  

echo "——>>> 设置时区并同步时间 <<<——"
sleep 3
timedatectl set-timezone Asia/Shanghai
yum -y install chrony
systemctl start chronyd
systemctl enable chronyd

echo "——>>> 设置系统最大打开文件数 <<<——"
sleep 3
if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; then
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535   #软限制
* hard nofile 65535   #硬限制
EOF
fi

echo "——>>> 系统内核优化 <<<——"
sleep 3
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_syncookies = 1             #防范SYN洪水攻击,0为关闭
net.ipv4.tcp_max_tw_buckets = 20480     #此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死
net.ipv4.tcp_max_syn_backlog = 20480    #表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数
net.core.netdev_max_backlog = 262144    #每个网络接口 接受数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目
net.ipv4.tcp_fin_timeout = 20           #FIN-WAIT-2状态的超时时间,避免内核崩溃
EOF

echo "——>>> 减少SWAP使用 <<<——"
sleep 3
echo "0" > /proc/sys/vm/swappiness

echo "——>>> 安装系统性能分析工具及其他 <<<——"
sleep 3
yum install -y gcc make autoconf vim sysstat net-tools iostat  lrzsz

数据库

rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

yum install mysql-server -y

systemctl enable mysqld --now

grep -i password /var/log/mysqld.log

mysql -uroot -p'密码'

> set global validate_password_policy=0;

> alter user root@"localhost" identified by "admin123456";

vim /etc/my.cnf

[mysqld]
#码复杂度策略
validate_password_policy=0

#设置字符集支持中文
character-set-server=utf8

systemctl restart mysqld

mysql -uroot -padmin123456

> CREATE USER 'root'@'%' IDENTIFIED BY 'admin123456';
> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin123456';
> FLUSH PRIVILEGES;
> create database discuz;

Nginx

vim /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

yum install nginx-1.20.2 -y

PHP

yum install php php-fpm php-mysql php-gd -y

vim /etc/php-fpm.d/www.conf

#指定PHP程序运行时的用户和组为Nginx
user = nginx
group = nginx

#取消注释,开启PHP状态页面,并改名为/php_status
pm.status_path = /php_status

vim /etc/php.ini

#取消注释,修改PHP时区为亚洲/上海
date.timezone ="Asia/shanghai"

discuz网站配置文件

rm -rf /etc/nginx/conf.d/*

vim /etc/nginx/conf.d/discuz.conf
内容如下:

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }

    #配置nginx连接php
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    #开启php的状态检测页面
    location /php_status {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi_params;
    }
}
systemctl enable nginx php-fpm --now

测试Nginx和PHP、PHP和MySQL之间的连接

vim /usr/share/nginx/html/phpinfo.php

<?php
phpinfo();
?>
vim /usr/share/nginx/html/mysql.php

<?php
$con=mysql_connect("192.168.174.120","root","admin123456");
if(!$con){
        die("could not connect to the db:\n".mysql_error());
}
else{
        echo "success";
}
mysql_close($con);
?>

访问相关文件,查看显示即可。

部署discuz

cd /usr/share/nginx/html/
rm -rf *
unzip Discuz_X3.3_SC_UTF8.zip 

mv upload/* .

chown -R nginx.nginx .

访问web01(192.168.174.121),按提示部署完毕

克隆web01,形成集群

scp -r /usr/share/nginx/html 192.168.174.122:/usr/share/nginx/

chown -R nginx.nginx /usr/share/nginx/html

部署redis,为集群提供缓存服务

在数据库主机上

yum install redis -y

vim /etc/redis.conf

#查找 bind 127.0.0.1 这一行修改为0.0.0.0 监听所有接口。
bind 0.0.0.0

systemctl enable redis --now
在web01、web02主机安装PHP连接Redis扩展包

yum -y install php-pecl-redis

systemctl restart php-fpm

php -m | grep redis

vim /usr/share/nginx/html/config/config_global.php

#指定Redis服务器地址
$_config['memory']['redis']['server'] = '192.168.174.125'; 

Nginx提供集群负载均衡

两台负载均衡主机上

vim /etc/yum.repos.d/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

yum install nginx-1.20.2 -y

#准备nginx反向代理配置文件
rm -rf /etc/nginx/conf.d/*

vim /etc/nginx/conf.d/proxy.conf

upstream web {
    server 192.168.174.121:80;
    server 192.168.174.122:80;
}

server {
    listen       80;
    server_name  web.discuz.com;

    #开启nginx状态页面
    location = /status {    
    stub_status;
    }

    location / {
        proxy_pass http://web;
    }

    location ~ .* {
        proxy_pass http://web;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

systemctl enable nginx --now

Keepalived实现代理高可用

两台负载均衡上

yum install keepalived -y
主机nginx01上

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
script_user root
    enable_script_security
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 5
    weight -5
    fall 2
rise 1
}
vrrp_instance VI_1 {
    state MASTER               
    interface ens33  #网卡名            
    virtual_router_id 51
    priority 101    #优先级          
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        192.168.174.126/24      #virtual IP
    }
    track_script {
       chk_nginx        
    }
}
主机nginx02上

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
script_user root
    enable_script_security
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 5
    weight -5
    fall 2
rise 1
}
vrrp_instance VI_1 {
    state BACKUP         #备用负载      
    interface ens33            
    virtual_router_id 51
    priority 99        #优先级低一点       
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass abc123
    }
    virtual_ipaddress {
        192.168.174.126/24      
    }
    track_script {
       chk_nginx        
    }
}
nginx01、nginx02上的检查nginx是否down了的脚本:

vim /etc/keepalived/check_nginx.sh

#!/bin/bash
conut=$(ps -C nginx | grep -v PID | wc -l)
if [ $conut -eq 0 ];then
        systemctl stop keepalived
fi

chmod +x /etc/keepalived/check_nginx.sh
nginx01上

#查看是否有虚拟IP
[root@master-proxy ~]# ip a s ens33

#可以自己关停nginx,看看虚拟IP是否会转移

配置hosts

Windows配置本地解析,hosts文件路径:C:\Windows\System32\drivers\etc\

192.168.174.126 web.discuz.com

zabbix部署

zabbix主机上:

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 

yum install zabbix-server-mysql zabbix-agent -y

yum install centos-release-scl -y  #前端依赖

#启用前端仓库
vim /etc/yum.repos.d/zabbix.repo

[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/$basearch/frontend
enabled=1   #改为1启用仓库
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
centos停止维护了,换阿里仓库

vim /etc/yum.repos.d/CentOS-SCLo-scl.repo

[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
#baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/sclo/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-sclo
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

vim /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
#baseurl=http://mirror.centos.org/centos/7/sclo/$basearch/rh/
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=7&repo=sclo-rh
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

#清理仓库缓存
yum clean all  && yum repolist

#安装前端软件包
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y 
zabbix主机同样需要数据库存放监控数据:

rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

yum install mysql-server -y

systemctl enable mysqld --now

grep -i password /var/log/mysqld.log

mysql -uroot -p'密码'
> set global validate_password_policy=0;
> alter user root@"localhost" identified by "admin123456";

vim /etc/my.cnf

[mysqld]
validate_password_policy=0

systemctl restart mysqld

mysql -uroot -p'admin123456'
> create database zabbix character set utf8 collate utf8_bin;
> create user zabbix@localhost identified by '12345678';
> grant all privileges on zabbix.* to zabbix@localhost; #授予zabbix用户对zabbix库中所有表的所有权限

#将所有需要的表导入到库中
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p12345678 zabbix

#zabbix程序连接数据库
vim /etc/zabbix/zabbix_server.conf

#...
DBName=zabbix      #数据库名称(存储数据的仓库)
DBUser=zabbix      #连接数据库的用户(给zabbix程序用的一个身份)
DBPassword=12345678  #设置zabbix用户密码

#配置时区
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

#...
php_value[date.timezone] = Asia/Shanghai 

#zabbix随机启动

systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

访问zabbix的web页面

按提示走

使用

账号 Admin

密码 zabbix

登录,不勾选保存30天

进去后修改语言为中文

在被监控的主机中添加zabbix客户端:zabbix-agent

在mysql_redis、web01、web02、nginx01、nginx02主机上:

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

yum install zabbix-agent -y

vim /etc/zabbix/zabbix_agentd.conf

#...
Server=192.168.174.125   #指定 zabbix server 主机地址

systemctl enable zabbix-agent --now

web页面创建组、添加主机、导入模板

LNMP高可用+Zabbix监控

Zabbix中文乱码

zabbix主机上:
#这个目录下有字体文件
cd /usr/share/zabbix/assets/fonts/

#找一个瘦小的、精神点的字体文件传进来,比如新宋
cat sinsum.ttf > graphfont.ttf

#可以用md5sum检验一下,看看文件内容是否相同
#移除
rm -rf sinsum.ttf

监控负载均衡的Nginx的指标

指标数据在http://127.0.0.1/status页面,需要取出来。

LNMP高可用+Zabbix监控

在nginx01、nginx02主机上:

#取值脚本
mkdir /etc/zabbix/script/
cd /etc/zabbix/script

#status页面取值脚本
vim ngx_status.sh

定义Nginx status页面
ngx_status="http://127.0.0.1/status"

#判断status页面是否存活
#curl -o /dev/null:将 curl 命令的输出重定向到 /dev/null,即丢弃输出,只保留 HTTP 状态码
#-s:静默模式,不显示进度或错误信息
#-w %{http_code}:使用 -w 参数自定义输出格式,这里只输出 HTTP 状态码
#使用 if 语句判断 http_code 是否为 "200",
#如果是 "200",则返回 1,表示状态页面存活;否则,输出 "Nginx status is not running.",表示状态页面未运行。
ngx_status_code() {
        http_code=`curl -o /dev/null -s -w %{http_code} ${ngx_status}`
        if [ ${http_code} == "200" ];then
                return 1
        else
                echo "Nginx status is not running."
        fi
}

#获取当前活动的客户端连接数
active() {
        ngx_status_code || curl -s ${ngx_status} | grep "Active" | awk '{print $NF}'
}

#获取接收客户端连接的总数量
accepts() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $1}'
}

#获取已处理的连接总数量
handled() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $2}'
}

#获取客户端请求总数量
requests() {
        ngx_status_code || curl -s ${ngx_status} | awk NR==3 | awk '{print $3}'
}

#获取正在读取请求标头的当前连接数量
reading() {
        ngx_status_code || curl -s ${ngx_status} | grep "Reading" | awk '{print $2}'
}

#获取正在将响应写回到客户端的当前连接数量
writing() {
        ngx_status_code || curl -s ${ngx_status} | grep "Writing" | awk '{print $2}'
}

#获取当前正在等待响应的客户端连接数量
waiting() {
        ngx_status_code || curl -s ${ngx_status} | grep "Waiting" | awk '{print $2}'
}

#使用位置变量控制脚本输出
case $1 in
        active)
                active;;
        accepts)
                accepts;;
        handled)
                handled;;
        requests)
                requests;;
        reading)
                reading;;
        writing)
                writing;;
        waiting)
                waiting;;
        *)
                echo "Unknown options"
esac

#加执行权限
chmod +x ngx_status.sh
在nginx01、nginx02主机上:

#自定义监控文件路径
cd /etc/zabbix/zabbix_agentd.d/

vim nginx_status.conf 

#“active”做为参数传入脚本 /etc/zabbix/script/ngx_status.sh 中,执行脚本得到页面http://127.0.0.1/status中Active connections的值,把这个值给到UserParameter=nginx.active,
zabbix-server再从这台主机上的zabbix-agent获取这个值,显示在zabbix web页面上。

UserParameter=nginx.active,bash /etc/zabbix/script/ngx_status.sh active
UserParameter=nginx.accepts,bash /etc/zabbix/script/ngx_status.sh accepts
UserParameter=nginx.handled,bash /etc/zabbix/script/ngx_status.sh handled
UserParameter=nginx.requests,bash /etc/zabbix/script/ngx_status.sh requests
UserParameter=nginx.reading,bash /etc/zabbix/script/ngx_status.sh reading
UserParameter=nginx.writing,bash /etc/zabbix/script/ngx_status.sh writing
UserParameter=nginx.waiting,bash /etc/zabbix/script/ngx_status.sh waiting
在nginx01、nginx02主机上:

vim /etc/zabbix/zabbix_agentd.conf

#...

#改为1为开启自定义监控功能,默认该功能为关闭状态
UnsafeUserParameters=1
systemctl restart zabbix-agent

在zabbix主机上下载zabbix-get,以便从命令行获取zabbix-agent的值

yum install zabbix-get -y

#当前活动用户的连接数量
zabbix_get -s 192.168.0.31 -k nginx.active

#已接收的客户端连接总数量
zabbix_get -s 192.168.0.31 -k nginx.accepts

#已处理的连接总数量
zabbix_get -s 192.168.0.31 -k nginx.handled

#客户端请求的总数量
zabbix_get -s 192.168.0.31 -k nginx.requests

#正在读取请求的连接数
zabbix_get -s 192.168.0.31 -k nginx.reading 

#将响应反回客户端的连接数
zabbix_get -s 192.168.0.31 -k nginx.writing

#客户端正在等待服务器的响应数量
zabbix_get -s 192.168.0.31 -k nginx.waiting

监控web主机上PHP的状态

在web01、web02上:
#取值脚本
mkdir /etc/zabbix/script/
cd /etc/zabbix/script

#!/bin/bash

PHPFPM_COMMAND=$1
#根据监听不同端口进行调整
PHPFPM_PORT=80

start_since(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^start since:/ {print $NF}'
}
accepted_conn(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^accepted conn:/ {print $NF}'
}
listen_queue(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^listen queue:/ {print $NF}'
}
max_listen_queue(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^max listen queue:/ {print $NF}'
}
listen_queue_len(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^listen queue len:/ {print $NF}'
}
idle_processes(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^idle processes:/ {print $NF}'
}
active_processes(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^active processes:/ {print $NF}'
}
total_processes(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^total processes:/ {print $NF}'
}
max_active_processes(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^max active processes:/ {print $NF}'
}
max_children_reached(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^max children reached:/ {print $NF}'
}
slow_requests(){
    /usr/bin/curl -s "http://127.0.0.1:"$PHPFPM_PORT"/php_status" |awk '/^slow requests:/ {print $NF}'
}
case $PHPFPM_COMMAND in
    start_since)
        start_since;
        ;;
    accepted_conn)
        accepted_conn;
        ;;
    listen_queue)
        listen_queue;
        ;;
    max_listen_queue)
        max_listen_queue;
        ;;
    listen_queue_len)
        listen_queue_len;
        ;;
    idle_processes)
        idle_processes;
        ;;
    active_processes)
        active_processes;
        ;;
        total_processes)
                total_processes;
                ;;
        max_active_processes)
                max_active_processes;
                ;;
        max_children_reached)
                max_children_reached;
                ;;
        slow_requests)
                slow_requests;
                ;;
          *)
        echo $"USAGE:$0 {start_since|accepted_conn|listen_queue|max_listen_queue|listen_queue_len|idle_processes|active_processes|total_processes|max_active_processes|max_children_reached}"
    esac

#加执行权限
chmod +x ngx_status.sh
自定义监控配置文件:
cd /etc/zabbix/zabbix_agentd.d/

vim phpfpm_status.conf 

UserParameter=phpfpm_status[*],/bin/bash /etc/zabbix/script/phpfpm_status.sh "$1"
vim /etc/zabbix/zabbix_agentd.conf

#...

#改为1为开启自定义监控功能,默认该功能为关闭状态
UnsafeUserParameters=1
systemctl restart zabbix-agent

监控数据库主机上redis的状态

在mysql_redis主机上:

#取值脚本
mkdir /etc/zabbix/script/
cd /etc/zabbix/script

vim redis_status.sh

#! /bin/bash
#Action: Zabbix monitoring redis plug-in
#根据自己的安装情况填写命令位置主机ip和端口
HOST="127.0.0.1"
PORT=6379
#根据参数信息获取监控信息
if [[ $# == 1 ]];then
    case $1 in
        version)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "redis_version" | awk -F':' '{print $2}'`
            echo $result
        ;;
        uptime)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "uptime_in_seconds" | awk -F':' '{print $2}'`
            echo $result
        ;;
        connected_clients)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "connected_clients" | awk -F':' '{print $2}'`
            echo $result
        ;;
        blocked_clients)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "blocked_clients" | awk -F':' '{print $2}'`
            echo $result
        ;;
        used_memory)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "used_memory" | awk -F':' '{print $2}'`
            echo $result
        ;;
        used_memory_rss)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "used_memory_rss" | awk -F':' '{print $2}'`
            echo $result
        ;;
        used_memory_peak)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "used_memory_peak" | awk -F':' '{print $2}'`
            echo $result
        ;;
        used_memory_lua)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "used_memory_lua" | awk -F':' '{print $2}'`
            echo $result
        ;;
        used_cpu_sys)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "used_cpu_sys" | awk -F':' '{print $2}'`
            echo $result
        ;;
        used_cpu_user)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "used_cpu_user" | awk -F':' '{print $2}'`
            echo $result
        ;;
        used_cpu_sys_children)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "used_cpu_sys_children" | awk -F':' '{print $2}'`
            echo $result
        ;;
        used_cpu_user_children)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "used_cpu_user_children" | awk -F':' '{print $2}'`
            echo $result
        ;;
        rdb_last_bgsave_status)
            result=`redis-cli -h $HOST -p $PORT info  | grep -w "rdb_last_bgsave_status" | awk -F':' '{print $2}' | grep -c ok`
            echo $result
        ;;
        aof_last_bgrewrite_status)
            result=`redis-cli -h $HOST -p $PORT info  | grep -w "aof_last_bgrewrite_status" | awk -F':' '{print $2}' | grep -c ok`
            echo $result
        ;;
        aof_last_write_status)
            result=`redis-cli -h $HOST -p $PORT info  | grep -w "aof_last_write_status" | awk -F':' '{print $2}' | grep -c ok`
            echo $result
        ;;
        *)
            echo -e "\033[33mUsage: $0 {connected_clients|blocked_clients|used_memory|used_memory_rss|used_memory_peak|used_memory_lua|used_cpu_sys|used_cpu_user|used_cpu_sys_children|used_cpu_user_children|rdb_last_bgsave_status|aof_last_bgrewrite_status|aof_last_write_status}\033[0m" 
        ;;
   esac
#此处表示当有两个参数时使用,主要用来查询数据库的keys信息等
elif [[ $# == 2 ]];then
    case $2 in
        keys)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "$1" | grep -w "keys" | awk -F'=|,' '{print $2}'`
            echo $result
        ;;
        expires)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "$1" | grep -w "keys" | awk -F'=|,' '{print $4}'`
            echo $result
        ;;
        avg_ttl)
            result=`redis-cli -h $HOST -p $PORT info | grep -w "$1" | grep -w "avg_ttl" | awk -F'=|,' '{print $6}'`
            echo $result
        ;;
        *)
            echo -e "\033[33mUsage: $0 {db0 keys|db0 expires|db0 avg_ttl}\033[0m" 
        ;;
    esac
fi

#加执行权限
chmod +x ngx_status.sh
自定义监控配置文件:
cd /etc/zabbix/zabbix_agentd.d/

vim custom_redis_status.conf

UserParameter=Redis.Info[*],/etc/zabbix/script/redis_status.sh $1 $2
UserParameter=Redis.Status,(redis-cli -h 127.0.0.1  -p 6379  ping)2>/dev/null |grep -c PONG
vim /etc/zabbix/zabbix_agentd.conf

#...

#改为1为开启自定义监控功能,默认该功能为关闭状态
UnsafeUserParameters=1
systemctl restart zabbix-agent

需要的文件

链接:https://pan.baidu.com/s/1utKsYR_lZFRXlYvF4RcTRA?pwd=wys1
提取码:wys1
--来自百度网盘超级会员V6的分享

一些结果图

LNMP高可用+Zabbix监控

LNMP高可用+Zabbix监控

LNMP高可用+Zabbix监控

LNMP高可用+Zabbix监控

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论
分享
0
希望看到您的想法,请您发表评论x