Zabbix

环境搭建

Zabbix简介

	在企业网络运维过程中,运维工程师必须随时关注各服务器和网络的运行状况,以便及时发现问题,尽可能减少故障的发生。当网络中的设备,服务器等数量较多时,为了更加方便,快捷的获得监控信息,通常会借助于一些集中监测软件。就目前而言,有服务器的地方就少不了监控系统,所以行业内就有一句俗话叫"无监控,不运维"∵
	Zabbix是一个基于web界面的企业级开源监控软件由C语言编写,提供分布式系统监控与网络监控功能,具备主机的性能监控,网络设备性能监控,数据库性能监控,多种告警方式,详细报表,图表的绘制等功能。检测的对象可以是linux或windows服务器,也可以是路由器,交换机等网络设备,通过SNMP(简单网络管理协议),zabbix agent,ping,端口监视等方法提供对远程网络服务器等监控数据收集等功能,并提供通知机制使系统管理员可以快速定位,解决系统中存在的各种问题,官方网址是http://www.zabbix.com
	
	Zabbix通过C/S模式采集数据,通过B/S模式在 web端展示和配置
	Server端:通过收集SNMP 和 agent发送的数据,写入 MySQL 数据库,再通过php+nginx在 web 前端展示
	被监控端:主机安装agent方式采集数据,网络设备通过SNMP方式采集数据

zabbix监控原理


Zabbix_第1张图片

zabbix架构图

Zabbix_第2张图片

组件说明:
zabbix server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据都由它组织进行
database storage:专用于存储所有配置信息,以及由zabbix收集的数据
web interface: zabbix的图形接口
proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力
agent:部署在被监控的主机上,负责收集主机本地数据如 cpu、内存、数据库等数据发往server端或proxy端


<<< 记
监控流程:
	agentd 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbixserver端, zabbix server将数据存储到数据库中, zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:
	主动模式: agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxye
	被动模式: server向agent请求获取监控项的数据, agent返回数据。
	zabbix运行条件:
		Server:
			Zabbix Server 需要运行在LAMP环境下,对硬件要求低
		Agent:
			目前已有的agent基本支持市面常见的OS,包含Linux、HP (Unix>、Oracle (Solaris)windows
等
		SNMP:
			支持各类常见的网络设备;
>>>

zabbix的监控架构
	在实际监控架构中, zabbix根据网络环境、监控规模等分了三种架构: server-client 、master-node-client、server-proxy-client三种。
1、server-client架构
	也是zabbix的最简单的架构,监控机和被监控机之间不经过任何代理,直接由zabbixserver和zabbix agentd 之间进行数据交互。适用于网络比较简单,设备比较少的监控环境(500台以内)
2、server-proxy-client架构	
	其中 proxy 是server、client之间沟通的一个桥梁,proxy本身没有前端,而且其本身并不存放数据,只是将agentd 发来的数据暂时存放,而后再提交给server 。一般适用于跨机房、跨网络的中型网络架构的监控(上千台)。
3、master-node-client 架构
	该架构是zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境。每个node同时也是一个server端,node下面可以接proxy,也可以直接接client 。node有自已的配置文件和数据库,其要做的是将配置信息和监控数据向master同步(上万台)。
	
	优点
	开源,不花钱
	设备性能要低
	支持设备多
	支持分布式集中管理
	开放式接口,扩展性强
	缺点
	无厂家支持,出现问题解决比较麻烦
	需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据据很大,瓶颈主要在数据库。

zabbix_get_gateway
	zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。


架构图最简单的一种server-client架构(500台以内)

​ agent

Server agent

​ agent

注释:就是一个Server管理多个agent端

第二种server-proxy-client架构 (上千台)

​ agent

​ proxy agent

Server

​ proxy agent

​ agent

​ 注释:就是Server管理proxy端,proxy代理再去管理agent

第三种master-node-client(上万台)

Zabbix_第3张图片

Grafana简介:
	Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和 OpenTSDB.作为数据源。以 InfluxDB(由go语言编写,是一个开源,分布式,时间序列,事件,可度量和无外部依赖的数据库)作为底层数据库;
	Grafana,主要特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;多个数据源。

zabbix功能
	数据采集
		可用性和性能检查
		支持SNMP 
		(trapping或polling),IPMI,JMX,..Mware.的监控
		自定义检测。
		按照自定义时间间隔收集所需数据
		通过server / proxy和 agent 来执行监控。
	灵活阙值定义
		可以定义灵活的问题阈值,称为触发器(triggers),从后端数据库调用数值
	高度可配置的告警
		可以自定义警告升级(escalation),接受者及告警方式。
		告警信息可以配置并允许使用宏(macro)变量
		通过远程命令实行自动化动作(action)
	实时绘图
		通过内置的绘图方法实现监控数据实时绘图,
	Web监控能力
		Zabbix可以模拟鼠标单击网站并检查其功能性和响应时间。
	广泛的可视化选项。
		能够创建自定义图表,可以组合多个项到一个单一的视图中网络拓扑。
		自定义屏幕和侧边栏作为仪表盘( dashboard)样式显示报告,
		监视资源的高级视图(商业)。
	历史存储
		用数据库来存储数据
		配置历史,
		内置的管理程序
	容易配置
		添加监控设备作为主机。
		一旦在数据库中,主机即可被监控
		将模版应用到监控监控设备。
	使用模板
		模版中的可以组监控
		模版中可以继承其他模版
	网络发现
		网络设备的自动发现。
		代理(agent)自动注册
		自动发现文件系统,网络接口,SNMP OID 。
	快速的web接口
		Web前端采用php编写
		按照自定义的方式单击审计日志
	Zabbix API
		Zabbix API 提供可编程接口面向 Zabbix.大规模操作,方便第三方软件集成,
		安全的用户认证,
	权限系统
		某些用户可以受限于某些试图
	功能齐全且易于扩展的代理(agent) 
		部署在监控目标上,
		Linux和 windows上都可以部署
		用C语言写的,高性能且内存占用小。 
	二进制守护进程
		可移植
	通过使用zabbix proxy可以轻松进行远程监控。


主机:被监控的服务器的信息
主机组: 多个同种类型的主机集合

环境准备

cs-7 server
cs-7 agent
win10 agent

安装nginx

yum -y install pcre-devel zlib-devel openssl-devel  elinks   
#安装nginx相关依赖

#“pcre-devel 是使用PCRE做二次开发时所需要的开发库,包括头文件等,这也是编译Nginx所必须使用的
#zlib-devel库
#用于编译的时候连接的库之类的文件
#文本浏览器;
#是一套含IP数据库的软件工具


useradd  -M -s /sbin/nologin nginx  
#创建nginx启动用户但不创建家目录并把shell环境改为sbin/nologin

tar xf nginx-1.23.1.tar.gz  
#解压nginx软件包

mkdir /opt/nginx   
#创建nginx安装目录

chown -R nginx.nginx /opt/nginx    
#递归修改/opt/nginx的属主属组为nginx

cd nginx-1.23.1    
#进入解压好nginx软件包中

./configure \
--prefix=/opt/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_gzip_static_module

make && make install  
#编译二进制安装nginx

ls /opt/nginx/
#查看nginx是否安装成功

#创建nginx软链接显示创建过程,并把创建好的链接,链接到usr/local/bin/下

ln -sv /opt/nginx/sbin/nginx /usr/local/bin/    

ll  /usr/local/bin/nginx
#确认源文件链接到目标目录
nginx -t
#检测nginx配置文件是否有问题
nginx
#启动nginx
ps aux|grep nginx     
#检测nginx服务是否启动成功

安装mysql 8(zabbix5.0 可基于mysql5.7,zabbix6.0基于mysql8)

cd   
#返回root家目录

yum -y install libaio  
#安装mysql 8相关依赖

#curl -sO https://repo.mysql.com//mysql80-community-release-el7-5.noarch.rpm


rpm -ivh mysql80-community-release-el7-5.noarch.rpm    
#安装mysql软件包并显示进度和详细过程
yum clean all     
#清除yum缓存
yum makecache   
#建立yum缓存
#yum install -y mysql-community-server mysql-community-devel 
#安装mysql8版本,用yum网络安装

yum localinstall -y  ./*.rpm     
#安装mysql8版本

vim /etc/my.cnf     
#编辑mysql主配文件d

[mysqld]
skip_ssl
#开启HTTPS后会出现内存不足,那是因为,在开启HTTPS访问时会在Apache中新开了一个开放了443端口的虛拟机。为了性能,通常我们会禁用SSL
datadir=/var/lib/mysql        
#mysql数据存放位置
socket=/var/lib/mysql/mysql.sock  
#mysql.sock套接字文件存放位置
log-error=/var/log/mysqld.log    
#mysql错误日志文件存放位置
pid-file=/var/run/mysqld/mysqld.pid  
#mysqldip

systemctl start mysqld  
#启动mysqld

 ps aux|grep mysqld     
 #查看mysqld进程
 


mysql -uroot -p$(cat /var/log/mysqld.log  | grep password | awk -F"root@localhost: " '{print $2}')
 #查看mysqld日志文件过滤mysqld密码并将其文件中第二行内容打印出来(直接登录mysqld中)


ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Admin.123';
#登录mysqld后更改数据库密码,密码为Admin.123


create database zabbix character set utf8mb4 collate utf8mb4_bin;
#创建名为zabbix的数据库,库的编码格式为utf8


create user 'zabbix'@'%' identified by 'Zabbix.123';
#创建名为zabbix的mysql用户并允许所有主机进行访问,用户名密码为Zabbix.123


grant all privileges on zabbix.* to 'zabbix'@'%';
#给zabbix用户授对zabbix数据库中的所有表有所有权限

\q  
#退出mysqld


#zabbix5.0创建数据库
在这里插入图片描述

安装php

yum -y install gcc-c++ libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel gd sqlite sqlite-devel net-snmp-devel oniguruma oniguruma-devel perl perl-devel httpd-devel libevent-devel fping
#安装PHP相关依赖
yum -y remove libzip      
#删除系统自带的libzip软件包

#wget  https://libzip.org/download/libzip-1.2.0.tar.gz


tar xf libzip-1.2.0.tar.gz 
#解压libzip软件包,一个c仓库

cd libzip-1.2.0   
#进入到解压好的libzip软件包中

./configure 
#检测环境是否有问题

make && make install    
#编译二进制并安装

vim /etc/profile  
#编辑编辑profile配置文件 (在配置文件的末行插入)
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"  
#将mysql相关命令追加到全局变量中使系统能够识别

. /etc/profile  
#重读全局变量

source /etc/profile 
#重读配置文件

useradd -r -s /bin/nologin www  
#创建启动php www用户和用户家目录,并将shell环境改为 /bin/nologin

id www   
#查看确认

提示:cd返回家目录

tar xf php-7.4.30.tar.xz  
#解压php软件包

cd php-7.4.30   
#进入到解压好的php软件包中

#编译
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--enable-fpm \
--with-bz2 \
--enable-gd \
--with-mysqli=mysqlnd \
--enable-mysqlnd \
--with-jpeg \
--with-freetype \
--with-zlib-dir \
--with-iconv-dir=/usr/local/ \
--enable-soap \
--enable-ftp \
--enable-mbstring \
--enable-exif \
--with-curl \
--enable-bcmath \
--enable-sockets \
--enable-calendar \
--with-gettext \
--with-pdo-mysql=mysqlnd \
--disable-fileinfo \
--with-ldap \
--with-openssl \
--with-pear \
--with-xmlrpc \
--with-libdir=lib64 \
--with-pcre-jit \
--with-pear \
--with-xsl \
--with-zlib \
--with-mhash \
--enable-inline-optimization \
--enable-mbregex \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-xml \
--with-zip

make  
#将文件编译成二进制
make install   
#安装


cp /root/php-7.4.30/php.ini-production /usr/local/php/lib/php.ini 
#将php配置文件拷贝到 /usr/local/php/lib/并取名为php.ini

vim /usr/local/php/lib/php.ini   
#编辑php主配文件
max_execution_time = 300      
max_input_time = 300
memory_limit = 128M
post_max_size = 32M
upload_max_filesize = 2M
max_file_uploads = 20
extension=bcmath.so   
#950
date.timezone = Asia/Shanghai  
#定义mysql时区(962)
mysqli.default_port = 3306
#mysql默认端口
mysqli.default_socket = /var/lib/mysql/mysql.sock
#mysql套接字文件(1165)

cp /usr/local/php/etc/php-fpm.conf.default  /usr/local/php/etc/php-fpm.conf
#将php-fpm.conf.default改为php-fpm.conf 


vim /usr/local/php/etc/php-fpm.conf 
#编辑php进程主配置文件
pid = run/php-fpm.pid  
#将其注释打开
#将www.conf.default改为www.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default  /usr/local/php/etc/php-fpm.d/www.conf
#PHP进程相关的
vim /usr/local/php/etc/php-fpm.d/www.conf    
#编辑www.conf(用户)配置文件
user = www 
#启动服务的用户
group = www  
#启动服务的组
listen = 0.0.0.0:9000  
#允许所有主机访问php的9000端口

ln -sv /usr/local/php/bin/* /usr/local/bin/  
#创建软链接将php所有命令链接到 /usr/local/bin/下并显示创建过程

ln -sv /usr/local/php/sbin/* /usr/local/sbin/
#创建软链接,并显示创建过程
php-fpm -c /usr/local/php/lib/php.ini -y /usr/local/php/etc/php-fpm.conf   
#启动php
php -fpm 
#启动php,2种都可
ps aux|grep php   
#查看php进程
netstat -anpt|grep 9000 
#过滤9000 端口是否开启

整合nginx和php

vim /opt/nginx/conf/nginx.conf 
#编辑nginx主配置文件

    location / {
        root   html;
        index  index.php index.html index.htm;    #添加index.php页面
    }

       location ~ \.php$ {    
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /opt/nginx/html$fastcgi_script_name;  #将其他注释打开只改这行
            include        fastcgi_params;
       }



killall nginx  
#杀死nginx
nginx -t
#查看nginx配置文件是否有问题
nginx 
#启动nginx
ps aux|grep nginx  
#查看nginx进程



#安装zabbix
注:cd 返回root家目录
tar xf zabbix-6.0.7.tar.gz     
#解压zabbix软件包
cd zabbix-6.0.7/
#进入到解压要zabbix软件包中

./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
#编译
make   
#编译二进制文件
make install   
#安装azbbix



#将zabbix所需的数据导入到数据库中


mysql -uzabbix -pZabbix.123 zabbix < /root/zabbix-6.0.7/database/mysql/schema.sql 

mysql -uzabbix -pZabbix.123 zabbix < /root/zabbix-6.0.7/database/mysql/images.sql

mysql -uzabbix -pZabbix.123 zabbix < /root/zabbix-6.0.7/database/mysql/data.sql 



useradd -M -s /sbin/nologin zabbix    
#创建zabbix启动用户但不创建家目录,并将shell环境改为sbin/nologin

chown -R zabbix.zabbix /usr/local/zabbix/   
#递归修改zabbix的属主属组

id zabbix  
#查看zabbix的属主属组

mkdir /usr/local/zabbix/logs   
#创建zabbix日志目录

chown -R zabbix.zabbix /usr/local/zabbix/logs/  
#再次递归修改zabbix的属主属组



cp -p /usr/local/zabbix/etc/zabbix_server.conf{,.bak}  
#备份zabbix主配置文件,并保持文件原权限

cp -p /usr/local/zabbix/etc/zabbix_agentd.conf{,.bak}  
#备份zabbix被监控端主配置文件,并保持文件原权限



vim /usr/local/zabbix/etc/zabbix_server.conf    
#编辑zabbix主配置文件

LogFile=/usr/local/zabbix/logs/zabbix_server.log    
#zabbix日志文件存放位置

PidFile=/tmp/zabbix_server.pid
#zabbixpid存放位置

DBHost=192.168.1.7   
#指定连接数据库的主机ip

DBName=zabbix   
#数据库名称

DBUser=zabbix  
#连接数据库用户

DBPassword=Zabbix.123  
#连接数据用户密码

DBSocket=/var/lib/mysql/mysql.sock     #存放数据库套接字文件位置

Timeout=4

LogSlowQueries=3000

Include=/usr/local/etc/zabbix_server.conf.d/*.conf



vim /usr/local/zabbix/etc/zabbix_agentd.conf   
#编辑zabbix被监控端主配置文件

LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
#被监控端 zabbix日志文件存放位置

Server=192.168.1.7  
#指定被监控端的ip

ServerActive=192.168.1.7  
#指定serveractive ip

Hostname=localhost   
#指定主机名

Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf



mkdir /usr/local/etc/zabbix_server.conf.d   
#创建zabbix主配置目录

mkdir /usr/local/etc/zabbix_agentd.conf.d  
#创建被监控端zabbix主配置目录

cp -ar /root/zabbix-6.0.7/ui /opt/nginx/html/  
#将zabbix页面拷贝到/opt/nginx/html/ 下

chown -R nginx.nginx /opt/nginx/html/ui    
#递归修改nginx的属主属组

/usr/local/zabbix/sbin/zabbix_server     
#启动zabbix服务

/usr/local/zabbix/sbin/zabbix_agentd   
#启动zabbix被监控端

ps aux|grep zabbix    
#查看zabbix进程

浏览器访问:http://192.168.1.128/ui/

Zabbix_第4张图片
Zabbix_第5张图片
Zabbix_第6张图片
Zabbix_第7张图片
Zabbix_第8张图片
Zabbix_第9张图片

mv zabbix.conf.php /opt/nginx/html/ui/conf/zabbix.conf.php   
#将下载的zabbix.conf.php文件移动到/opt/nginx/html/ui/conf/下

chown -R nginx.nginx /opt/nginx/html/ui 
#递归修改ui目录的属主属组改为nginx

注意这里得用xshell,
用FinalShell会有问题

Zabbix_第10张图片
在这里插入图片描述
Zabbix_第11张图片
添加自身为被监控机
Zabbix_第12张图片
Zabbix_第13张图片
等5分钟刷新
Zabbix_第14张图片
解决乱码
Zabbix_第15张图片
Zabbix_第16张图片
zabbix页面优化
Zabbix_第17张图片
Zabbix_第18张图片

zabbix监控网络服务

zabbix监控windows

Zabbix_第19张图片
Zabbix_第20张图片
Zabbix_第21张图片
Zabbix_第22张图片
Zabbix_第23张图片
测试是否安装成功
Zabbix_第24张图片
Zabbix_第25张图片

zabbix服务端配置
Zabbix_第26张图片
在这里插入图片描述
Zabbix_第27张图片
Zabbix_第28张图片
Zabbix_第29张图片

如果监控不到,有可能是windos被监控端的端口没有开,或者是windos的防火墙开着,也有可能是windos的杀毒软件开着呢

再服务端启动nginx php zabbix后访问:http://192.168.1.128/ui/

Zabbix监控网络设备

安装GNS,用来模拟网络设备的
Zabbix_第30张图片
Zabbix_第31张图片

Zabbix_第32张图片
在这里插入图片描述
Zabbix_第33张图片
有提示错误取消就可以了
Zabbix_第34张图片
Zabbix_第35张图片

Zabbix_第36张图片
Zabbix_第37张图片

Zabbix_第38张图片

Zabbix_第39张图片
在这里插入图片描述
Zabbix_第40张图片

在这里插入图片描述
Zabbix_第41张图片
选择OK
Zabbix_第42张图片
Zabbix_第43张图片

Zabbix_第44张图片
Zabbix_第45张图片
Zabbix_第46张图片
Zabbix_第47张图片
Zabbix_第48张图片
Zabbix_第49张图片
Zabbix_第50张图片
Zabbix_第51张图片
配置路由

在这个输入
conf t
int f0/0
配置一个ip,这个ip没有人用,而且和zabbix Server是同一网段
ip add 192.168.5.111 255.255.255.0
no sh
#开启网络设备
exit 
no ip routing
snmp-server community centos RO
snmp-server enable traps
snmp-server host 192.168.5.128 centos

Zabbix_第52张图片

在zabbix添加设备
Zabbix_第53张图片
在这里插入图片描述
Zabbix_第54张图片
Zabbix_第55张图片

Zabbix_第56张图片
Zabbix_第57张图片

Zabbix_第58张图片
Zabbix_第59张图片
Zabbix_第60张图片
在这里插入图片描述
Zabbix_第61张图片

zabbix监控linux主机

[root@li ~]# scp zabbix-6.0.7.tar.gz [email protected]:/root/

192.168.1.128 监控端
192.168.1.129 被监控端

#在被监控端执行
yum -y install libxml2-devel libcurl-devel pcre-devel ntpdate 
#安装zabbix相关依赖
tar xf zabbix-6.0.7.tar.gz   
#解压zabbix软件包
cd zabbix-6.0.7/ 
#进入到解压好的软件包中
#编译
./configure --prefix=/usr/local/zabbix --enable-agent --with-net-snmp --with-libcurl --with-libxml2  
make   
#编译二进制
make install  
#安装zabbix
cp /root/zabbix-6.0.7/misc/init.d/tru64/zabbix_agentd /etc/init.d/    //复制启动脚本
vim /etc/init.d/zabbix_agentd    
#编译被监控端主配置文件
DAEMON=/usr/local/zabbix/sbin/zabbix_agentd  
//更改为安装路径
chmod +x /etc/init.d/zabbix_agentd   
//添加执行权限
useradd -M -s /sbin/nologin zabbix      
//创建程序用户
chown -R zabbix:zabbix /usr/local/zabbix/	
//授权安装目录
mkdir /usr/local/zabbix/logs  
#创建被监控端日志目录
chown -R zabbix:zabbix /usr/local/zabbix/logs  
#递归修改logs目录的属主,属组;改为zabbix
cp /usr/local/zabbix/etc/zabbix_agentd.conf{,.bak}  
#备份被监控端主配置文件
vim /usr/local/zabbix/etc/zabbix_agentd.conf   
#编辑被监控端的主配置文件
PidFile=/tmp/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.1.7
ServerActive=192.168.1.7
Hostname=localhost
Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
mkdir /usr/local/etc/zabbix_agentd.conf.d
/etc/init.d/zabbix_agentd start		
#启动agent客户端
netstat -anptl|grep 10050    
#过滤其端口

zabbix邮件报警

Zabbix自定义监控项

自定义监控项过程:
创建项目、触发器、图形,验证监控效果;

自定义简介
	以上关联的 Linux by Zabbix agent模板基本涵盖了所有系统层面的监控,包括了我们最关注的几项: ping、load、cpu使用率、memory、disk、网卡流量等等,当然有些触发器的阀值可能需要根据服务器的自身情况进行修改。

下面添加自定义服务器内存使用检测项,在此配置一个监控项为:内存使用70M进行警告提醒:
1.修改客户端zabbix_agentd.conf 配置文件,最后一行添加:UserParameter=memory_userd,free -mlgrep Memlawk '{print $3}'
介绍:
语法:UserParameter=key,shell command
监控key值: memory_userd, key值可以随意编写,但是一会需要在 web页面创建监控项时指定key值;
Shell命令或脚本: free -m|grep Mem|awk '{print $3}'
注:在zabbix_server端可以使用zabbix_get -s agent端ip地址 -p 10050 -k key 名通过此命令可以查看agent端key的监控值;


zabbix监控linux主机

被监控端执行
rz zabbix-6.0.7.tar.gz
yum -y install libxml2-devel libcurl-devel pcre-devel ntpdate
tar xf zabbix-6.0.7.tar.gz
cd zabbix-6.0.7
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
make
#编译
make install
#安装
cp /root/zabbix-6.0.7/misc/init.d/tru64/zabbix_agentd /etc/init.d/
#复制启动脚本
vim /etc/init.d/zabbix_agentd
DAEMON=/usr/local/zabbix/sbin/zabbix_agentd
#更改为安装路径
chmod +x /etc/init.d/zabbix_agentd
#添加执行权限
useradd -M -s /sbin/nologin zabbix
#创建程序用户
chown -R zabbix:zabbix /usr/local/zabbix/
#授权安装目录
mkdir /usr/local/zabbix/logs
chown -R zabbix:zabbix /usr/local/zabbix/logs
cp /usr/local/zabbix/etc/zabbix_agentd.conf{,.bak}
vim /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/tmp/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Server=192.168.1.128
#zabbix服务端ip
ServerActive=192.168.1.128
#zabbix服务端ip
Hostname=localhost
#本机的主机名
Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
mkdir /usr/local/etc/zabbix_agentd.conf.d
/etc/init.d/zabbix_agentd start
/启动 agent客户端
netstat -anotl|grep 10050
#agent端配置
vim /usr/local/zabbix/etc/zabbix_agentd.conf
UserParameter=memory_userd,free -m|grep Mem|awk '{print $3}'
/etc/init.d/zabbix_agentd restart
[root@localhost ~]# /etc/init.d/zabbix_agentd stop
[root@localhost ~]# /etc/init.d/zabbix_agentd start
restart
#Server端测试获取信息
/usr/local/zabbix/bin/zabbix_get -s 192.168.1.129 -k memory_userd

Zabbix_第62张图片
Zabbix_第63张图片
等待5分钟
在这里插入图片描述

自定义监控

Zabbix_第64张图片
Zabbix_第65张图片
Zabbix_第66张图片
Zabbix_第67张图片

Zabbix_第68张图片
Zabbix_第69张图片
Zabbix_第70张图片
Zabbix_第71张图片
Zabbix_第72张图片
Zabbix_第73张图片
Zabbix_第74张图片

Zabbix_第75张图片

Zabbix_第76张图片
Zabbix_第77张图片
Zabbix_第78张图片
Zabbix_第79张图片
Zabbix_第80张图片
Zabbix_第81张图片
Zabbix_第82张图片
Zabbix_第83张图片
在这里插入图片描述

zabbix邮件报警

Zabbix_第84张图片
Zabbix_第85张图片
Zabbix_第86张图片
Zabbix_第87张图片
手机发送短信
Zabbix_第88张图片
Zabbix_第89张图片
Zabbix_第90张图片
Zabbix_第91张图片

Zabbix_第92张图片
Zabbix_第93张图片

Zabbix_第94张图片
Zabbix_第95张图片

在这里插入图片描述
Zabbix_第96张图片
Zabbix_第97张图片
Zabbix_第98张图片
Zabbix_第99张图片
在这里插入图片描述
利用邮件smtp协议进行邮件报警
Zabbix_第100张图片
Zabbix_第101张图片
Zabbix_第102张图片

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障已恢复!
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

Zabbix_第103张图片

停止zabbix server服务的agent查看邮箱效果(等待10分钟)
[root@localhost ~]# /etc/init.d/zabbix_agentd stop

kill `ps auxgrep zabbix_agent[awk '{print $2}'`
/etc/init.d/zabbix_agentd start

在这里插入图片描述
Zabbix_第104张图片
Zabbix_第105张图片

利用脚本进行邮件报警

#在服务端执行,Zabbix Server端
yum -y install mailx dos2unix
[root@li ~]# vim /etc/mail.rc 
set from=[email protected] smtp=smtp.163.com
set smtp-auth-user=[email protected] smtp-auth-password=GCTRELGEYWOTBHRZ
set smtp-auth=login
#添加到文件末尾
[root@li ~]# echo "aaaa"|mail -s "test mail" [email protected]
#测试
[root@li ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
AlertscriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
#在最后一行添加,这个是邮件报警脚本目录路径

vim /usr/local/zabbix/share/zabbix/alertscripts/mail.sh
#编写报警邮件脚本,调整mail命令语法位置,使用dos2unix命令转换字符,避免收到邮件不显示正常邮件内容而出现ATTO0001.bin的错误;
#邮件报警脚本
#!/bin/bash
#export.UTF-8
bt=$2
#定义发送标题
sjr=$1
#定义收件人
FILE=/tmp/mailtmp.txt
#定义文件路径
echo "$3" >$FILE
/usr/bin/dos2unix -k $FILE
#使用dos2unix命令转换字符,避免收到邮件不显示正常邮件内容出现ATT001.bin的错误
/bin/mail -s "$bt" "$sjr" <$FILE
#执行发送邮件



chown zabbix.zabbix /usr/local/zabbix/share/zabbix/alertscripts/mail.sh
chmod 777 /usr/local/zabbix/share/zabbix/alertscripts/mail.sh
touch /tmp/mailtmp.txt
chmod 777 /tmp/mailtmp.txt
chown zabbix.zabbix /tmp/mailtmp.txt
/usr/local/zabbix/share/zabbix/alertscripts/mail.sh [email protected] "test mail2" "test mail zabbix"
#测试脚本是否成功

配置zabbix监控邮件报警
操作思路
操作思路
监控--创建报警媒介类型--更新用户使用的报警媒介类型--创建动作(根据触发器触发)--验证;

Zabbix_第106张图片

输入创建的报警媒介类型的名称,指定类型为脚本的方式,并且输入zabbix_server端/usr/local/zabbix/share/zabbix/alertscripts目录下的脚本名称,确保脚本的归属是zabbix,并且脚本的权限是777,下边设置脚本参数,也就是发送邮件的语法:脚本收件人标题内容,必须严格按照此标准填写;
三个脚本参数如下
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

在这里插入图片描述

在这里插入图片描述
Zabbix_第107张图片
可以测试一下
Zabbix_第108张图片

在这里插入图片描述

Zabbix_第109张图片
Zabbix_第110张图片

Zabbix_第111张图片
Zabbix_第112张图片
Zabbix_第113张图片
Zabbix_第114张图片
Zabbix_第115张图片
在这里插入图片描述
Zabbix_第116张图片
Zabbix_第117张图片
Zabbix_第118张图片
Zabbix_第119张图片

Zabbix_第120张图片

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障已恢复!
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

Zabbix_第121张图片
在这里插入图片描述

停止zabbix server服务的agent查看邮件效果(等待10分钟)
[root@localhost ~]# /etc/init.d/zabbix_agentd stop

Zabbix_第122张图片
Zabbix_第123张图片

开启zabbix server服务的agent查看邮件效果(等待10分钟)
[root@localhost ~]# /etc/init.d/zabbix_agentd start

在这里插入图片描述

zabbix钉钉报警

基于钉钉机器人实现钉钉报警

Zabbix_第124张图片

Zabbix_第125张图片

Zabbix_第126张图片
Zabbix_第127张图片
钉钉需要三个人才能成群
Zabbix_第128张图片
Zabbix_第129张图片

Zabbix_第130张图片

Zabbix_第131张图片

Zabbix_第132张图片
Zabbix_第133张图片
Zabbix_第134张图片
Zabbix_第135张图片

https://oapi.dingtalk.com/robot/send?access_token=09431b2cffffeb9a735955f53f790fd2697ba6c6dc2fd23d10598c13c38ffc14

Server执行

#脚本格式及先后顺序必须这样写负责会报错,这个脚本写到服务端
cat /usr/local/zabbix/share/zabbix/alertscripts/dingding.sh
vim /usr/local/zabbix/share/zabbix/alertscripts/dingding.sh

#!/bin/bash
to="$1"
subject="$2"
text="$3"
/usr/bin/curl 'https://oapi.dingtalk.com/robot/send?access_token=09431b2cffffeb9a735955f53f790fd2697ba6c6dc2fd23d10598c13c38ffc14' \
 -H 'Content-Type: application/json' \
 -d '
{
    "msgtype":"text",
    "text": {
        "content":"'"$text"'"
    },
    "at": {
        "atMobiles":[
            "15128878379"
        ],
        "isAtAll": true
    }
}'

chown zabbix.zabbix /usr/local/zabbix/share/zabbix/alertscripts/dingding.sh 
chmod +x /usr/local/zabbix/share/zabbix/alertscripts/dingding.sh

Zabbix_第136张图片
Zabbix_第137张图片

脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

Zabbix_第138张图片
Zabbix_第139张图片
Zabbix_第140张图片

Zabbix_第141张图片
Zabbix_第142张图片

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障已恢复!
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

在这里插入图片描述
在这里插入图片描述

/etc/init.d/zabbix_agentd stop

测试停止zabbix_agent等待10分钟

zabbix主被动

Zabbix主被动模式简介(记)

zabbix agent检测分为主动(agent active)和被动(agent)两种形式的区别如下:
	主动: agent请求server 获取监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
	被动: server向agent请求获取监控项的数据, agent返回数据

主动模式流程:
	agent 端每隔一段时间主动向服务器发起连接请求,server端收到请求,查询agent 端需要的监控项目,发送给客户端,客户端收集数据发送到服务器,结束
	
被动模式流程
	agent端打开一个端口默认为10050,等待server来获取数据,agent端收集数据发送到server,结束(默认是被动模式)

配置zabbix被动模式

ttagent源码编译安装
c
useradd -M -s /sbin/nologin zabbix
yum -y install libxml2-devel libcurl-devel pcre-devel ntpdate curl-devel
tar xf zabbix-6.0.7.tar.gz
cd zabbix-6.0.7
./configure --prefix=/usr/local/zabbix --enable-agent --with-net-snmp --with-libcurl --with-libxml2
make
make installe-
vim /usr/local/zabbix/etc/zabbix_agentd.conf
Server=192.168.80.43
ServerActive=192.168.80.43
Hostname=node1e
/usr/local/zabbix/sbin/zabbix_agentd

在192.168.1.128/ui上配置监控linux主机,因为上面的笔记这里就不在做了

zabbix_server (主动监控)
端口:10051
zabbix_agent (被动监控)
端口:10050

被动监控
500台机器都需要server来监控  会造成server端负载压力大  获取不到agent端的监控数据 
缺点:
批量添加主机麻烦
优点:
添加单台机器简单

主动监控

配置主动模式

[root@localhost ~]# /etc/init.d/zabbix_agentd stop
[root@localhost ~]#  vim /usr/local/zabbix/etc/zabbix_agentd.conf
#这是agentd主配置文件
#Server=192.168.1.128
#注释这一行#如果设置为纯主动模式,则应该注释掉这一条指令#Server=192.168.80.43
StartAgents=0
#客户端 agent模式。设置为0表示启用主动模式,而被动模式被关闭,但被监控端的zabbix_agentd不监听本地端口
ServerActive=192.168.80.43
#主动模式的server IP地址,服务端IP
Hostname=node1
#客户端的hostname,不配置则使用主机名注:纯主动模式下的zabbix agent,只能支持Zabbix Agent (Active)类型的监控
killall zabbix_agentd
[root@localhost ~]# /etc/init.d/zabbix_agentd start
tail -f /usr/local/zabbix/logs/zabbix_agentd.log

查看图形 如果有的话证明监控成功

配置自动发现

应用场景
	常规监控主机流程,安装agent客户端,在server界面配置新增一台主机即可.但是如果一次性需要监控上百台主机,这样一台台安装配置就很麻烦,这个时候就需要用到zabbix自动发现功能,扫描到指定网段内10050端口的主机后自动添加相应主机(前提是客户端都已经安装了agent,可以利用ansible来实现批量安装agent)

原理
	zabbix_sever 根据配置的自动发现规则去扫描指定IP段内的主机 zabbix_agent端口是否能通,如果端口通了再根据自动发现动作里面配置的规则添加到对应的组以及添加对应的监控模板;
步骤:
1.被监控端服务器安装agent客户端(使用批量化工具安装);
⒉.配置好zabbix_agentd.conf 
3.在zabbix管理系统中添加自动发现规则;
4.在zabbix管理系统中添加自动发现动作;

zabbix自动发现基于

主机IP
自动发现检查
自动发现物件
自动发现规则
自动发现状态
agent 代理程序
接收的值
服务端口
服务类型
在线/不在线

网络发现的两个阶段
1. Discovery发现
	Zabbix定期扫描网络规则的ip范围,每个规则中都定义了一组需要检测的服务,在这些ip范围内进行逐个扫描

2.  Actions 动作(Zabbix的所有Action都基于发现事件的)
发送消息
添加主机
移除主机
添加到主机群组
自主机群组移除
与模板关联
自模板断开连接
启用主机
停用主机
设置主机清单模式

修改agent端配置

[root@localhost logs]# /etc/init.d/zabbix_agentd stop
[root@localhost logs]# cp /usr/local/zabbix/etc/zabbix_agentd.conf.bak  /usr/local/zabbix/etc/zabbix_agentd.conf
[root@localhost logs]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/tmp/zabbix_agentd.pid
LogFile=/usr/local/zabbix/logs/zabbix_agentd.logs
Server=192.168.1.128
ServerActive=192.168.1.128
Hostname=localhost
[root@localhost logs]# /etc/init.d/zabbix_agentd start
[root@localhost logs]# ps aux | grep zabbix

创建自动发现规则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3WkiJ278-1673056309318)(https://lijianhaoyyds.oss-cn-beijing.aliyuncs.com/img/202210200832808.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLb3a1Tk-1673056309321)(https://lijianhaoyyds.oss-cn-beijing.aliyuncs.com/img/202210200833577.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AhijFiMT-1673056309323)(https://lijianhaoyyds.oss-cn-beijing.aliyuncs.com/img/202210200834634.png)]

名称自定义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dayc3pvJ-1673056309325)(https://lijianhaoyyds.oss-cn-beijing.aliyuncs.com/img/202210200839658.png)]

等待30分钟

Zabbix监控MySQL、Apache、Nginx应用实战案例

	Zabbix对第三方应用软件的监控主要有两个工作难点,一个是编写自定义监控脚本,另一个是编写模板并导入Zabbix Web。编写自定义监控脚本要根据监控需求定制,而编写模板文件有些难度,不过网上已经有很多已经写好的模板,可以直接拿来使用,所以,Zabbix对应用软件的监控其实并不难。

环境搭建部署

[root@localhost ~]# yum -y install zlib pcre pcre-devel openssl openssl-devel
[root@localhost ~]# useradd -s /sbin/nologin www
https://nginx.org/en/download.html
#在官网上下载nginx包
rz 
tar xf 
cd
[root@localhost nginx-1.15.0]# ./configure \
--user=www \
--group=www \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/subsys/nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-pcre

make
make install

cd



Zabbix监控MySQL应用实战

	本节首先要介绍的是Zabbix对MySQL的监控,这个是最简单的,因为Zabbix已经自带了MySQL监控的模板,只需要编写一个监控MySQL的脚本即可,所以对MySQL的监控可以分成两个步骤完成。

Zabbix添加自定义监控MySQL脚本

#!/bin/bash
#主机地址/IP
MYSOL_HOST='127.0.0.1'
# 端口
MYSOL_PORT='3306'
# 数据连接
MYSQL_CONN=" /usr/bin/mysqladmin -h${MYSQL_HOST} -P${MYSQL_PORT}"
# 参数是否正确
if [ $# -ne "1" ];then
	echo "arg error!" 
fi
# 获取数据
case $1 in
	Uptime)
		result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"
        echo $result;;
	Com_update)
		result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3`
		echo $result
		;;
	Slow_queries)
		result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"
        echo $result;;
	Com_select)
		result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3`
		echo $result
		;;
	Com_rollback)
		result=`${MYSQL_CONN} extended-status lgrep -w "Com_rollback|"cut -d"|" -f3`
		echo $result
		;;
	Questions)
		result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"
		echo $result
		;;
	Com_insert)
		result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3`
		echo $result
		;;
	Com_delete)
		result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3`
		echo $result
		;;
	Com_commit)
		result=`${MYSOL_CONN} extended-status |grep-w "Com_commit" cut -d"|" -f3`
		echo $result
		;;
	Bytes_sent)
		result=`${MYSQL_CONN} extended-status|grep -w "Bytes_sent"|cut -d"|" -f3`
		echo $result
		;;
	Bytes_received)
		result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3`
		echo $result
		;;
	Com_begin)
		result=`${MYSQL_CONN} extended-status |grep-w"Com begin" cut -d"|" -f3`
		echo $result
		;;
	*)	
    echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
		;;
	esac
此脚本很简单,就是通过mysqladmin命令获取MySQL的运行状态参数。因为要获取MySQL运行状态,所以需要登录到MySQL中获取状态值,但这个脚本中并没有添加登录数据库的用户名和密码信息,原因有两个,一个是密码添加到脚本中很不安全,另一个是在MySQL5.7版本后,在命令行输入明文密码,会提示如下信息:
mysgladmin: [Warning] Using a password on the command line interfac
can be insecure.
对待这个问题的解决方法是,将登录数据库的用户名和密码信息写入/etc/my.cnf文件中,类似如下:
[mysqladmin]
user=root
passwd=Admin.123
这样,通过mysqladmin在命令行执行操作的话,会自动通过root用户和对应的密码登录到数据库中。

Zabbix anent端配置

	要监控MySQL,就需要在MySQL服务器上安装Zabbix agent,然后开启agent的自定义监控模式,将上面脚本放到Zabbix agent端的/etc/zabbix/shell目录下,然后进行授权:
	
	vim /usr/local/zabbix/share/zabbix/alertscripts/chcek_mysql.sh
#!/bin/bash
#主机地址/IP
MYSOL_HOST='127.0.0.1'
# 端口
MYSOL_PORT='3306'
# 数据连接
MYSQL_CONN=" /usr/bin/mysqladmin -h${MYSQL_HOST} -P${MYSQL_PORT}"
# 参数是否正确
if [ $# -ne "1" ];then
	echo "arg error!" 
fi
# 获取数据
case $1 in
	Uptime)
		result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"
        echo $result;;
	Com_update)
		result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3`
		echo $result
		;;
	Slow_queries)
		result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"
        echo $result;;
	Com_select)
		result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3`
		echo $result
		;;
	Com_rollback)
		result=`${MYSQL_CONN} extended-status lgrep -w "Com_rollback|"cut -d"|" -f3`
		echo $result
		;;
	Questions)
		result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"
		echo $result
		;;
	Com_insert)
		result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3`
		echo $result
		;;
	Com_delete)
		result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3`
		echo $result
		;;
	Com_commit)
		result=`${MYSOL_CONN} extended-status |grep-w "Com_commit" cut -d"|" -f3`
		echo $result
		;;
	Bytes_sent)
		result=`${MYSQL_CONN} extended-status|grep -w "Bytes_sent"|cut -d"|" -f3`
		echo $result
		;;
	Bytes_received)
		result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3`
		echo $result
		;;
	Com_begin)
		result=`${MYSQL_CONN} extended-status |grep-w"Com begin" cut -d"|" -f3`
		echo $result
		;;
	*)	
    echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
		;;
	esac
	
	  
	chown zabbix.zabbix /usr/local/zabbix/share/zabbix/alertscripts/chcek_mysql.sh
	vim /usr/local/etc/zabbix_agentd.conf.d/mysql.conf

ql.sh
#!/bin/bash
#主机地址/IP
MYSOL_HOST=‘127.0.0.1’

端口

MYSOL_PORT=‘3306’

数据连接

MYSQL_CONN=" /usr/bin/mysqladmin -h M Y S Q L H O S T − P {MYSQL_HOST} -P MYSQLHOSTP{MYSQL_PORT}"

参数是否正确

if [ $# -ne “1” ];then
echo “arg error!”
fi

获取数据

case 1 i n U p t i m e ) r e s u l t = ‘ 1 in Uptime) result=` 1inUptime)result={MYSQL_CONN} status|cut -f2 -d":“|cut -f1 -d"T”
echo r e s u l t ; ; C o m u p d a t e ) r e s u l t = ‘ result;; Com_update) result=` result;;Comupdate)result={MYSQL_CONN} extended-status |grep -w “Com_update”|cut -d"|" -f3 echo $result ;; Slow_queries) result=${MYSQL_CONN} status |cut -f5 -d":“|cut -f1 -d"O”
echo r e s u l t ; ; C o m s e l e c t ) r e s u l t = ‘ result;; Com_select) result=` result;;Comselect)result={MYSQL_CONN} extended-status |grep -w “Com_select”|cut -d"|" -f3 echo $result ;; Com_rollback) result=${MYSQL_CONN} extended-status lgrep -w “Com_rollback|“cut -d”|” -f3 echo $result ;; Questions) result=${MYSQL_CONN} status|cut -f4 -d":“|cut -f1 -d"S”
echo r e s u l t ; ; C o m i n s e r t ) r e s u l t = ‘ result ;; Com_insert) result=` result;;Cominsert)result={MYSQL_CONN} extended-status |grep -w “Com_insert”|cut -d"|" -f3 echo $result ;; Com_delete) result=${MYSQL_CONN} extended-status |grep -w “Com_delete”|cut -d"|" -f3 echo $result ;; Com_commit) result=${MYSOL_CONN} extended-status |grep-w “Com_commit” cut -d"|" -f3 echo $result ;; Bytes_sent) result=${MYSQL_CONN} extended-status|grep -w “Bytes_sent”|cut -d"|" -f3 echo $result ;; Bytes_received) result=${MYSQL_CONN} extended-status |grep -w “Bytes_received” |cut -d"|" -f3 echo $result ;; Com_begin) result=${MYSQL_CONN} extended-status |grep-w"Com begin" cut -d"|" -f3`
echo $result
;;
*)
echo “Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)”
;;
esac

chown zabbix.zabbix /usr/local/zabbix/share/zabbix/alertscripts/chcek_mysql.sh
vim /usr/local/etc/zabbix_agentd.conf.d/mysql.conf

你可能感兴趣的:(zabbix,服务器,网络,运维)