在企业网络运维过程中,运维工程师必须随时关注各服务器和网络的运行状况,以便及时发现问题,尽可能减少故障的发生。当网络中的设备,服务器等数量较多时,为了更加方便,快捷的获得监控信息,通常会借助于一些集中监测软件。就目前而言,有服务器的地方就少不了监控系统,所以行业内就有一句俗话叫"无监控,不运维"∵
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 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(上万台)
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
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服务是否启动成功
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
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 端口是否开启
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/
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会有问题
添加自身为被监控机
等5分钟刷新
解决乱码
zabbix页面优化
如果监控不到,有可能是windos被监控端的端口没有开,或者是windos的防火墙开着,也有可能是windos的杀毒软件开着呢
再服务端启动nginx php zabbix后访问:http://192.168.1.128/ui/
在这个输入
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
[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
#过滤其端口
自定义监控项过程:
创建项目、触发器、图形,验证监控效果;
自定义简介
以上关联的 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
自定义监控
故障{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 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 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_server端/usr/local/zabbix/share/zabbix/alertscripts目录下的脚本名称,确保脚本的归属是zabbix,并且脚本的权限是777,下边设置脚本参数,也就是发送邮件的语法:脚本收件人标题内容,必须严格按照此标准填写;
三个脚本参数如下
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
故障{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 server服务的agent查看邮件效果(等待10分钟)
[root@localhost ~]# /etc/init.d/zabbix_agentd stop
开启zabbix server服务的agent查看邮件效果(等待10分钟)
[root@localhost ~]# /etc/init.d/zabbix_agentd start
基于钉钉机器人实现钉钉报警
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
脚本参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
故障{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 agent检测分为主动(agent active)和被动(agent)两种形式的区别如下:
主动: agent请求server 获取监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动: server向agent请求获取监控项的数据, agent返回数据
主动模式流程:
agent 端每隔一段时间主动向服务器发起连接请求,server端收到请求,查询agent 端需要的监控项目,发送给客户端,客户端收集数据发送到服务器,结束
被动模式流程
agent端打开一个端口默认为10050,等待server来获取数据,agent端收集数据发送到server,结束(默认是被动模式)
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管理系统中添加自动发现动作;
主机IP
自动发现检查
自动发现物件
自动发现规则
自动发现状态
agent 代理程序
接收的值
服务端口
服务类型
在线/不在线
网络发现的两个阶段
1. Discovery发现
Zabbix定期扫描网络规则的ip范围,每个规则中都定义了一组需要检测的服务,在这些ip范围内进行逐个扫描
2. Actions 动作(Zabbix的所有Action都基于发现事件的)
发送消息
添加主机
移除主机
添加到主机群组
自主机群组移除
与模板关联
自模板断开连接
启用主机
停用主机
设置主机清单模式
[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对第三方应用软件的监控主要有两个工作难点,一个是编写自定义监控脚本,另一个是编写模板并导入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监控的模板,只需要编写一个监控MySQL的脚本即可,所以对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用户和对应的密码登录到数据库中。
要监控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 MYSQLHOST−P{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