zabbix监控案例实战

通过几个生产案例详细介绍zabbix的使用
内容 隐藏
1 5、zabbix监控案例实战

5、zabbix监控案例实战

5.1监控Linux TCP连接状态

TCP,全称Transfer Control Protocol,中文名为传输控制协议,它工作在OSI的传输层,提供面向连接的可靠传输服务,TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。
在建立连接的时候,所谓的客户端与服务端是相对应的,即要看是谁主动连接的谁,如果A主动连接B那么A就是客户端而B是服务端,如果返过来B主动连接A,那么B就是客户端而A就成了服务端。

5.1.1TCP端口的十一种连接状态

CLOSED:端口默认是关闭状态。

LISTEN: 服务器程序开始监听一个端口,就是LISTEN状态。

SYN_RCVD:三次握手的第二次握手后的端口状态,是收到了客户端发送的SYN_SENT数据包之后的状态,这个状态很短暂,正常在服务器上是很少看到的,除非服务器故意不发送最后一次握手数据包,服务器返回给客户端SYN确认之后就会将在自己的端口置为SYN_RCVD。

SYN_SENT:SYN_SENT状态表示客户端已发送SYN=1的请求连接报文,发送之后客户端就会将自己的端口状态置为SYN_SENT。

ESTABLISHED:表示已经连接成功,客户端收到服务器的确认报文会回复服务器,然后就将端口置为ESTABLISHED,服务器第三次收到客户端的Ack确认就会将端口置为ESTABLISHED并开始传输数据。

FIN_WAIT_1:出现在主动关闭方,FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,当任意一方想主动关闭连接,向对方发送了FIN=1的断开连接请求报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以

FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。

FIN_WAIT_2:出现在主动关闭方,当被动方回应FIN_WAIT_1的ACK报文后,则进入到FIN_WAIT_2状态

TIME_WAIT:出现在主动关闭方,表示收到了对方的FIN请求关闭报文,并发送出了ACK报文,就等2*MSL(Max Segment Lifetime)后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

CLOSE_WAIT: 表示在等待关闭端口,这种状态存在于被动关闭的一方。

LAST_ACK: 是被动关闭方在主动关闭一方在发送FIN报文后,最后等待对方的ACK报文,当再次收到ACK报文后,也即可以进入到CLOSED可用状态了。

5.1.2端口转换状态

服务器端:LISTEN、SYN_RCVD、CLOSE_WAIT、LAST_ACK
客户端:SYN_SENT、FIN_WAIT1、FIN_WAIT2、CLOSING、TIME_WAIT
都具有:CLOSED 、ESTABLISHED

5.1.3TCP三次握手与四次断开

5.1.3.1TCP三次握手

5.1.3.2TCP四次挥手

5.1.4监控TCP连接数脚本

[root@zabbix-web-server1 ~]# vim /etc/zabbix/zabbix_agentd.d/tcp_status.sh
#!/bin/bash 
#Author:Sunxiang
tcp_conn_status(){
        TCP_STAT=$1
        ss -nat | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/tcp_conn.txt
        TCP_NUM=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2)
        if [ -z $TCP_NUM ];then
                TCP_NUM=0
        fi
        echo $TCP_NUM
}

main(){
        case $1 in
                tcp_status)
                        tcp_conn_status $2;
                        ;;
        esac
}

main $1 $2

5.1.5zabbix agent添加自定义监控项

zabbix agent添加自定义监控项并调用脚本获取到监控项数据

[root@zabbix-web-server1 ~]# vim /etc/zabbix/zabbix_agentd.conf 
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_status.sh "$1" "$2"

5.1.6zabbix server测试监控项数据

[root@zabbix-server ~]#/apps/zabbix_server/bin/zabbix_get -s 10.0.0.30 -p 10050 -k 'linux_status["tcp_status","LISTEN"]'
9

5.1.7自定义模版

5.1.7.1创建模版

5.1.7.2创建监控项

5.1.7.3调用模版

5.1.7.4查看调用情况

5.1.7.5创建图像

此时没有图形可以自己添加图形

不知道是不是这个版本有问题可以换个版本试试

5.1.7.6创建触发器

通过触发器可以显示告警信息

下面是一些之前设置的监控项的告警信息

5.1.8导入模版

5.1.8.1导入模版

5.1.8.2调用模版

5.1.8.3查看数据和图像

5.2监控memcache

5.2.1安装memcache

# apt-get install memcached nmap #ubuntu
# yum install memcached nmap #centos
# grep -v "#" /etc/memcached.conf | grep -v "^$"
-d
logfile /var/log/memcached.log
-m 512
-p 11211
-u memcache
-l 0.0.0.0
-P /var/run/memcached/memcached.pid

root@zabbix-node4:~# systemctl restart memcached
root@zabbix-node4:~# systemctl enable memcached

5.2.2监控脚本

vim /etc/zabbix/zabbix_agentd.d/memcache_monitor.sh
#!/bin/bash
#Author:Sunxiang
memcached_status(){
    M_PORT=$1
    M_COMMAND=$2
    echo -e "stats\nquit" | ncat  127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND" | awk '{print $3}'  #ubuntu使用ncat, 安装nmap
}

main(){
 case $1 in
   memcached_status)
     memcached_status $2 $3
       ;;
  esac
}

main $1 $2 $3

chmod a+x /etc/zabbix/zabbix_agentd.d/memcache_monitor.sh
bash memcache_monitor.sh memcached_status 11211 curr_connections
1

5.2.3zabbix agent添加自定义监控项

# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=memcache_status[*],/etc/zabbix/zabbix_agentd.d/memcache_monitor.sh "$1" "$2" "$3"

5.2.4zabbix server测试监控项数据

root@zabbix-server:~# /apps/zabbix_server/bin/zabbix_get -s 172.31.0.107 -p 10050 -k "memcache_status["memcached_status","11211","curr_connections"]"
1

5.2.5zabbix web制作模版

和上述的创建过程一样这里就不演示了

5.3监控Redis

5.3.1安装Redis服务

[root@zabbix-web-server1 ~]# yum install -y redis

#修改配置文件
[root@zabbix-web-server1 ~]# vim /etc/redis.conf 
[root@zabbix-web-server1 ~]# grep -Ev '^$|^#' /etc/redis.conf 
bind 0.0.0.0

#启动服务
[root@zabbix-web-server1 ~]# systemctl enable --now redis

5.3.2监控脚本

[root@zabbix-web-server1 ~]# vim /etc/zabbix/zabbix_agentd.d/redis_monitor.sh

#!/bin/bash
#Author:Sunxiang
redis_status(){
        R_PORT=$1
        R_COMMAND=$2
        (echo -en "INFO \r\n";sleep 1;) | ncat 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp
        REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
        echo $REDIS_STAT_VALUE 
}

help(){
        echo "${0} + redis_status + PORT + COMMAND"
}

main(){
        case $1 in
                redis_status)
                        redis_status $2 $3
                ;;
                *)
                        help
                ;;
                esac
}

main $1 $2 $3

#为脚本添加可执行权限
[root@zabbix-web-server1 ~]# chmod a+x /etc/zabbix/zabbix_agentd.d/redis_monitor.sh

#运行脚本
[root@zabbix-web-server1 ~]# bash /etc/zabbix/zabbix_agentd.d/redis_monitor.sh redis_status 6379 used_memory
/etc/zabbix/zabbix_agentd.d/redis_monitor.sh: line 6: ncat: command not found

#提示没有安装ncat
[root@zabbix-web-server1 ~]# yum install -y nmap-ncat.x86_64 

#再次运行脚本
[root@zabbix-web-server1 ~]# bash /etc/zabbix/zabbix_agentd.d/redis_monitor.sh redis_status 6379 used_memory
813440

5.3.3zabbix agent添加自定义监控项

[root@zabbix-web-server1 ~]# vim /etc/zabbix/zabbix_agentd.conf 
UserParameter=redis_status[*],/etc/zabbix/zabbix_agentd.d/redis_monitor.sh "$1" "$2" "$3"

[root@zabbix-web-server1 ~]# systemctl restart zabbix-agent.service

5.3.4zabbix server测试监控数据

[root@zabbix-server ~]#/apps/zabbix_server/bin/zabbix_get -s 10.0.0.30 -p 10050 -k "redis_status["redis_status","6379","used_memory"]"
/etc/zabbix/zabbix_agentd.d/redis_monitor.sh: line 6: /tmp/redis_6379.tmp: Permission denied
813440

##这里提示权限不足,两个方法,删除文件通过zabbix server测试生成一个新的zabbix属主主组的文件,另一个方法就是直接手动修改文件的属主属组
#修改属主
[root@zabbix-web-server1 ~]# chown zabbix.zabbix /tmp/redis_6379.tmp

#再次测试
[root@zabbix-server ~]#/apps/zabbix_server/bin/zabbix_get -s 10.0.0.30 -p 10050 -k "redis_status["redis_status","6379","used_memory"]"
813440

5.3.5zabbix web模版制作或导入

制作都一样,创建模版,创建监控项,主机调用模版,针对模版可以创建图形,还可以定义触发器。这里就不创建了,毕竟这个版本有bug创建不了图形

5.4监控Nginx

对nginx的活动连接和当前状态等运行状态进行监控

配置示例:
location /nginx_status {
 stub_status;
 allow 172.31.0.0/16;
 allow 127.0.0.1;
 deny all;
}

状态页用于输出nginx的基本状态信息:
 输出信息示例:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
上面三个数字分别对应accepts,handled,requests三个值
Reading: 6 Writing: 179 Waiting: 106
Active connections: 当前处于活动状态的客户端连接数,包括连接等待空闲连接数。
accepts:统计总值,Nginx自启动后已经接受的客户端请求的总数。
handled:统计总值,Nginx自启动后已经处理完成的客户端请求的总数,通常等于accepts,除非有因
worker_connections限制等被拒绝的连接。
requests:统计总值,Nginx自启动后客户端发来的总的请求数。
Reading:当前状态,正在读取客户端请求报文首部的连接的连接数。
Writing:当前状态,正在向客户端发送响应报文过程中的连接数。
Waiting:当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于 active –(reading+writing),

5.4.1部署Nginx服务

#直接yum安装了,如果编译安装需要./configure --with-http_stub_status_module开启状态页功能
[root@zabbix-web-server1 ~]# yum install -y nginx

#修改配置文件开启状态页
[root@zabbix-web-server1 ~]# vim /etc/nginx/conf.d/status.conf
server{
        listen 80;
        location /nginx_status{
                stub_status;
                allow 10.0.0.0/24;
        }

}

#检查一下配置是否正确
[root@zabbix-web-server1 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

#启动服务
[root@zabbix-web-server1 ~]# systemctl restart nginx.service 


5.4.2web访问测试

5.4.3监控项脚本

[root@zabbix-web-server1 ~]# vim /etc/zabbix/zabbix_agentd.d/nginx_status.sh
[root@zabbix-web-server1 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.sh
#!/bin/bash
#Author: Sunxiang
nginx_status_fun(){
    NGINX_PORT=$1
    NGINX_COMMAND=$2
    nginx_active(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
    }

    nginx_reading(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
    }

    nginx_writing(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
    }

    nginx_waiting(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
    }

    nginx_accepts(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
    }

    nginx_handled(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
    }

    nginx_requests(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
    }

    case $NGINX_COMMAND in
        active)
            nginx_active;
            ;;
        reading)
            nginx_reading;
            ;;
        writing)
            nginx_writing;
            ;;
        waiting)
            nginx_waiting;
            ;;
        accepts)
            nginx_accepts;
            ;;
        handled)
            nginx_handled;
            ;;
        requests)
            nginx_requests;
            esac
}

main(){
    case $1 in
        nginx_status)
            nginx_status_fun $2 $3;
            ;;
        *)
            echo $"Usage: $0 {nginx_status key}"
        esac
}

main $1 $2 $3

[root@zabbix-web-server1 ~]# chmod a+x /etc/zabbix/zabbix_agentd.d/nginx_status.sh

[root@zabbix-web-server1 ~]# bash -n /etc/zabbix/zabbix_agentd.d/nginx_status.sh

[root@zabbix-web-server1 ~]# bash /etc/zabbix/zabbix_agentd.d/nginx_status.sh nginx_status 80 active
1


5.4.3zabbix agnt添加自定义监控项

#这次不直接写在主配置文件中了,主配置文件中定义了子配置文件的路径
[root@zabbix-web-server1 ~]# vim /etc/zabbix/zabbix_agentd.conf 
Include=/etc/zabbix/zabbix_agentd.d/*.conf

#创建子配置文件
[root@zabbix-web-server1 ~]# vim /etc/zabbix/zabbix_agentd.d/UserParameter.conf
UserParameter=nginx_status[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh "$1" "$2" "$3"

#重启服务
[root@zabbix-web-server1 ~]# systemctl restart zabbix-agent.service 

5.4.4zabbix server检测监控项数据

[root@zabbix-server ~]#/apps/zabbix_server/bin/zabbix_get -s 10.0.0.30 -p 10050 -k "nginx_status["nginx_status",80,"active"]"
1


5.4.5导入Nginx监控模版

5.5SNMP监控

SNMP是英文”Simple Network Management Protocol”的缩写,中文意思是“简单网络管理协议,SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议,SNMP主要用于网络设备的管理。

SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。

SNMP协议是TCP/IP协议簇的一个应用层协议,在1988年被制定,并被Internet体系结构委员会(IAB,Internet Architecture Board)采纳作为一个短期的网络管理解决方案,由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能,SNMP的协议版本目前有SNMP v1、SNMP v2c和SNMP v3三种版本,其具体差别如下:

  • SNMP v1采用团体名(Community Name)认证,团体名用来定义SNMP NMS和SNMP Agent的关系,如果SNMP报文携带的团体名没有得到设备的认可,该报文将被丢弃,团体名起到了类似于密码的作用,用来限制SNMP NMS对SNMPAgent的访问。
  • SNMP v2c也采用团体名认证,它在兼容SNMP v1的同时又扩充了SNMP v1的功能,它提供了更多的操作类型(批量获取GetBulk和通知请求InformRequest)、支持更多的数据类型(Counter64等)、提供了更丰富的错误代码且能够更细致地区分错误。
  • SNMP v3提供了基于用户的安全模型(USM,User-Based Security Model)的认证机制,用户可以设置认证和加密功能,认证用于验证报文发送方的合法性,避免非法用户的访问,加密则是对NMS和Agent之间的传输报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为SNMP NMS和SNMP Agent之间的通信提供更高的安全性。

5.5.1SNMP组织结构

SNMP网络元素分为NMS和Agent两种:

  • NMS(Network Management Station,网络管理站)是运行SNMP客户端管理程序的工作站,能够提供非常友好的人机交互界面,方便网络管理员完成绝大多数的网络管理工作。
  • Agent是驻留在设备上的一个进程,负责接收、处理来自NMS的请求报文。在一些紧急情况下,如接口状态发生改变等,Agent也会主动通知NMS。

NMS是SNMP网络的管理者,Agent是SNMP网络的被管理者。NMS和Agent之间通过SNMP协议来交互管理信息。

5.5.2SNMP数据交互

SNMP管理进程与代理进程之前为了交互信息,定义了5种报文:

get-request操作:      从代理进程处提取一个或多个参数值。
get-response操作:     返回的一个或多个参数值。这个操作是由代理进程发出的。
trap操作:             代理进程主动发出的报文,通知管理进程有某些事情发生。
get-next-request操作: 从代理进程处提取一个或多个参数的下一个参数值。
set-request操作:      设置代理进程的一个或多个参数值

5.5.3SNMP组织结构

一套完整的SNMP系统主要包括以下几个方面:

SNMP报文协议。

管理信息结构(SMI, Structure of Management Information),一套公用的结构和表示符号。

管理信息库(MIB,Management Information Base),管理信息库包含所有代理进程的所有可被查询和修改的参数。

OID(Object Identifiers),一个OID是一个唯一的键值对,用于标识具体某一个设备的某个具体信息(对象标识),如端口信息、设备名称等。

5.5.4SNMP MIB

所谓(MIB)管理信息库,就是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合。MIB是基于对象标识树的,对象标识是一个整数序列,中间以”.”分割,这些整数构成一个树型结构,类似于 DNS或Unix的文件系统,MIB被划分为若干个组,如system、 interfaces、 a t(地址转换)和ip组等。iso . org . dod . internet.private . enterprises(1.3 .6 .1.4.1)这个标识,是给厂家自定义而预留的,比如华为的为1.3.6.1.4.1.2011,华三的为1.3.6.1.4.1.25506。

5.5.5基于Centos的SNMP

辞职状态,手头没有路由器交换机,就用Centos来模拟一下(注意:Centos监控的数据不怎么准确了解方法即可)

#下载
[root@Centos7test ~]# yum install -y net-snmp

#修改配置文件
[root@Centos7test ~]# vim /etc/snmp/snmpd.conf 
[root@Centos7test ~]# cat /etc/snmp/snmpd.conf | grep -Ev '^$|^#'
com2sec notConfigUser  default       sunxiang            #第一步:设置团体认密码,默认为public

group   notConfigGroup v1           notConfigUser
group   notConfigGroup v2c           notConfigUser       #第二步:将团体名称notConfigUser 关联至组notConfigGroup

view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1    
view    systemview    included   .1.3.6.1.4.1           #创建一个view,并对其授权可访问的OID范(centos的OID是这个前缀)

access  notConfigGroup ""      any       noauth    exact  systemview none none
syslocation Unknown (edit /etc/snmp/snmpd.conf)         #将组notConfigGroup关联至systemview 从而完成对组的授权

syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes


5.5.6SNMP OID

如何测试OID:
snmpwalk是SNMP的一个工具,它使用SNMP的GET请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。
要使用snmpwalk需要先安装net-snmp-utils软件包。

[root@zabbix-server ~]#yum install -y net-snmp-utils
[root@zabbix-server ~]# snmpwalk -h
USAGE: snmpwalk [OPTIONS] AGENT [OID]
–h:显示帮助。
–v:指定snmp的版本, 1或者2c或者3。
–c:指定连接设备SNMP密码。
–V:显示当前snmpwalk命令行版本。
–r:指定重试次数,默认为0次。
–t:指定每次请求的等待超时时间,单为秒,默认为3秒。
–l:指定安全级别:noAuthNoPriv|authNoPriv|authPriv。
–a:验证协议:MD5|SHA。只有-l指定为authNoPriv或authPriv时才需要。
–A:验证字符串。只有-l指定为authNoPriv或authPriv时才需要。
–x:加密协议:DES。只有-l指定为authPriv时才需要。
–X:加密字符串。只有-l指定为authPriv时才需要。

5.5.7测试SNMP数据采集

[root@zabbix-server ~]#snmpwalk -v 2c -c sunxiang 10.0.0.7 .1.3.6.1.4.1.2021.10.1.3.1
UCD-SNMP-MIB::laLoad.1 = STRING: 0.00
[root@zabbix-server ~]#snmpwalk -v 2c -c sunxiang 10.0.0.7 .1.3.6.1.4.1.2021.4.3.0
UCD-SNMP-MIB::memTotalSwap.0 = INTEGER: 2097148 kB


5.5.8Centos SNMP

参考网站:https://www.cnblogs.com/longlogs/p/11988623.html

CPU 负载:
1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3

内存使用:
Total Swap Size: .1.3.6.1.4.1.2021.4.3.0
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0

硬盘使用:
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1

系统信息:
sysDescr 1.3.6.1.2.1.1.1
sysObjectID 1.3.6.1.2.1.1.2
sysUpTime 1.3.6.1.2.1.1.3
sysContact 1.3.6.1.2.1.1.4
sysName 1.3.6.1.2.1.1.5

CPU 信息:
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0

5.5.9添加SNMP监控主机(zabbix自带SNMP模版)

5.5.9.1添加SNMP主机

5.5.9.2修改模版并添加到主机


5.5.9.3查看监控状态

5.6监控mysql

这里需要用到zabbix事件通知,所以如果不会配置事件通知请先跳过这部分内容查看6.3.1的内容

注意:正常情况下生产用的数据库和zabbix数据库是分离的,毕竟zabbix的IO和生产中访问数据库的IO都不小,对数据库的负载还是挺大的,但是我这边偷个懒就直接放一起了~

5.6.1实现mysql主从

##主服务器
#修改配置文件
[root@zabbix-mysql-master ~]# vim /etc/my.cnf
[mysqld]
log-bin=/data/log/mysql-bin
server_id=10

#重启服务(因为是跑脚本的没有写service文件)
[root@zabbix-mysql-master ~]# service mysqld restart 

#完全备份数据库(之前有zabbixserver的库)
[root@zabbix-mysql-master ~]# mysqldump -uroot -psunxiang -A -F --master-data=1 --single-transaction > /data/all.sql

#将备份后的文件发送到从服务器上
[root@zabbix-mysql-master ~]# scp /data/all.sql 10.0.0.30:/data
root@10.0.0.30's password: 
all.sql                  

#进入数据库创建用于主从复制的用户
[root@zabbix-mysql-master ~]# mysql -uroot -psunxiang
mysql> create user haha@'10.0.0.%' identified by 'sunxiang';
Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to haha@'10.0.0.%';
Query OK, 0 rows affected (0.00 sec)

#查看二进制日志节点
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |   143048 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)


##从服务器
#修改配置文件
[root@mysql_slave ~]# vim /etc/my.cnf
[mysqld]
server_id=30
relay-log = /var/lib/mysql/relay-log

#重启服务
[root@mysql_slave ~]# service mysqld restart 

#进入数据库关闭当前会话的二进制日志,准备数据恢复
[root@mysql_slave ~]# mysql -uroot -psunxiang

mysql> select @@sql_log_bin;
+---------------+
| @@sql_log_bin |
+---------------+
|             1 |
+---------------+
1 row in set (0.00 sec)

mysql> set sql_log_bin=0;

#导入数据库
mysql> source /data/all.sql;

#配置主从复制
CHANGE MASTER TO
  MASTER_HOST='10.0.0.10',
  MASTER_USER='haha',
  MASTER_PASSWORD='sunxiang',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=143048,
  MASTER_CONNECT_RETRY=10;

#启动主从复制
mysql> start slave;

#查看IO线程和SQL线程是否启动
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.0.10
                  Master_User: haha
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 2285885
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 2143157
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes


#在主服务器上创建一个数据库测试一下
mysql> create database test1;

#从服务器查看
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
| zabbix_server      |
| zabbixtest         |
+--------------------+
7 rows in set (0.00 sec)


5.6.2Procona监控Mysql

官方文档及下载地址:

https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html  #插件地址
https://www.percona.com/downloads/                  #安装包下载地址
https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/    #安装包下载地址
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html#installation-instructions #安装教程

5.6.2.1Mysql Master安装zabbix-agent

[root@zabbix-mysql-master ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

[root@zabbix-mysql-master ~]# yum clean all

[root@zabbix-mysql-master ~]# yum install -y zabbix-agent

[root@zabbix-mysql-master ~]# vim /etc/zabbix/zabbix_agentd.conf 
[root@zabbix-mysql-master ~]# grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.7
StartAgents=5
ServerActive=127.0.0.1
Hostname=10.0.0.10
Include=/etc/zabbix/zabbix_agentd.d/*.conf

[root@zabbix-mysql-master ~]# systemctl enable --now zabbix-agent.service 

[root@zabbix-mysql-master ~]# systemctl restart zabbix-agent.service

5.6.2.2Mysql Master安装Percona

修改zabbix agent启动用户为root,包括zabbix agent配置文件和服务启动文件。

#下载Percona Monitoring Plugins安装包
[root@zabbix-mysql-master ~]# wget https://downloads.percona.com/downloads/percona-monitoring-plugins/1.1.7/binary/redhat/7/x86_64/percona-zabbix-templates-1.1.7-1.noarch.rpm


#安装
[root@zabbix-mysql-master ~]# yum install -y percona-zabbix-templates-1.1.7-1.noarch.rpm

#复制监控配置文件到zabbi agent中
[root@zabbix-mysql-master ~]# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/

#安装php(注意如果使用的是ubunt或者centos8需要查看一下php版本,与过高的版本不兼容,需要安装php5.6)
[root@zabbix-mysql-master ~]# yum install php.x86_64 
[root@zabbix-mysql-master ~]# yum info php
Version     : 5.4.16

#创建mysql认证文件
[root@zabbix-mysql-master ~]# cat >  /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
<?php
$mysql_user = 'root';
$mysql_pass = '';
^C

[root@zabbix-mysql-master ~]# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
<?php
$mysql_user = 'root';
$mysql_pass = 'sunxiang';


经过测试发现centos7好像有问题,至少我做了几遍是没有成功,在Ubuntu上一次过,所以仅供参考,如果有那位同学成功了记得在留言板留言或者邮箱联系我谢谢!

#Ubuntu安装zabbix-agent,配置为mysql从服务器安装Percona
#安装Percona软件包:
root@ubuntu1804:~#wget https://downloads.percona.com/downloads/percona-monitoring-plugins/percona-monitoring-plugins-1.1.8/binary/debian/artful/x86_64/percona-zabbix-templates_1.1.8-1.artful_all.deb
root@ubuntu1804:~# dpkg -i percona-zabbix-templates_1.1.8-1.artful_all.deb
root@ubuntu1804:~# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
root@ubuntu1804:~# systemctl restart zabbix-agent

#安装php环境: 目前Percona与ubuntu 自带的php 7.2不兼容,需要安装php 5.6版本
root@ubuntu1804:~# add-apt-repository ppa:ondrej/php
root@ubuntu1804:~# apt-get -y update
root@ubuntu1804:~# apt install -y php5.6 php5.6-mysql

#创建mysql认证文件:
root@ubuntu1804:~# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf 件
<?php
$mysql_user = 'root';
$mysql_pass = '';

#测试脚本能否获取数据:
root@ubuntu1804:~# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
27


5.6.5.3在zabbix web上添加主机

5.6.5.4导入模版

Percona有自带的模版但是版本很老只支持zabbix3.0之前的版本,我这个5.0直接无法导入,这是自制的模版

5.6.5.6查看数据

5.0和4.0的图形化略有区别,但是大同小异,相信各位老哥都是稳的~

5.6.3自定义脚本监控Mysql

工具虽然功能强大不过属实有点鸡肋,监控的东西太多实际上有用的其实很少,反正我工作中就监控一下主从状态,内存,cpu,主从延迟完全可以通过编写脚本监本MySQL。毕竟监控的东西越多对zabbix 数据库的负载越大

5.6.3.1Mysql Slave安装zabbix agent

root@ubuntu1804:~#wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+bionic_all.deb

root@ubuntu1804:~#dpkg -i zabbix-release_5.0-1+bionic_all.deb

root@ubuntu1804:~#apt update

root@ubuntu1804:~#apt install -y zabbix-agent

root@ubuntu1804:~#vim /etc/zabbix/zabbix_agentd.conf
root@ubuntu1804:~# cat /etc/zabbix/zabbix_agentd.conf | grep -Ev '^$|^#'
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.7
ServerActive=127.0.0.1
Hostname=10.0.0.201
AllowRoot=1
User=root
Include=/etc/zabbix/zabbix_agentd.d/*.conf

root@ubuntu1804:~# systemctl restart zabbix-agent.service 


5.6.3.2脚本内容

root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# cat mysql_status.sh 
#!/bin/bash
#Date:2021/12/23
#Author: Sunxiang
Seconds_Behind_Master(){
YS=`mysql -uroot -e "show slave status\G;" | grep "Seconds_Behind_Master:" | awk -F: '{print $2}'`              #我这个数据库在slave设备上可以没有密码登录,根据实际情况进行修改
echo $YS
}

master_slave_check(){
IOS=`mysql -uroot -e "show slave status\G;" | grep "Slave_IO_Running" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`
SQLS=`mysql -uroot -e "show slave status\G;" | grep "Slave_SQL_Running:" | awk -F: '{print $2}' | sed 's/^[ \t]*//g'`

if test $IOS == "Yes" && test $SQLS == "Yes";then
    echo 50
else
    echo 100
fi
}

main(){
    case $1 in
        Seconds_Behind_Master)
            Seconds_Behind_Master;
            ;;
        master_slave_check)
            Master_Slave_Check;
            ;;
        esac
}

main $1

root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# chmod a+x mysql_status.sh 
#测试一下
root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# bash mysql_status.sh Seconds_Behind_Master
0

root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# bash mysql_status.sh Master_Slave_Check
50

5.3.6.3自定义监控项配置

#直接写在子配置文件中了
root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# vim mysql_status.conf
UserParameter=mysql_status[*],/etc/zabbix/zabbix_agentd.conf.d/mysql_status.sh "$1"

root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# systemctl restart zabbix-agent.service 

#在zabbix-server上测试
[root@zabbix_server ~]# zabbix_get -s 10.0.0.201 -p 10050 -k "mysql_status[Seconds_Behind_Master]"
0

[root@zabbix_server ~]# zabbix_get -s 10.0.0.201 -p 10050 -k "mysql_status[Master_Slave_Check]"
50

5.3.6.4自定义模版

5.3.6.4.1创建模版

5.3.6.4.2创建监控项

5.3.6.4.3创建触发器

5.3.6.4.4创建图像

5.3.6.5模版关联至主机

5.3.6.6观察数据

5.3.6.7模拟故障,使zabbix发送邮件执行命令

#从服务器停止主从服务
mysql> stop slave;