Zabbix部署
Zabbix-Deployment
1. 介绍
Zabbix是一个免费的、开源的的监控系统,可以收集监控服务器、虚拟机和网络设备的指标。Zabbix有通知机制,用户可以自定义告警机制并通过邮件方式发送给用户,比如设置了磁盘剩余空间小于5%的阈值,就会触发相应的动作。基于已存储的数据,Zabbix可以提供数据的可视化。运维主要使用Zabbix监控服务器(实体机/虚拟机)的CPU、内存、网络和磁盘空间等指标。如果设置了磁盘使用空间大于95%的触发器和邮件通知,那么当磁盘空间低于5%时,Zabbix就会通过邮件发送通知。
2. 软硬件环境
Zabbix是基于C/S架构的,分为Server
和Agent
两部分,这里的部署使用两台虚拟机,一台虚拟机运行Server和Agent,另外一台虚拟机只运行Agent。
2.1 硬件环境
项 | 虚拟机1(Server) | 虚拟机2(Agent) |
---|---|---|
CPU | 8核心 | 4核心 |
内存 | 16G | 4G |
虚拟硬盘 | 100G vhd | 100G vhd |
IP | 172.16.11.141 | 172.16.11.197 |
2.2软件环境
项 | 虚拟机1(Server) | 虚拟机2(Agent) |
---|---|---|
操作系统 | Centos7 | Centos7 |
Zabbix | v5.0.2 (Server+agent) | v5.0.2 (agent) |
MySQL | 8.0 | 无 |
PHP | 7.2.11 | 无 |
Nginx | 1.18.0 | 无 |
3. 安装步骤
3.1 虚拟机1
虚拟机1上需要运行Server和agent两个端,agent是用作指标收集的,Server是用作统一管理和分析的agent收集的指标。Server端需要安装Zabbix Server+Agent,MySQL,PHP,Nginx。
(1)Zabbix Server+Agent
- 安装
wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.2.tar.gz #下载zabbix5.0.2版本
tar -zxvf zabbix-5.0.2.tar.gz #解压
mv zabbix-5.0.2 zabbix && cd zabbix #重命名并进入目录
groupadd --system zabbix #创建系统组
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix #创建用户.用户所属的组为系统的组zabbix;-d --home-dir为家目录;-s --shell为shell类型,/sbin/nologin为不可登录,可登录的有/bin/bash;-c --comment注释
yum install -y libevent-devel net-snmp-devel curl-devel #安装编译所需工具,可能会缺少另外的工具,需要根据报错信息搜索缺少的工具安装
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 #--prefix是安装目录;--enable-server开启服务端;--enable-agent开启客户端;--with-mysql使用mysql数据库,也有使用postgresql的--with-postgresql;--with-net-snmp使用snmp协议,可以发送邮件;--with-libcurl and --with-libxml2 configuration options are required for virtual machine monitoring;
make -j 8 #编译,-j --job启动8个工作进行编译
make install #安装
mkdir /var/www/html/zabbix #创建Zabbix前端UI项目目录
cd ui #进入解压的源码包的ui目录
cp -a . /var/www/html/zabbix/ #复制文件到目录/var/www/html/zabbix/,后面部署nginx作为代理使用
- 配置
上述安装完成后,会在/usr/local/zabbix/etc
目录下生成zabbix的相关配置文件,其中文件zabbix_server.conf
是服务端的配置文件,zabbix_agentd.conf
是客户端的配置文件。这里需要配置agent端的服务端IP,告诉agent哪个是Server;需要配置Server端数据库配置,告诉Server端使用哪个数据库、连接用户和密码。Zabbix安装时有默认值,可以根据自己所需进行修改。
zabbix_server.conf
文件:
DBHost=127.0.0.1
DBName=zabbix
DBUser=zabbix
DBPassword=qazqaz
zabbix_agent.conf
文件:
Server=127.0.0.1
- 运行
配置文件更改后,即可运行Server端和Agent程序了。执行命令:
/usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf #启动服务端
/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf #启动客户端
(2)MySQL
MySQL为了方便,我这里使用Docker容器引擎运行MySQL,注意,在生产环境下不推荐把MySQL部署成容器运行,如会存在数据损坏等风险。
- 安装运行
wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm #下载mysql源
rm mysql-community-release-el7-5.noarch.rpm #安装源
yum update #更新源
yum install mysql-server #使用源工具安装
systemctl start mysqld #启动 MySQL
chown -R mysql:mysql /var/lib/mysql #授权
mysqld --initialize #初始化 MySQL
###然后发现连接不上mysql
#error: 'Access denied for user 'root'@'localhost' (using password: NO)'
###修改/etc/my.cnf
sed -i '$a skip-grant-tables' /etc/my.cnf #在文件最后一行添加一行“skip-grant-tables”临时关闭用户验证,这样MySQL会开启skip_networking,无法通过远程连接,后面会恢复用户验证,这里是为了更改root密码。
systemctl restart mysqld 重启MySQL服务
mysql -uroot
进入了MySQL终端,先刷新权限,然后修改root用户密码:
mysql> flush privileges; #刷新权限
###
#这里为了可以使用弱密码,修改了MySQL的密码要求验证策略
mysql> set global validate_password.policy=0;
mysql> set global validate_password.length=1;
###
mysql> alter user 'root'@'localhost'IDENTIFIED BY '10010';#修改root用户密码
- 初始化
zabbix
数据库
mysql> create database zabbix character set utf8 collate utf8_bin; #创建zabbix数据库
mysql> create user zabbix identified by 'qazqaz'; #创建zabbox数据库连接用户,密码为qazqaz
mysql> grant all privileges on zabbix.* to zabbix; #授权zabbix数据库所有的权限给zabbix用户
#Ctrl+D退出MySQL终端
cd ~/zabbix/database/mysql #进入Zabbix源码包下的MySQL数据库目录
#编辑一个sql导入顺序的文件,其中schema文件是建表结构。
cat > all.sql << EOF
> source schema.sql;
> source images.sql;
> source data.sql;
> source double.sql;
> EOF
mysql -uzabbix -pqazqaz #进入MySQL终端
mysql> use zabbix; #使用zabbix schema(数据库)
mysql> source all.sql; #执行顺序导入语句
#Ctrl+D退出MySQL终端
sed -i '$d' /etc/my.cnf #删除添加的’skip-grant-tables‘,不删除这个选项无法使用MySQL的tcp协议的3306端口,意味着无法连接!!!
systemctl restart mysqld #重启mysql服务,让配置文件生效
至此,MySQL数据库已经准备完成。
(3)PHP
- 安装
yum install -y oniguruma-devel libicu-devel
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-zlib --enable-bcmath --with-curl --enable-mbregex --enable-mbstring --enable-sockets --with-gettext --with-gd --with-jpeg-dir --with-freetype-dir
make -j 8
###注意:###
#如果编译过程中报错undefined reference to symbol 'ber_scanf'
#编辑MakeFile,找到 开头是 ‘EXTRA_LIBS’ 这一行,在结尾加上'-llber'
make install
- 配置
cp php.ini-production /usr/local/php/etc/php.ini #这个文件在解压的源码包目录下
cd /usr/local/php/
cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf
cp etc/php-fpm.conf.default etc/php-fpm.conf
groupadd www-data #创建www-data用户组
useradd -g www-data -s /sbin/nologin www-data #创建www-data用户,属于www-data用户组(-g --group),类型为不可登录(-s --shell)
创建了PHP-FPM的运行用户www-data
后,再编辑相关的配置文件,其中编辑php.ini
文件是满足Zabbix
的pre-requisites
,编辑www.conf
文件是设置PHP-FPM的启动用户和用户组。
etc/php.ini
文件
post_max_size = 16M
max_input_time = 300
max_execution_time = 300
date.timezone = Asia/Shanghai
etc/php-fpm.d/www.conf
文件
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = www-data
group = www-data
- 运行
最后,启动PHP的FPM进程:
cd usr/local/php
sbin/php-fpm
(4)Nginx
- 安装
wget http://nginx.org/download/nginx-1.18.0.tar.gz #wget下载nginx源码包,或者使用curl下载:curl -O http://nginx.org/download/nginx-1.18.0.tar.gz -O是--remote-name Write output to a file named as the remote file
tar -zxvf nginx-1.18.0.tar.gz #解压下载的源码压缩包 -z(--gzip)针对gzip的压缩,-x(--extract)是提取,-f保留原有压缩包的文件结构,-v打印详情
mv nginx-1.18.0 nginx #重命名文件夹
cd nginx #进入目录
./configure --prefix=/usr/local/nginx --with-http_ssl_module #执行configure会检查所需的库,成功后会生成一个Makefile文件,--prefix是执行安装的路径,--with-http_ssl_module是添加ssl模块支持,这里不会用到,可以执行./configure --help查看本版本支持的选项功能
make -j 8 #编译,-j为--job,开启8个工作任务
make install #执行安装,这里会把编译生成的程序文件拷贝到安装目录下并创建相关的文件夹
- 配置
cd /usr/local/nginx
groupadd nginx #创建nginx用户组
useradd -g nginx -s /sbin/nologin nginx #创建www-data用户,属于nginx用户组(-g --group),类型为不可登录(-s --shell)
chown -R nginx:nginx /usr/local/nginx #修改目录及目录下的文件的所属组和用户为nginx
编辑/usr/local/nginx/conf/nginx.conf
文件
user nginx; #使用nginx用户
worker_processes auto;
#...此处省略默认
events {
use epoil;
worker_connections 65535;
}
http {
include mime.types;
default_type application/octet-stream;
#...此处省略默认
include ../conf.d/*.conf; #包含conf.d目录下的配置文件
#...此处省略默认
}
新增/usr/local/nginx/conf.d/zabbix.conf
文件
server {
listen 172.16.11.141:3000; #设置运行端口为3000
server_name 172.16.11.141; #服务端的IP
location / {
root /var/www/html;
index index.php index.html index.htm;
}
location ~ \.php {
root /var/www/html;
fastcgi_index index.php; #PHP index页面
fastcgi_pass 127.0.0.1:9000; #配置fastcgi服务器,请求会转发到fastcgi服务器(可以理解为PHP解析器),IP和端口在php中配置
include fastcgi_params; #加入fastcgi_params,如下面的fastcgi_param参数
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
- 运行
最后,启动nginx服务器:
cd /usr/local/nginx
sbin/nginx
(5)Zabbix Web UI
- 配置
浏览器输入:http://172.16.11.141:3000/zabbix/setup.php
进入Zabbix Web UI界面,如下图所示:
下一步,检查zabbix的要求是否符合,如果不符合要求,可以搜查相关资料解决,如果版本一样并且是跟着上面的教程安装的话,应该所有的要求都是符合的,如下图所示:
下一步,配置数据库连接,填写数据库连接host、端口、用户和密码等,如下图所示:
下一步,配置zabbix server详细,取名为zabbix-server
,其中host为主机IP或域名,port为端口,name为标识名字,如下图所示:
下一步,可以看到安装的配置概述,如下图所示:
下一步,会在目录/var/www/html/zabbix/conf
下生成一个zabbix.conf.php
的配置文件,如果该目录读写权限不足,可能无法生成,如下图所示:
这时可以在浏览器下载文件zabbix.conf.php
,然后上传到服务器的/var/www/html/zabbix/conf
目录下,最后刷新页面即可,如下图所示:
单击finish,跳转到登录页面,输入默认的账号:Admin
,密码:zabbix
进行登录,如下图所示:
至此,zabbix server
部署完成,可以看到zabbix server is running yes
字样,浏览一下Latest data
可以看到名字的zabbix server
的host
主机有数据,证明agent
端正在运行。
3.2 虚拟机2
虚拟机2上只运行zabbix agent
,后续的新增主机只需要安装agent
端即可加入zabbix
监控了。
(1)Zabbix Agent
- 安装
wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.2.tar.gz #下载zabbix5.0.2版本
tar -zxvf zabbix-5.0.2.tar.gz #解压
mv zabbix-5.0.2 zabbix && cd zabbix #重命名并进入目录
groupadd --system zabbix #创建系统组
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix #创建用户.用户所属的组为系统的组zabbix;-d --home-dir为家目录;-s --shell为shell类型,/sbin/nologin为不可登录,可登录的有/bin/bash;-c --comment注释
yum install -y gcc libxml2-devel pcre-devel
./configure --prefix=/usr/local/zabbix --enable-agent
make -j 8
make install
- 配置(主动模式)
编辑/usr/local/zabbix/etc/zabbix_agentd.conf
文件
Server=172.16.11.141 #server端的IP
ServerActive=172.16.11.141 #agent的主动模式需要使用该配置
Hostname=ansible01 #主机名,下面在Web控制台上添加监控主机时,主机名要一致
- 运行
cd /usr/local/zabbix
sbin/zabbix_agentd -c etc/zabbix_agentd.conf
(2)Zabbix Web UI
浏览器输入:http://172.16.11.141:3000/zabbix
进入Zabbix Web控制台,选择Configuration
的Hosts
标签,如下图所示:
单击Create host
按钮,填写Host name
为ansible01
(与上面的配置文件Hostname
一致),选择一个Groups
,填写运行agent
端的服务器IP地址172.16.11.197
,最后切换到Templates
标签,选择一个监控模板Template OS Linux by Zabbix agent active
,如下图所示:
然后单击add
添加主机,可以在Configuration
的Hosts
标签看到新增的Host
主机,如下图所示:
等待3-5分钟,可以在Monitoring
下的Latest data
选择ansible01
主机的查看获取的数据,如下图所示:
遇到的问题:关于选择的Templates,如果选择Template OS Linux by Zabbix agent active
(带active字样),Availability
的ZBX
不为绿色;如果选择Template OS Linux by Zabbix agent
(不带active字样),Availability
的ZBX
变为绿色。带有actice字样的应该是主动模式,不带active字样的被动模式,ZBX
是不是绿色都能获取监控的数据,不影响功能的使用,暂时原因不明。
更新:发现Template OS Linux by Zabbix agent active
包含的module全都是带active字样的,ZBX
灯绿不绿是看有没有添加了Template Module Zabbix agent
(不带active字样),不带active字样的是被动模式,如果想要灯绿,就逐个添加带active字样的Template Module,选择zabbix agent是选择不带active字样的。如下图添加的模板: