一、zabbix运行架构 Zabbix是一个企业级的分布式开源监控解决方案。它能够监控各种服务器的健康性、网络的稳定性以及各种应用系统的可靠性。当监控出现异常时,Zabbix通过灵活的告警策略,可以为任何事件配置基于邮件、短信、微信等告警机制。而这所有的一切,都可以通过Zabbix提供的web界面进行配置和操作,基于web的前端页面还提供了出色的报告和数据可视化功能。这些功能和特性使我们运维人员可以非常轻松的搭建一套功能强大的运维监控管理平台。
Zabbix的运行架构如下:
从上面的运行架构图可以看到,Zabbix主要有几个组件构成,分别如下: 1、Zabbix Server Zabbix Server是Zabbix的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。它主要负责接收客户端发送的报告和信息,同时,所有配置、统计数据及配置操作数据均由其组织进行。
2、Zabbix Database Storage 主要用于存储数据,所有配置信息和Zabbix收集到的数据都被存储在数据库中。可以使用MySQL、oracle、SQLite等。
3、Zabbix Web界面 这是Zabbix提供的GUI接口,通常(但不一定)与Zabbix Server运行在同一台物理机器上。
4、Zabbix Proxy 代理服务器 这是一个可选组件,常用于分布式监控环境中,代理Server可以替Zabbix收集新能和可用性数据,汇总后统一发往Zabbix Server端。
5、Zabbix Agent 监控代理 Zabbix Agent部署在被监控的主机上,能够主动监控本地资源和应用程序,并负责收集数据发往Zabbix Server端或Zabbix Proxy端。 二、Zabbix监控术语 在Zabbix监控系统中,有一些常用的术语,下面是简单的介绍。
1、主机(host) 表示要监控的一台服务器或者网络设备,可以通过IP或主机名指定。
2、主机组(host group) 主机的逻辑组:它包含主机和模板,但同一个主机组内的主机和模板没有任何直接的关联;主机组通常在给用户或用户组指派监控权限时使用。
3、监控项(item) 表示一个监控的具体对象,例如监控服务器的CPU负载、磁盘空间等,item是Zabbix进行数据收集的核心,相对某个监控对象,每个item都由“key”来标识。
4、触发器(trigger) 其实就是一个监控阈值表达式,用于评估某监控对象接收到的数据是否在合理范围内;如果接收的数据大于阈值时,触发器的状态将从“OK”转变为“Problem”,当接收到的数据低于阈值时,又转变为“OK”状态。
5、应用集(Applications) 一组监控项组成的逻辑集合。
6、动作(action) 指对于监控中出现的问题事先定义的处理方法,例如发送通知、何时执行操作、执行的频率等等。
7、报警媒介类型(media) 表示发送通知的手段,告警通知的途径,如Email、Jabber或SMS等。
8、模板(template) 一组可以被应用到一个或多个主机上的实现集合,一个模板通常包含了应用集、监控项、触发器、图形、聚合图形、自动发现规则、web场景等几个项目;模板可以直接链接到某个主机。
模板是学习zabbix的一个难点和重点,为了实现批量、自动化监控,通常会将具有相同特征的监控项汇总到模板中,然后在主机中直接引用即可,实现快速监控部署。 三、部署Zabbix监控平台 Zabbix的监控平台部署比较简单,前提是准备好LNMP或LAMP环境 我这里将从部署LNMP环境开始配置。
注:我这里将所有服务部署在同一台服务器上,仅仅是一个简单的监控架构,并没有部署 zabbix proxy等。
Zabbix官方的相关链接: Zabbix 4.2 配置文档:https://www.zabbix.com/documentation/4.2/manual/it_services 所需软件包:https://pan.baidu.com/s/1UzzoFUuR84U2ccDf1qW2UQ 提取码:grhh 1、部署Nginx
代码语言:javascript复制[root@zabbix /]# mkdir /zabbix # 个人习惯,可忽略
[root@zabbix /]# cd zabbix/
[root@zabbix zabbix]# rz # shangchaun上传所需源码包
[root@zabbix zabbix]# tar zxf nginx-1.14.0.tar.gz
[root@zabbix zabbix]# cd nginx-1.14.0/
[root@zabbix nginx-1.14.0]# yum -y install pcre-devel openssl-devel zlib-devel
[root@zabbix zabbix]# cd nginx-1.14.0/
[root@zabbix nginx-1.14.0]# useradd -s /sbin/nologin -M www
[root@zabbix nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --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=/usr/src/pcre-8.39 --with-zlib=/usr/src/zlib-1.2.8 --with-http_ssl_module --with-http_gzip_static_module --user=www --group=www && make && make install
[root@zabbix /]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@zabbix /]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
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 /scripts$fastcgi_script_name;
include fastcgi.conf; #修改此行
}
[root@zabbix /]# netstat -anput |grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 46551/nginx: master
[root@zabbix /]# cat > /usr/local/nginx/html/index.php << EOF # 创建测试文件
> <?php
> phpinfo();
> ?>
> EOF
2、部署PHP
代码语言:javascript复制[root@zabbix /]# yum -y install libxml2-devel openssl-devel bzip2-devel libcurl-devel libjpeg-devel libpng-devel freetype-devel # 安装依赖包
[root@zabbix /]# cd /zabbix/
[root@zabbix zabbix]# tar zxf libmcrypt-2.5.7.tar.gz
[root@zabbix zabbix]# cd libmcrypt-2.5.7/
[root@zabbix libmcrypt-2.5.7]# ./configure --prefix=/usr/local/libmcrypt && make && make install # 编译并安装
[root@zabbix libmcrypt-2.5.7]# cd ..
[root@zabbix zabbix]# tar zxf php-5.6.27.tar.gz
[root@zabbix php-5.6.27]# ./configure --prefix=/usr/local/php5.6 --with-config-file-path=/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-gd --with-iconv --with-libxml-dir=/usr --with-mhash --with-mcrypt=/usr/local/libmcrypt --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-curl && make && make install
[root@zabbix php-5.6.27]# cp php.ini-production /etc/php.ini
[root@zabbix php-5.6.27]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@zabbix php-5.6.27]# chmod x /etc/init.d/php-fpm
[root@zabbix php-5.6.27]# chkconfig --add php-fpm
[root@zabbix php-5.6.27]# chkconfig php-fpm on
[root@zabbix php-5.6.27]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf
[root@zabbix php-5.6.27]# cd /
[root@zabbix /]# sed -i 's/pm.max_children = 5/pm.max_children = 50/g' /usr/local/php5.6/etc/php-fpm.conf
[root@zabbix /]# sed -i 's/pm.start_servers = 2/pm.start_servers = 5/g' /usr/local/php5.6/etc/php-fpm.conf
[root@zabbix /]# sed -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 5/g' /usr/local/php5.6/etc/php-fpm.conf
[root@zabbix /]# sed -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 35/g' /usr/local/php5.6/etc/php-fpm.conf
[root@zabbix /]# service php-fpm start # 启动php
Starting php-fpm done
[root@zabbix /]# netstat -anput | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 60347/php-fpm: mast
客户端访问定义的php页面:
3、安装及配置MySQL数据库
代码语言:javascript复制[root@zabbix ~]# sh mysql.sh # 执行脚本,等待一会出现如下提示表示安装成功
Starting MySQL. SUCCESS!
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@zabbix ~]# mysql -uroot -p123 #登录MySQL
mysql> create database zabbix character set utf8;
mysql> grant all on zabbix.* to zabbix@'localhost' identified by '123.com';
mysql> grant all on zabbix.* to zabbix@'192.168.171.%' identified by '123.com';
mysql> exit
4、部署zabbix服务
代码语言:javascript复制[root@zabbix zabbix]# tar zxf fping-3.12.tar.gz
[root@zabbix zabbix]# tar zxf zabbix-3.2.1.tar.gz
[root@zabbix zabbix]# cd fping-3.12/
[root@zabbix fping-3.12]# ./configure && make && make install
[root@zabbix fping-3.12]# cd ../zabbix-3.2.1/
[root@zabbix zabbix-3.2.1]# useradd -M -s /sbin/nologin zabbix
[root@zabbix zabbix-3.2.1]# chown zabbix:zabbix /usr/local/sbin/fping
[root@zabbix zabbix-3.2.1]# 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
[root@zabbix 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 && make && make install
#--enable-java:方便后续监控 tomcat 程序所用
#--with-openipmi:用户可以利用 IPMI 监视服务器的物理特征,如温度、电压、风扇工作状态、电源供应等
[root@zabbix zabbix-3.2.1]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/
[root@zabbix zabbix-3.2.1]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
#导入zabbix数据到MySQL,注意导入的顺序,如果导入后返回提示信息,可忽略,是因为导入的命令将密码展示在了终端
[root@zabbix zabbix-3.2.1]# pwd
/zabbix/zabbix-3.2.1
[root@zabbix zabbix-3.2.1]# cd database/mysql/
[root@zabbix mysql]# mysql -u zabbix -p123.com -h localhost zabbix < schema.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@zabbix mysql]# mysql -u zabbix -p123.com -h localhost zabbix < images.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@zabbix mysql]# mysql -u zabbix -p123.com -h localhost zabbix < data.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@zabbix mysql]# chown -R zabbix:zabbix /usr/local/zabbix/
5、优化zabbix并启动
代码语言:javascript复制#修改zabbix配置文件
[root@zabbix /]# sed -i 's/# ListenPort=10051/ListenPort=10051/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# sed -i 's/LogFile=/tmp/zabbix_server.log/LogFile=/usr/local/zabbix/logs/zabbix_server.log/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# sed -i 's/# PidFile=/tmp/zabbix_server.pid/PidFile=/usr/local/zabbix/logs/zabbix_server.pid/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# sed -i 's/# DBHost=localhost/DBHost=localhost/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# sed -i 's/# DBPassword=/DBPassword=123.com/g' /usr/local/zabbix/etc/zabbix_server.conf[root@zabbix /]# sed -i 's/# DBSocket=/tmp/mysql.sock/DBSocket=/usr/local/mysql/mysql.sock/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# sed -i 's/# DBPort=3306/DBPort=3306/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# sed -i 's/# FpingLocation=/usr/sbin/fping/FpingLocation=/usr/local/sbin/fping/g' /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix /]# sed -i 's/# LogSlowQueries=0/LogSlowQueries=3000/g' /usr/local/zabbix/etc/zabbix_server.conf
#如果数据库名称和数据库用户没有和我创建的一样,那么还需要更改以下两项
#DBName=zabbix #数据库名称
#DBUser=zabbix #登录数据库的用户名
[root@zabbix /]# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
[root@zabbix /]# ldconfig # 刷新上面更改的配置
[root@zabbix /]# mkdir /usr/local/zabbix/logs
[root@zabbix /]# chown -R zabbix:zabbix /usr/local/zabbix/
[root@zabbix /]# cd /zabbix/zabbix-3.2.1/misc/init.d/fedora/core
[root@zabbix core]# cp zabbix_agentd /etc/init.d/
[root@zabbix core]# cp zabbix_server /etc/init.d/
[root@zabbix core]# sed -i 's/BASEDIR=/usr/local/BASEDIR=/usr/local/zabbix/g' /etc/init.d/zabbix_server
[root@zabbix core]# sed -i 's/PIDFILE=/tmp/$BINARY_NAME.pid/PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid/g' /etc/init.d/zabbix_server
[root@zabbix core]# /etc/init.d/zabbix_server start #启动zabbix,也可以执行“zabbix-server”来启动
Reloading systemd: [ OK ]
Starting zabbix_server (via systemctl): [ OK ]
[root@zabbix core]# netstat -anput | grep 10051
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 74199/zabbix_server
[root@zabbix core]# cd /zabbix/zabbix-3.2.1/frontends/
[root@zabbix frontends]# cp -r php/ /usr/local/nginx/html/zabbix
6、client访问nginx代理以便配置zabbix 访问Nignx服务器的IP/zabbix即可,它会自动跳转到下面的页面:
上述所显示报错大概是php的配置项不符合其要求:
代码语言:javascript复制[root@zabbix /]# sed -i 's/post_max_size = 8M/post_max_size =16M/g' /etc/php.ini
[root@zabbix /]# sed -i 's/max_execution_time = 30/max_execution_time = 300/g' /etc/php.ini
[root@zabbix /]# sed -i 's/max_input_time = 60/max_input_time = 300/g' /etc/php.ini
[root@zabbix /]# sed -i 's/;date.timezone =/date.timezone = Asia/Shanghai/g' /etc/php.ini
[root@zabbix /]# sed -i 's/;always_populate_raw_post_data = -1/always_populate_raw_post_data = -1/g' /etc/php.ini
[root@zabbix /]# service php-fpm restart # 重启服务
Gracefully shutting down php-fpm . done
Starting php-fpm done
又报错,提示无法创建配置文件,让我们手动下载配置文件并上传到指定的目录,那就点击下载
代码语言:javascript复制[root@zabbix /]# ls /usr/local/nginx/html/zabbix/conf/zabbix.conf.php
/usr/local/nginx/html/zabbix/conf/zabbix.conf.php
输入zabbix用户名及密码进行登录(默认用户名:admin,密码:zabbix):
7、解决后续制作图表的中文乱码问题
代码语言:javascript复制[root@zabbix ~]# cd /usr/local/nginx/html/zabbix/fonts/ #切换至该目录
[root@zabbix fonts]# rz
[root@zabbix fonts]# ls
DejaVuSans.ttf simkai.ttf
[root@zabbix fonts]# sed -i 's/DejaVuSans/simkai/g' /usr/local/nginx/html/zabbix/include/defines.inc.php