首页 > 代码库 > Zabbix监控系统
Zabbix监控系统
一、 zabbix简介:
zabbix是完全开源的工具,整合了cacti和nagios等特性
附:SNMP(udp 161 udp 162)
众多网络工具都支持此协议,比如常见路由交换,常见OS
其既可以做管理端也可以做被管理端
snmp协议大致有3个版本分别是v1 v2v3
无论是v1 和 v2 的安全性是比较差的,因为传输是明文的, V3的认证密码用MD5/SHA摘要算法加密
很多工具支持网络管理的功能,而对于非网络设备(操作系统),可以完全抛开snmp这种不安全的架构来实现监控的。所以很多工具都是控制端和agent架构,他们有专属的agent
Zabbix的主要功能:
具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库、FTP 等通用协议监控、多种告警方式、详细的报表图表绘制)
支持自动发现网络设备和服务器(可以通过配置自动发现服务器规则来实现)
支持分布式,能集中展示、管理分布式的监控点,扩展性强
server 提供通用接口(api 功能),可以自己开发完善各类监控(根据相关接口编写程序实现),编写插件容易,可以自定义监控项,报警级别的设置。
数据收集,支持 snmp(包括 trapping and polling ),IPMI,JMX,SSH,TELNET;
自定义的检测;自定义收集数据的频率;
服务器/代理和客户端模式;
灵活的触发器;可以定义非常灵活的问题阈值,称为触发器;
高可定制的报警;发送通知,可定制的报警升级,收件人,媒体类型。
CPU负荷、内存使用、磁盘使用、网络状况、端口监视、日志监视等等。
硬件监控:Zabbix IPMI Interface
系统监控:ZabbixAgent Interface
Java监控:Zabbix JMXInterface
网络设备监控:Zabbix SNMP Interface
应用服务监控:Zabbix Agent UserParameter
MySQL数据库监控:percona-monitoring-plulgins
URL监控:Zabbix Web 监控
zabbix重要组件说明:
1)zabbix server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据都由它组织进行;
2)database storage:专用于存储所有配置信息,以及由zabbix收集的数据;
3)web interface:zabbix的GUI接口;
4)proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力;
5)agent:部署在被监控的主机上,负责收集主机本地数据如cpu、内存、数据库等数据发往server端或proxy端;
另外,zabbix server、proxy、agent都有自己的配置文件以及log文件,重要的参数需要在这里配置,后面会详细说明。
一个监控系统运行的大概的流程是这样的:
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
zabbix常用的监控架构平台
1、server-agentd模式:
这个是最简单的架构了,常用于监控主机比较少的情况下。
2、server-proxy-agentd模式:
这个常用于比较多的机器,使用proxy进行分布式监控,有效的减轻server端的压力。
zabbix的系统架构:
Zabbix是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级开源解决方案。借助Zabbix,可以很轻松地减轻运维人员们繁重的服务器管理任务,实现业务系统的持续运行。下面会逐步介绍Zabbix分布式监控系统的部署及使用
配置好IP、DNS 、网关,确保使用远程连接工具能够连接服务器
zabbix server监控服务器:192.168.0.103 #zabbix的服务端(若要监控本机,则需要配置本机的zabbix agent)
Zabbix agent被监控主机:192.168.0.104 #zabbix的客户端(被监控端,需要配置Zabbix agent)
二、Zabbix部署前的LNMP环境的搭建过程:
安装编译工具及库文件
[root@Zabbix-Server ~]# yum -y install make apr* autoconf automake curl-devel gcc gcc-c++ openssl openssl-devel gd kernel keyutils patch perl kernel-headers compat* mpfr cpp glibc libgomp libstdc++-devel keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* libtool* libxml2 libxml2-devel patch libcurl-devel bzip2-devel freetype-devel
安装mysql5.7.13
过程略,因为之前部署好了环境,之前文章也有相关操作,可以参考下。
安装nginx
解压zlib [root@Zabbix-Server ~]# tar zxf zlib-1.2.8.tar.gz 说明:不需要编译,只需要解压就行。 解压pcre [root@Zabbix-Server ~]# tar zxf pcre-8.39.tar.gz [root@Zabbix-Server ~]# groupadd www [root@Zabbix-Server ~]# useradd -g www www -s /sbin/nologin 下载nginx的源码包:http://nginx.org/download 解压源码包: [root@Zabbix-Server ~]# tar zxf nginx-1.10.2.tar.gz [root@Zabbix-Server nginx-1.10.2]# cd nginx-1.10.2/ [root@Zabbix-Server nginx-1.10.2]# ./configure --prefix=/usr/local/nginx1.10 --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/root/pcre-8.39 --with-zlib=/root/zlib-1.2.8 --with-http_ssl_module --with-http_gzip_static_module --user=www --group=www && make && make install [root@Zabbix-Server nginx-1.10.2]# ln -s /usr/local/nginx1.10/sbin/nginx /usr/local/sbin/ [root@Zabbix-Server nginx-1.10.2]# nginx [root@Zabbix-Server nginx-1.10.2]# netstat -antp | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 99063/nginx: master [root@Zabbix-Server nginx-1.10.2]# firewall-cmd --permanent --add-port=80/tcp success [root@Zabbix-Server nginx-1.10.2]# firewall-cmd --reload success
启动后可以再浏览器中打开页面,会显示nginx默认页面。
安装php
[root@Zabbix-Server ~]# tar zxf libmcrypt-2.5.7.tar.gz [root@Zabbix-Server ~]# cd libmcrypt-2.5.7/ [root@Zabbix-Server libmcrypt-2.5.7]# ./configure && make && make install [root@Zabbix-Server libmcrypt-2.5.7]# cd [root@Zabbix-Server ~]# tar zxf php-5.6.27.tar.gz [root@Zabbix-Server ~]# cd php-5.6.27/ [root@Zabbix-Server php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-config-file-path=/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/usr/local/mysql/mysql.sock --with-gd --with-iconv --with-libxml-dir=/usr --with-mhash --with-mcrypt --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-zlib --with-freetype-dir --with-png-dir --with-jpeg-dir --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl && make && make install [root@Zabbix-Server php-5.6.27]# cp php.ini-production /etc/php.ini 编辑配置文件/etc/php.ini ,修改后的内容如下:编辑配置文件/etc/php.ini ,修改后的内容如下: 找到: ;date.timezone = 修改为: date.timezone = PRC #设置时区 找到: expose_php = On 修改为: expose_php = Off #禁止显示php版本的信息 找到: short_open_tag = Off 修改为: short_open_tag = On //支持php短标签 找到: post_max_size = 8M 修改为: post_max_size = 16M //上传文件大小 找到: max_execution_time = 30 修改为: max_execution_time = 300 //php脚本最大执行时间 找到: max_input_time = 60 修改为: max_input_time = 300 //以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制 找到: ;always_populate_raw_post_data = -1 修改为: always_populate_raw_post_data = -1 找到: ;mbstring.func_overload = 0 修改为: mbstring.func_overload= 0 创建php-fpm服务启动脚本: [root@Zabbix-Server php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm [root@Zabbix-Server php-5.6.27]# chmod +x /etc/init.d/php-fpm [root@Zabbix-Server php-5.6.27]# chkconfig --add php-fpm [root@Zabbix-Server php-5.6.27]# chkconfig php-fpm on 提供php-fpm配置文件并编辑: [root@Zabbix-Server php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf [root@Zabbix-Server php-5.6.27]# vi /usr/local/php5.6/etc/php-fpm.conf 修改内容如下: pid = run/php-fpm.pid user = www group = www listen =127.0.0.1:9000 pm.max_children = 300 pm.start_servers = 10 pm.min_spare_servers = 10 pm.max_spare_servers =50 启动php-fpm服务: [root@Zabbix-Server php-5.6.27]# service php-fpm start Starting php-fpm done [root@Zabbix-Server php-5.6.27]# netstat -anpt | grep php-fpm tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 110892/php-fpm: mas 配置nginx支持php [root@Zabbix-Server php-5.6.27]# cat /usr/local/nginx1.10/conf/nginx.conf user www www; worker_processes 4; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ # ‘$status $body_bytes_sent "$http_referer" ‘ # ‘"$http_user_agent" "$http_x_forwarded_for"‘; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; charset utf-8; #access_log logs/host.access.log main; location / { root html; index index.php index.html index.htm; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location /status { stub_status on; } } }
[root@Zabbix-Server php-5.6.27]# nginx -t nginx: the configuration file /usr/local/nginx1.10/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx1.10/conf/nginx.conf test is successful [root@Zabbix-Server php-5.6.27]# killall -s HUP nginx
测试LNMP
进入nginx默认的网页根目录,创建.php的测试页
[root@Zabbix-Server php-5.6.27]# cat /usr/local/nginx1.10/html/test1.php <?php phpinfo() ?> [root@Zabbix-Server php-5.6.27]# cat /usr/local/nginx1.10/html/test2.php <?php $link=mysql_connect(‘localhost‘,‘root‘,‘123.abc‘); if($link) echo "ok"; mysql_close(); ?>
访问结果:
至此,LNMP部署完毕。
三、监控系统Zabbix-3.2.1的安装
zabbix-server端的操作 zabbix服务器端要提前安装好LNMP环境(mysql,nginx,php5的安装目录均是/usr/local) 创建Zabbix运行的用户: [root@Zabbix-Server ~]# groupadd zabbix [root@Zabbix-Server ~]# useradd -g zabbix zabbix 安装libcurl和net-snmp: [root@Zabbix-Server ~]# yum -y install net-snmp net-snmp-devel curl-devel java-1.8.0-openjdk java-1.8.0-openjdk-devel OpenIPMI-devel libssh2-devel 注:OpenIPMI-devel 和libssh2-devel软件包使用centos在线yum软件源安装 安装Fping: [root@Zabbix-Server ~]# tar zxf fping-3.12.tar.gz [root@Zabbix-Server ~]# cd fping-3.12/ [root@Zabbix-Server fping-3.12]# ./configure && make && make install [root@Zabbix-Server fping-3.12]# chown root:zabbix /usr/local/sbin/fping [root@Zabbix-Server fping-3.12]# chmod 4710 /usr/local/sbin/fping 安装Zabbix Server: [root@Zabbix-Server fping-3.12]# cd [root@Zabbix-Server ~]# tar zxf zabbix-3.2.1.tar.gz [root@Zabbix-Server ~]# cd zabbix-3.2.1/ [root@Zabbix-Server zabbix-3.2.1]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-java --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl --with-openipmi 注意:编译时最好带上--enable-java这个参数,方便后续监控tomcat程序所用。 --with-ssh2 是不需要在客户端服务器上面安装Zabbix agent,如果需要使用ssh检查,需要在编译的时候加上这项,最低需要libssh2 1.0.0版本,需要安装ssh开发包 --with-openipmi用户可以利用 IPMI 监视服务器的物理特征,如温度、电压、电扇工作状态、电源供应等。 如果添加了--enable-proxy, 那么会生成get和sender两条命令. 如下, 用于接收agent发生过来的信息, 同时发送给server. [root@Zabbix-Server zabbix-3.2.1]# make && make install 添加系统软连接 [root@Zabbix-Server zabbix-3.2.1]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/ [root@Zabbix-Server zabbix-3.2.1]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/ ZabbixServer配置与启动 创建Zabbix数据库和MySQL用户: mysql> create database zabbix character set utf8; Query OK, 1 row affected (0.00 sec) mysql> grant all privileges on zabbix.* to zabbix@localhost identified by ‘zabbix‘; Query OK, 0 rows affected, 1 warning (0.00 sec) 导入Zabbix初始数据: 切换到zabbix的解压目录下 [root@Zabbix-Server zabbix-3.2.1]# cd database/mysql/ [root@Zabbix-Server mysql]# pwd /root/zabbix-3.2.1/database/mysql [root@Zabbix-Server mysql]# ls data.sql images.sql schema.sql [root@Zabbix-Server mysql]# mysql -uzabbix -pzabbix -hlocalhost zabbix < schema.sql mysql: [Warning] Using a password on the command line interface can be insecure. [root@Zabbix-Server mysql]# mysql -uzabbix -pzabbix -hlocalhost zabbix < images.sql mysql: [Warning] Using a password on the command line interface can be insecure. [root@Zabbix-Server mysql]# mysql -uzabbix -pzabbix -hlocalhost zabbix < data.sql mysql: [Warning] Using a password on the command line interface can be insecure. 编辑/usr/local/zabbix/etc/zabbix_server.conf: [root@Zabbix-Server mysql]# grep -v "^#" /usr/local/zabbix/etc/zabbix_server.conf | grep -v "^$" LogFile=/usr/local/zabbix/logs/zabbix_server.log PidFile=/usr/local/zabbix/logs/zabbix_server.pid DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix DBPort=3306 FpingLocation=/usr/local/sbin/fping [root@Zabbix-Server mysql]# mkdir -p /usr/local/zabbix/logs [root@Zabbix-Server mysql]# chown -R zabbix:zabbix /usr/local/zabbix/ 启动Zabbix Server: [root@Zabbix-Server mysql]# /usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf /usr/local/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory 解决方法: 在ld.so.conf中加入/usr/local/mysql/lib [root@Zabbix-Server mysql]# find / -name libmysqlclient.so.20 /root/mysql-5.7.13/libmysql/libmysqlclient.so.20 /usr/local/mysql/lib/libmysqlclient.so.20 [root@Zabbix-Server mysql]# vi /etc/ld.so.conf [root@Zabbix-Server mysql]# cat /etc/ld.so.conf include ld.so.conf.d/*.conf /root/mysql-5.7.13/libmysql/ /usr/local/mysql/lib/ 加载/etc/ld.so.conf文件生效并再次启动zabbix_server [root@Zabbix-Server mysql]# ldconfig [root@Zabbix-Server mysql]# /usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf [root@Zabbix-Server mysql]# netstat -anpt | grep zabbix_server tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 15820/zabbix_server 添加开机启动脚本 [root@Zabbix-Server ~]# cd zabbix-3.2.1/ [root@Zabbix-Server zabbix-3.2.1]# cp misc/init.d/fedora/core/zabbix_server /etc/rc.d/init.d/zabbix_server [root@Zabbix-Server zabbix-3.2.1]# cp misc/init.d/fedora/core/zabbix_agentd /etc/rc.d/init.d/zabbix_agentd [root@Zabbix-Server zabbix-3.2.1]# chmod +x /etc/rc.d/init.d/zabbix_server [root@Zabbix-Server zabbix-3.2.1]# chmod +x /etc/rc.d/init.d/zabbix_agentd [root@Zabbix-Server zabbix-3.2.1]# chkconfig --add zabbix_server [root@Zabbix-Server zabbix-3.2.1]# chkconfig --add zabbix_agentd [root@Zabbix-Server zabbix-3.2.1]# chkconfig zabbix_server on [root@Zabbix-Server zabbix-3.2.1]# chkconfig zabbix_agentd on 修改zabbix开机启动脚本中的zabbix安装目录 vi /etc/rc.d/init.d/zabbix_server #编辑服务端配置文件 BASEDIR=/usr/local/zabbix/ #zabbix安装目录 PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid #pid文件路径 :wq! #保存退出 vi /etc/rc.d/init.d/zabbix_agentd #编辑客户端配置文件 BASEDIR=/usr/local/zabbix/ #zabbix安装目录 PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid #pid文件路径 :wq! #保存退出 [root@Zabbix-Server zabbix-3.2.1]# systemctl daemon-reload [root@Zabbix-Server zabbix-3.2.1]# /etc/init.d/zabbix_server stop Stopping zabbix_server (via systemctl): [ OK ] [root@Zabbix-Server zabbix-3.2.1]# netstat -antp | grep zabbix [root@Zabbix-Server zabbix-3.2.1]# /etc/init.d/zabbix_server start Starting zabbix_server (via systemctl): [ OK ] [root@Zabbix-Server zabbix-3.2.1]# netstat -antp | grep zabbix tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 17223/zabbix_server 设置防火墙规则 [root@Zabbix-Server zabbix-3.2.1]# firewall-cmd --permanent --add-port=10051/tcp success [root@Zabbix-Server zabbix-3.2.1]# firewall-cmd --reload success 配置zabbix web页面 在安装目录将frontends拷贝到指定的web root: [root@Zabbix-Server zabbix-3.2.1]# pwd /root/zabbix-3.2.1 [root@Zabbix-Server zabbix-3.2.1]# cp -r frontends/php/ /usr/local/nginx1.10/html/zabbix [root@Zabbix-Server zabbix-3.2.1]# chown -R www:www /usr/local/nginx1.10/html/zabbix/ 注:/usr/local/nginx/html为Nginx默认站点目录 www为Nginx运行账户 注:PHP需要至少开启扩展: gd,bcmath,ctype,libXML,xmlreader,xmlwriter,session,sockets,mbstring,gettext,mysql 如下,查看是否包括了上面所提到的扩展模块 [root@Zabbix-Server zabbix-3.2.1]# /usr/local/php5.6/bin/php -m [PHP Modules] bcmath bz2 Core ctype curl date dom ereg fileinfo filter ftp gd gettext hash iconv json libxml mbstring mcrypt mhash mysql mysqli openssl pcntl pcre PDO pdo_sqlite Phar posix Reflection session shmop SimpleXML soap sockets SPL sqlite3 standard sysvsem tokenizer xml xmlreader xmlrpc xmlwriter zip zlib [Zend Modules]
安装web
访问Web界面http://192.168.0.103/zabbix,进行相关web配置,配置完成后使用默认用户admin(密码:zabbix)登陆即可
进入ZABBIX WEB安装画面
进入ZABBIX检测画面
对数据库进行设置,这里如果数据库在本地的话端口可以使用0
点击Next step 一下步进行zabbix server 细节的设置 这一步可以默认
点击安装,安装完成后 如果没有错误就会进入完成画面
完成画面有设置文件放在服务器的位置,请记下来
点击Finish 完成
使用Admin 用默认密码 zabbix 登录
登录后画面如下
至此 ZABBIX的基础安装完成
注:1. 显示简体中文界面
在安装数据库时已经将zabbix库设置了utf-8字符
首先确定zabbix开启了中文支持功能:
登录到zabbix服务器的数据目录下(前面部署的zabbix数据目录是/usr/local/nginx1.10/html/zabbix/),打开 locales.inc.php文件
[root@Zabbix-Server include]# pwd
/usr/local/nginx1.10/html/zabbix/include
[root@Zabbix-Server include]# vi locales.inc.php
登陆zabbix后,点击右上角的“用户”图标,将语言设置为“中文”:
按照如图选择Chinese(zh_CN),点击update:
解决zabbix绘图中出现中文乱码问题:
a.从windows下控制面板->字体->选择一种中文字库例如“楷体”
b.把它拷贝到zabbix的web端的fonts目录下例如:/usr/local/nginx1.10/html/zabbix/fonts/,并且把TTF后缀改为ttf
并且将之前的字体文件DejaVuSans.ttf移动到别处
c.然后,接着修改代码include/defines.inc.php文件中的字体配置,将里面关于字体设置从DejaVuSans替换成simkai
vi替换技巧:%s/DejaVuSans/simkai
其中:simkai为字库名字,不包含ttf后缀
[root@Zabbix-Server fonts]# cd /usr/local/nginx1.10/html/zabbix/
[root@Zabbix-Server zabbix]# vi include/defines.inc.php
在vi编辑器的末行模式下输入%s/DejaVuSans/simkai
这样,修改后,zabbix监控图形中的中文字就不会出现乱码了
四、zabbix客户端的安装
既然要监控我们就要添加要监控的主机,在添加主机之前我们首先要在被检测主机上面安装agent,安装agent比较简单,我们也是按照安装server的流程,下载软件包,在编译的时候,我们只选择agent
192.168.0.104作为zabbix的被监控端,提供web和mysql应用
安装Zabbix,配置Zabbix agent:
[root@Zabbix-agent ~]#tar zxf zabbix-3.2.1.tar.gz [root@Zabbix-agent ~]# cd zabbix-3.2.1/ [root@Zabbix-agent zabbix-3.2.1]# ./configure --prefix=/usr/local/zabbix --enable-agent && make && make install [root@Zabbix-agent zabbix-3.2.1]# cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/ [root@Zabbix-agent zabbix-3.2.1]# mkdir -p /usr/local/zabbix/logs [root@Zabbix-agent zabbix-3.2.1]# groupadd zabbix [root@Zabbix-agent zabbix-3.2.1]# useradd -g zabbix zabbix [root@Zabbix-agent zabbix-3.2.1]# chown -R zabbix:zabbix /usr/local/zabbix/ 配置开机自动启动: [root@Zabbix-agent zabbix-3.2.1]# chkconfig --add zabbix_agentd [root@Zabbix-agent zabbix-3.2.1]# chkconfig zabbix_agentd on 修改zabbix开机启动脚本中的zabbix安装目录 vi /etc/rc.d/init.d/zabbix_agentd #编辑客户端配置文件 BASEDIR=/usr/local/zabbix/ #zabbix安装目录 PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid #pid文件路径 :wq! #保存退出 编辑zabbix_agentd.conf [root@Zabbix-agent zabbix-3.2.1]# vi /usr/local/zabbix/etc/zabbix_agentd.conf 内容如下: [root@Zabbix-agent zabbix-3.2.1]#grep -v "^#" /usr/local/zabbix/etc/zabbix_agentd.conf | grep -v "^$" PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid LogFile=/usr/local/zabbix/logs/zabbix_agentd.log Server=192.168.0.103 ListenPort=10050 ServerActive=192.168.0.103 Hostname=192.168.0.104 Timeout=15 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
注:
其中Server和ServerActive都指定zabbixserver的IP地址,不同的是,前者是被动后者是主动。也就是说Server这个配置是用来允许192.168.0.103这个ip来我这取数据。而serverActive的192.168.0.103的意思是,客户端主动提交数据给他。
Hostname=XXX,这个定义的名字必须和web页面里面host的名字一样。
启动zabbix_agentd:
[root@Zabbix-agent zabbix-3.2.1]# /usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf [root@Zabbix-agent zabbix-3.2.1]# netstat -anpt | grep zabbix_agentd tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 18142/zabbix_agentd [root@Zabbix-agent zabbix-3.2.1]# firewall-cmd --permanent --add-port=10050/tcp success [root@Zabbix-agent zabbix-3.2.1]# firewall-cmd --reload success
到此,zabbix3.2.1监控系统的基本环境安装完成。
实现zabbix添加监测项
添加对Linux主机的监控
在浏览器中打开:http://192.168.0.103/zabbix
登录zabbix,先在“配置”-“主机”里添加主机监控,监控os资源:内存,cpu,io,负载,带宽等.
登录zabbix,先在“配置”-“主机”里单击”创建主机”
点击”主机”标签,填写相关信息
注意:下图中的“主机名称”要和zabbix_agentd.conf文件中设置的“Hostname”后面的名称一致!
主机名称:192.168.0.104
群组:Linux servers
agent代理程序接口ip:192.168.0.104
已启用:勾选
其它选项默认即可
切换到模板
选择
选择:Template OS Linux
点添加
添加
至此,Zabbix监控Linux主机设置完成。
配置过一段时间后,观察下监控图效果出来了没:
zabbix3.0 server已自带mysql的模板了,只需配置好agent客户端,然后在web端给主机增加模板就行了。
Zabbix_agent客户端操作
(1)首先在客户端的mysql里添加权限,即本机使用zabbix账号连接本地的mysql
mysql> grant all on *.* to zabbix@‘localhost‘ identified by ‘123.abc‘; Query OK, 0 rows affected, 1 warning (0.19 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
(2)在zabbix_agent服务目录下创建.my.cnf 连接文件,zabbix安装目录是/usr/local/zabbix
[root@Zabbix-agent zabbix-3.2.1]# cd /usr/local/zabbix/etc/ [root@Zabbix-agent zabbix]# vi .my.cnf [root@Zabbix-agent zabbix]# cat .my.cnf [client] user=zabbix password=123.abc
注意:
如果在数据库grant授权时,针对的是localhost,这个.my.cnf里面就不用加host参数了【如上配置】
但如果grant授权时针对的是本机的ip(如192.168.0.104),那么在.my.cnf文件里就要加上host参数进行指定了
即在.my.cnf文件就要加上:
host=192.168.0.104 socket= /usr/local/mysql/mysql.sock user=zabbix password=123.abc
(3)配置MySQL的key文件
这个可以从zabbix3.2安装时的解压包里拷贝过来,从zabbix_server服务端安装时解压目录
/root/zabbix-3.2.1/conf/zabbix_agentd/userparameter_mysql.conf 拷贝到zabbix_agent客户端上的/usr/local/zabbix/etc/zabbix_agentd.conf.d/ 目录下的
[root@Zabbix-agent zabbix]# cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/ [root@Zabbix-agent zabbix_agentd.conf.d]# pwd /usr/local/zabbix/etc/zabbix_agentd.conf.d [root@Zabbix-agent zabbix_agentd.conf.d]# cp /root/zabbix-3.2.1/conf/zabbix_agentd/userparameter_mysql.conf ./ [root@Zabbix-agent zabbix_agentd.conf.d]# ls userparameter_mysql.conf userparameter_mysql.conf 然后查看 userparameter_mysql.conf 文件,看到类似 HOME=/var/lib/zabbix 的路径设置,把路径全都替换为 /usr/local/zabbix/etc/,也就是上面的.my.cnf文件所在的目录路径。 另外,注意userparameter_mysql.conf 文件里的mysql命令路径(提前做好mysql的系统环境变量,以防mysql命令不被系统识别) 如下:
[root@Zabbix-agent zabbix_agentd.conf.d]# cat userparameter_mysql.conf
[root@Zabbix-agent zabbix_agentd.conf.d]# cat userparameter_mysql.conf
# For all the following commands HOME should be set to the directory that has .my.cnf file with password information.
# Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].
# Key syntax is mysql.status[variable].
UserParameter=mysql.status[*],echo "show global status where Variable_name=‘$1‘;" | HOME=/usr/local/zabbix/etc/ mysql -N | awk ‘{print $$2}‘
# Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].
# Key syntax is mysql.size[<database>,<table>,<type>].
# Database may be a database name or "all". Default is "all".
# Table may be a table name or "all". Default is "all".
# Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both".
# Database is mandatory if a table is specified. Type may be specified always.
# Returns value in bytes.
# ‘sum‘ on data_length or index_length alone needed when we are getting this information for whole database instead of a single table
UserParameter=mysql.size[*],bash -c ‘echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/usr/local/zabbix/etc/ mysql -N‘
UserParameter=mysql.ping,HOME=/usr/local/zabbix/etc/ mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V
(4)按照上面修改完之后检查一下,然后重启zabbix_agent
[root@Zabbix-agent zabbix_agentd.conf.d]# pkill -9 zabbix_agent [root@Zabbix-agent zabbix_agentd.conf.d]# netstat -anpt | grep zabbix_agent [root@Zabbix-agent zabbix_agentd.conf.d]# /usr/local/zabbix/sbin/zabbix_agentd [root@Zabbix-agent zabbix_agentd.conf.d]# netstat -anpt | grep zabbix_agent tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 100593/zabbix_agent
接着在zabbix_server服务端进行命令行测试[下面的192.168.0.103是客户端的ip]
若下面报错
[root@localhostzabbix]# /usr/local/zabbix/bin/zabbix_get -s 192.168.0.104 -p 10050 -k"mysql.status[Uptime]"
sh: mysql: command notfound
解决方法:
在userparameter_mysql.conf中关于mysql命令前面添加绝对路径
[root@Zabbix-Server zabbix]# /usr/local/zabbix/bin/zabbix_get -s 192.168.0.104 -p 10050 -k "mysql.status[Uptime]" 6893897
如果出现类似这一串key的数字,就说明配置ok,服务端能监控到客户端的mysql数据了!
成功啦,之后在监控界面增加主机对应的MySQL模板就ok了。
注:zabbix_get命令介绍
参数说明:
-s --host:指定客户端主机名或者IP
-p --port:客户端端口,默认10050
-I --source-address:指定源IP,写上zabbixserver的ip地址即可,一般留空,服务器如果有多ip的时候,你指定一个。
-k --key:你想获取的key
zabbix_get获取数据
获取负载
[root@Zabbix-Server zabbix]# zabbix_get -s 192.168.0.104 -p 10050 -k "system.cpu.load[all,avg15]" 0.050000
获取主机名
[root@Zabbix-Server zabbix]# zabbix_get -s 192.168.0.104 -p 10050 -k "system.hostname" Zabbix-agent
(5)登录zabbix监控界面,在“配置”-“模板”里可以看到自带的mysql监控模板
在相应主机监控配置里添加mysql的监控模版(zabbix自带的)即可。
下面是mysql监控项的效果图:
【1】监控mysql的带宽:在zabbix前端可以实时查看mysql发送接收的字节数。其中bytes received表示从所有客户端接收到的字节数,bytes sent表示发送给所有客户端的字节数。
【2】监控mysql的操作状态:在zabbix前端可以实时查看各种SQL语句每秒钟的操作次数。
zabbix3.2.1邮件报警设置:
Zabbix监控服务端、客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常。
在Zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报警邮件到指定邮箱。
具体操作:
以下操作在Zabbix监控服务端进行
下载sendemail软件
然后安装那两个依赖包,命令是:
[root@Zabbix-Server zabbix]# yum -y install perl-Net-SSLeay perl-IO-Socket-SSL 解压软件,然后将sendemail复制到/usr/local/bin/目录下,并加上可执行权限,然后修改用户和群组。 [root@Zabbix-Server ~]# tar zxf sendEmail-v1.56.tar.gz [root@Zabbix-Server ~]# cd sendEmail-v1.56/ [root@Zabbix-Server sendEmail-v1.56]# cp sendEmail /usr/local/bin/sendEmail [root@Zabbix-Server sendEmail-v1.56]# chown zabbix:zabbix /usr/local/bin/sendEmail [root@Zabbix-Server sendEmail-v1.56]# ll /usr/local/bin/sendEmail -rwxr-xr-x. 1 zabbix zabbix 80213 Mar 28 21:42 /usr/local/bin/sendEmail 执行# /usr/local/bin/sendEmail -h查看sendEmail的帮助 [root@Zabbix-Server sendEmail-v1.56]# /usr/local/bin/sendEmail -h sendEmail-1.56 by Brandon Zehm <caspian@dotconf.net> Synopsis: sendEmail -f ADDRESS [options] Required: -f ADDRESS from (sender) email address * At least one recipient required via -t, -cc, or -bcc * Message body required via -m, STDIN, or -o message-file=FILE Common: -t ADDRESS [ADDR ...] to email address(es) -u SUBJECT message subject -m MESSAGE message body -s SERVER[:PORT] smtp mail relay, default is localhost:25 Optional: -a FILE [FILE ...] file attachment(s) -cc ADDRESS [ADDR ...] cc email address(es) -bcc ADDRESS [ADDR ...] bcc email address(es) -xu USERNAME username for SMTP authentication -xp PASSWORD password for SMTP authentication Paranormal: -b BINDADDR[:PORT] local host bind address -l LOGFILE log to the specified file -v verbosity, use multiple times for greater effect -q be quiet (i.e. no STDOUT output) -o NAME=VALUE advanced options, for details try: --help misc -o message-content-type=<auto|text|html> -o message-file=FILE -o message-format=raw -o message-header=HEADER -o message-charset=CHARSET -o reply-to=ADDRESS -o timeout=SECONDS -o username=USERNAME -o password=PASSWORD -o tls=<auto|yes|no> -o fqdn=FQDN Help: --help the helpful overview you‘re reading now --help addressing explain addressing and related options --help message explain message body input and related options --help networking explain -s, -b, etc --help output explain logging and other output options --help misc explain -o options, TLS, SMTP auth, and more
[root@Zabbix-Server sendEmail-v1.56]# /usr/local/bin/sendEmail -f 17600339557@163.com -t 17600339557@163.com -s smtp.163.com -u "hello" -o message-content-type=html -o message-charset=utf8 -xu 17600339557@163.com -xp 123abc -m "hello"
命令主要选项说明:
/usr/local/bin/sendEmail #命令主程序
-f from@126.com #发件人邮箱
-t to@126.com #收件人邮箱
-s smtp.126.com #发件人邮箱的smtp服务器
-u "我是邮件主题" #邮件的标题
-o message-content-type=html #邮件内容的格式,html表示它是html格式
-o message-charset=utf8 #邮件内容编码
-xu from@126.com #发件人邮箱的用户名
-xp WEE78@12l$ #发件人邮箱密码
-m "我是邮件内容" #邮件的具体内容
进入/usr/local/zabbix/share/zabbix/alertscripts/目录
然后在这个目录下创建报警脚本sendmail.sh
[root@Zabbix-Server alertscripts]# vi mail.sh #!/bin/bash to=$1 subject=$2 body=$3 /usr/local/bin/sendEmail -o tls=auto -f 17600339557@163.com -t "$to" -s smtp.163.com -u "$sbuject" -o message-content-type=html -o messag e-charset=utf8 -xu 17600339557@163.com -xp 123abc -m "$body"
[root@Zabbix-Server alertscripts]# chmod +x mail.sh [root@Zabbix-Server alertscripts]# ./mail.sh 17600339557@163.com test 123 ******************************************************************* Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER together with SSL_ca_file|SSL_ca_path for verification. If you really don‘t want to verify the certificate and keep the connection open to Man-In-The-Middle attacks please set SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application. ******************************************************************* at /usr/local/bin/sendEmail line 1906. invalid SSL_version specified at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm line 415.
注:进行发送邮件测试时,出现了第一个报错
原因是sendemail软件和perl5里面的ssl版本不兼容导致的,通过修改sendemail里面的内容可以解决这个问题。
解决方法:
在sendemail文件中把1906行的内容
if (!IO::Socket::SSL->start_SSL($SERVER, SSL_version => ‘SSLv3 TLSv1‘)) { 修改为 if(! IO::Socket::SSL->start_SSL($SERVER)) {
即不指定SSL的版本,让程序来自己选择
不管你使用的是163/126邮箱还是qq邮箱,你都必须开通pop3服务,而且126/qq邮箱还要求使用第三方客户端发送邮件是必须使用授权码登录,使用账号密码验证时,会出现下面图片中的错误。
sendEmail[50684]: ERROR => ERROR => SMTP-AUTH: Authentication to smtp.163.com:25 failed.
至于邮箱的授权码,自己登录163邮箱去设置就好。
经过上面两个问题的处理后就可以正常发送邮件如下所示显示成功提示
[root@Zabbix-Server alertscripts]# ./mail.sh 17600339557@163.com test 123 ******************************************************************* Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER together with SSL_ca_file|SSL_ca_path for verification. If you really don‘t want to verify the certificate and keep the connection open to Man-In-The-Middle attacks please set SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application. ******************************************************************* at /usr/local/bin/sendEmail line 1906. Mar 28 22:34:28 zabbix-server sendEmail[50764]: Email was sent successfully!
zabbix web端配置
上面的邮件脚本配置好后,就要在web端添加报警媒介,在web页面的管理,报警媒介类型页面,点击右边的创建媒体类型
进入创建页面,然后输入名称“邮件报警脚本”,类型选择脚本,名称选择mail.sh,点击添加按钮,添加三个脚本参数,分别是{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESAGE},分别对于mail.sh中的to、subject和body。添加完成后点下面的添加按钮,我们的报警媒介就创建完成了
创建好报警媒介后,就需要将报警媒介关联到我们的用户。点击管理,用户,然后选择我们的用户admin也可新建一个用户,点击用户名就进入到用户配置界面。点击报警媒介,然后点添加,选择我们上一步创建的邮件报警脚本,输入收件人,选择报警时间和类型,然后点击添加,就将创建好的报警媒介关联到我们的用户上面了。
现在需要做的是,创建一个触发动作,即系统出现故障时,触发这个动作,然后给我们的邮箱发送报警邮件。点击配置,选择动作,然后点击右边的创建动作。
在动作这一页名称中写入我们定义的动作名以及触发条件
设置“操作”
步骤是1-3,也即是从1开始到3结束。一旦故障发生,就是执行Email.sh脚本发生报警邮件给zabbix用户。
假如故障持续了1个小时,它也只发送3次,第1-3次(即前3次)邮箱发送给zabbix用户,时间间隔为0秒。
如果改成1-0,0是表示不限制.无限发送
设置“恢复操作”
添加好以后就可以看到我们添加的动作名,以及该动作已启用的状态。
报警测试
将192.168.0.104服务器的zabbix_agent进程关闭。
[root@Zabbix-agent etc]# pkill -9 zabbix_agent [root@Zabbix-agent etc]# netstat -anpt | grep zabbix_agent
发现可以正常收到故障报警邮件
最后,点击”报表“->”动作日志“,可以看到触发动作的次数(右边还看查看到邮件发送状态“已送达”)。
本文出自 “你好阳光” 博客,谢绝转载!
Zabbix监控系统