设备
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页面创建组、添加主机、导入模板
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页面,需要取出来。
在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的分享
一些结果图
本文作者为A9bot,转载请注明。