分布式部署 Zabbix 监控平台
一、基本介绍
二、部署 LNMP 架构
1.配置 MySQL 服务
2.配置 Nginx+PHP 服务
1)安装 Nginx
2)安装 PHP
3.修改 PHP 配置文件
4.启动脚本
三、部署 Zabbix 监控平台
1.在 MySQL 中导入 Zabbix 所需的数据库
2.安装 Zabbix_Server 服务
3.配置 Zabbix_Server 主配置文件
4.配置 Zabbix_Agent 主配文件
5.启动服务和启动脚本
6.配置 Web 页面
7.验证
一、基本介绍
Zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级开源解决方案。
二、部署 LNMP 架构
准备工作:
- 实验所需软件包可以从这里下载:传送门(提取码:
9m8z
)
1.配置 MySQL 服务
192.168.1.3 上操作
[root@mysql ~]# yum -y install mariadb mariadb-server mariadb-libs mariadb-devel # 安装 MariaDB 服务 [root@mysql ~]# systemctl start mariadb # 启动 MariaDB 服务 [root@mysql ~]# mysql_secure_installation # 配置数据库初始化 Enter current password for root (enter for none): # 直接回车 Set root password? [Y/n] y # 是否配置 root 密码 Remove anonymous users? [Y/n] n # 是否删除匿名用户 Disallow root login remotely? [Y/n] n # 是否不允许 root 远程登录 Remove test database and access to it? [Y/n] n # 是否删除 test 数据库 Reload privilege tables now? [Y/n] y # 是否重载数据库表 [root@mysql ~]# mysql -uroot -p123123 MariaDB [(none)]> grant all on *.* to root@'%' identified by '123456'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> exit
2.配置 Nginx+PHP 服务
192.168.1.2 上操作
1)安装 Nginx
[root@nginx_php ~]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel [root@nginx_php ~]# ls anaconda-ks.cfg libmcrypt-2.5.7.tar.gz nginx-1.10.3.tar.gz php-5.6.36.tar.gz [root@nginx_php ~]# tar xf nginx-1.10.3.tar.gz -C /usr/src/ [root@nginx_php ~]# cd /usr/src/nginx-1.10.3/ [root@nginx_php nginx-1.10.3]# useradd -s /sbin/nologin nginx [root@nginx_php nginx-1.10.3]# ./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 \ --with-http_ssl_module \ --with-http_gzip_static_module \ --user=nginx --group=nginx && make && make install
创建软链接优化执行路径
[root@nginx_php nginx-1.10.3]# cd [root@nginx_php ~]# ln -s /usr/local/nginx/sbin/* /usr/local/bin/
2)安装 PHP
[root@nginx_php ~]# 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
[root@nginx_php ~]# tar zxf libmcrypt-2.5.7.tar.gz -C /usr/src/ [root@nginx_php ~]# cd /usr/src/libmcrypt-2.5.7/ [root@nginx_php libmcrypt-2.5.7]# ./configure \ --prefix=/usr/local/libmcrypt && make && make install [root@nginx_php libmcrypt-2.5.7]# cd
[root@nginx_php ~]# tar zxf php-5.6.36.tar.gz -C /usr/src/ [root@nginx_php ~]# cd /usr/src/php-5.6.36/ [root@nginx_php php-5.6.36]# ./configure \ --prefix=/usr/local/php5.6 \ --with-config-file-path=/etc \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --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=/usr/local/libmcrypt \ --with-curl [root@nginx_php php-5.6.36]# make && make install [root@nginx_php php-5.6.36]# cp php.ini-production /etc/php.ini
3.修改 PHP 配置文件
[root@nginx_php php-5.6.36]# vim /etc/php.ini 修改: 202 short_open_tag = On # 支持短标签 363 expose_php = Off # 禁止显示 PHP 版本 372 max_execution_time = 300 # PHP 脚本最大执行时间 382 max_input_time = 300 # 以秒为单位对通过 POST | GET 以及 PUT 方式接收数据进行限制 660 post_max_size = 16M # 上传文件大小限制 702 always_populate_raw_post_data = -1 936 date.timezone = Asia/Shanghai # 配置时区 1811 mbstring.func_overload = 0
4.启动脚本
[root@nginx_php php-5.6.36]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm # 配置启动脚本 [root@nginx_php php-5.6.36]# chmod +x /etc/init.d/php-fpm [root@nginx_php php-5.6.36]# chkconfig --add php-fpm # 配置成系统服务 [root@nginx_php php-5.6.36]# cd
1)修改 php-fpm 配置文件
[root@nginx_php ~]# cp /usr/local/php5.6/etc/php-fpm.conf.default /usr/local/php5.6/etc/php-fpm.conf [root@nginx_php ~]# vim /usr/local/php5.6/etc/php-fpm.conf 25 pid = run/php-fpm.pid # PHP 进程位置 149 user = nginx # 运行用户 150 group = nginx # 运行组 164 listen = 127.0.0.1:9000 # PHP 监听 IP 和端口 241 pm.max_children = 300 # 子进程最大数 246 pm.start_servers = 10 # 启动时的进程数 251 pm.min_spare_servers = 10 # 保证空闲进程数最小值. 如果空闲进程小于此值. 则创建新的子进程 256 pm.max_spare_servers = 50 # 保证空闲进程数最大值. 如果空闲进程大于此值. 则进行清理
[root@nginx_php ~]# /etc/init.d/php-fpm start # 开启 PHP 服务 [root@nginx_php ~]# netstat -anpt | grep php-fpm # 查看端口是否开启
2)修改 Nginx 配置文件,支持 PHP
[root@nginx_php ~]# cd /usr/local/nginx/conf/ [root@nginx_php conf]# rm -rf nginx.conf [root@nginx_php conf]# vim nginx.conf user nginx; worker_processes 4; error_log logs/error.log; 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; keepalive_timeout 65; server { listen 80; server_name localhost; charset utf-8; 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 500 502 503 504 /50x.html; location = /50x.html { root html; } } } [root@nginx_php conf]# nginx -t # 检查 Nginx 主配置文件是否正确 [root@nginx_php conf]# nginx # 启动 [root@nginx_php conf]# netstat -anpt | grep 80 # 查看端口是否开启
3)验证 LNMP
[root@nginx_php ~]# vim /usr/local/nginx/html/test1.php <?php phpinfo() ?>
[root@nginx_php ~]# vim /usr/local/nginx/html/test2.php <?php $link=mysqli_connect('192.168.1.3','root','123456'); if($link) echo "恭喜你,数据库连接成功了!!"; mysqli_close($link); ?>
三、部署 Zabbix 监控平台
1.在 MySQL 中导入 Zabbix 所需的数据库
[root@mysql ~]# mysql -u root -p123123 MariaDB [(none)]> create database zabbix character set utf8; MariaDB [(none)]> grant all on zabbix.* to zabbix@'192.168.1.%' identified by 'zabbix'; MariaDB [(none)]> grant all on zabbix.* to zabbix@localhost identified by 'zabbix'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> exit
[root@mysql ~]# ls anaconda-ks.cfg zabbix-4.2.6.tar.gz [root@mysql ~]# tar zxf zabbix-4.2.6.tar.gz -C /usr/src/ [root@mysql ~]# cd /usr/src/zabbix-4.2.6/ [root@mysql zabbix-4.2.6]# mysql -uzabbix -pzabbix zabbix < database/mysql/schema.sql [root@mysql zabbix-4.2.6]# mysql -uzabbix -pzabbix zabbix < database/mysql/images.sql [root@mysql zabbix-4.2.6]# mysql -uzabbix -pzabbix zabbix < database/mysql/data.sql
2.安装 Zabbix_Server 服务
[root@zabbix ~]# yum -y install createrepo [root@zabbix ~]# ls anaconda-ks.cfg zabbix-4.2.6.tar.gz zabbix_rpm.tar.gz [root@zabbix ~]# tar zxf zabbix_rpm.tar.gz -C /mnt [root@zabbix ~]# createrepo /mnt/zabbix_rpm [root@zabbix ~]# cat <<END > /etc/yum.repos.d/zabbix.repo [zabbix] name=zabbix baseurl=file:///mnt/zabbix_rpm enabled=1 gpgcheck=0 END
[root@zabbix ~]# 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 libevent libevent-devel gcc* libxml2-devel mysql-devel
[root@zabbix ~]# groupadd zabbix # 创建 zabbix 组 [root@zabbix ~]# useradd -s /sbin/nologin -g zabbix zabbix # 创建 zabbix 用户并加入组 [root@zabbix ~]# tar xf zabbix-4.2.6.tar.gz -C /usr/src [root@zabbix ~]# cd /usr/src/zabbix-4.2.6 [root@zabbix zabbix-4.2.6]# ./configure \ --prefix=/usr/local/zabbix \ --enable-server \ --enable-agent \ --enable-java \ --with-net-snmp \ --with-libcurl \ --with-libxml2 \ --with-openipmi \ --with-mysql && make && make install
注解:
- --enable-server:支持 zabbix server。
- --enable-agent:支持 zabbix agent。
- --enable-java:支持 java 应用监控(例如:监控 Tomcat 服务)
- --with-net-snmp:支持 snmp 协议。
- --with-libcurl:支持 CURL 功能(主要功能就是用不同的协议连接不同的服务)
- --with-openipmi:用户可以利用 IPMI 监视服务器的物理特征。
- --with-mysql:指定 MySQL 数据库。
- --with-proxy:支持 zabbix 代理服务器。
创建软链接优化执行路径
[root@zabbix zabbix-4.2.6]# ln -s /usr/local/zabbix/bin/* /usr/local/bin/ [root@zabbix zabbix-4.2.6]# ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
3.配置 Zabbix_Server 主配置文件
[root@zabbix ~]# vim /usr/local/zabbix/etc/zabbix_server.conf LogFile=/usr/local/zabbix/zabbix_server.pid # 进程号存放路径 PidFile=/usr/local/zabbix/logs/zabbix_server.log # 日志存放路径 DBHost=192.168.1.3 # 数据库 IP 地址 DBName=zabbix # 数据库名 DBUser=zabbix # 数据库用户 DBPassword=zabbix # 数据库密码 Include=/usr/local/zabbix/etc/zabbix_server.conf.d/*.conf # 开启子配置文件目录 DBPort=3306 # 数据库端口号 Timeout=4 # 与 AGENT | SNMP 设备和其他外部设备通信超时设置. 单位为秒 LogSlowQueries=3000 # 服务端数据库慢查询功能. 单位是毫秒 StatsAllowedIP=127.0.0.1,192.168.1.0/24 # 来源 IP 访问控制限制
4.配置 Zabbix_Agent 主配文件
[root@zabbix ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf LogFile=/usr/local/zabbix/zabbix_agentd.pid PidFile=/usr/local/zabbix/logs/zabbix_agentd.log Server=127.0.0.1 # Zabbix Server 主机 IP 地址 ServerActive=127.0.0.1 # 采集数据发送到 Server 端 IP Hostname=zabbix # 本机主机名 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf # 开启子配置文件目录
创建进程号存放路径,并赋权
[root@zabbix ~]# mkdir /usr/local/zabbix/logs # 创建日志存放路径 [root@zabbix ~]# chown -R zabbix:zabbix /usr/local/zabbix/ # 修改目录属主.属组
5.启动服务和启动脚本
[root@zabbix ~]# cd /usr/src/zabbix-4.2.6/misc/init.d/ [root@zabbix init.d]# cp fedora/core/* /etc/init.d/ # 配置 zabbix 的启动脚本
[root@zabbix init.d]# vim /etc/init.d/zabbix_server 22 BASEDIR=/usr/local/zabbix # 安装目录 31 PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid # PID 文件路径
[root@zabbix init.d]# vim /etc/init.d/zabbix_agentd 22 BASEDIR=/usr/local/zabbix # 安装目录 31 PIDFILE=/usr/local/zabbix/logs/$BINARY_NAME.pid # PID 文件路径
[root@zabbix init.d]# chkconfig --add zabbix_server # 配置成系统服务 [root@zabbix init.d]# chkconfig --add zabbix_agentd [root@zabbix init.d]# chkconfig zabbix_server on # 配置开机自启 [root@zabbix init.d]# chkconfig zabbix_agentd on
[root@zabbix init.d]# systemctl start zabbix_server zabbix_agentd # 开启 Server 和 Agent 服务 [root@zabbix init.d]# netstat -anpt | egrep '10051|10050' tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 30040/zabbix_agentd tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 30316/zabbix_server
6.配置 Web 页面
[root@nginx_php ~]# ls anaconda-ks.cfg nginx-1.10.3.tar.gz zabbix-4.2.6.tar.gz libmcrypt-2.5.7.tar.gz php-5.6.36.tar.gz [root@nginx_php ~]# tar xf zabbix-4.2.6.tar.gz -C /usr/src/ [root@nginx_php ~]# cd /usr/src/zabbix-4.2.6/ [root@nginx_php zabbix-4.2.6]# cp -r frontends/php/* /usr/local/nginx/html/ # 配置 zabbix 安装界面 [root@nginx_php zabbix-4.2.6]# chown -R nginx:nginx /usr/local/nginx/html/ # 修改目录的属主.属组 [root@nginx_php zabbix-4.2.6]# nginx -s reload # 重载 Nginx 服务 [root@nginx_php zabbix-4.2.6]# /etc/init.d/php-fpm restart # 重启 PHP 服务
7.验证
解决 Zabbix 监控时出现乱码情况:
- 在 Windows 中:控制面板 -- 外观和个性化 -- 字体(找到楷体上传即可)
[root@nginx_php ~]# cd /usr/local/nginx/html/assets/fonts/ [root@nginx_php fonts]# ls DejaVuSans.ttf simkai.ttf # 上传楷体并替换原有字体 [root@nginx_php fonts]# mv simkai.ttf DejaVuSans.ttf mv:是否覆盖"DejaVuSans.ttf"? y