一、前言
系统版本:CentOS Linux release 8.2.2004 (Core)
说明:CentOS-7、CentOS-8部署方法一样,区别el7、el8安装包,我这里用的是8.2系统。
二、准备安装包
说明:因为我的是专网设备,不能访问外网,需要在可连接外网的虚拟机上汇集安装包,在上传到专网设备部署。如果你们的设备可以访问外网,可直接使用官方的repo文件进行安装。如果情况和我相同,虚拟机上安装的操作系统要和线上设备的系统一致。
CentOS官网镜像:https://mirror.nsc.liu.se/centos-store/
zabbix官网源:https://repo.zabbix.com/zabbix/
以下在可连接外网的虚拟机上操作:
shell> rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm 下载官方repo文件
shell> yum clean all && yum makecache
shell> mkdir /root/zabbix 创建一个目录,存放zabbix安装包
下载安装包
shell> yum install -y zabbix-server-mysql.x86_64 zabbix-agent.x86_64 zabbix-web-mysql.noarch zabbix-apache-conf.noarch zabbix-sql-scripts.noarch zabbix-selinux-policy.x86_64 zabbix-get.x86_64 --downloadonly --downloaddir=/root/zabbix/
shell> cp /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX /root/zabbix/ 复制zabbix key文件
shell> tar -zcvf zabbix6.0_el8.tar.gz zabbix/ 打包,并上传到专网设备
三、安装数据库
以下在专网设备上操作(线上环境)
说明:数据库可自行选择MySQL或MariaDB。我这里选择MySQL-8.0.28版本,采用二进制方式安装。
MySQL官网下载地址:https://downloads.mysql.com/archives/community/
下载好,并上传到服务器(如果是Xshell工具,可直接将安装包拖入到窗口。拖不上去yum install -y lrzsz.x86_64安装完重新拖入)
shell> tar -xvf mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
shell> mv /usr/local/mysql-8.0.28-linux-glibc2.12-x86_64 /usr/local/mysql8 改个名
shell> useradd -M mysql -s /sbin/nologin 创建MySQL系统用户(不可shell登录)
shell> mkdir -p /mysql/{mysql-data,mysql-log} 创建数据目录
shell> mkdir /run/mysqld 创建mysql-pid文件目录
shell> chown -R mysql.mysql /mysql/ && chown -R mysql.mysql /run/mysqld/
属主属组改为mysql,让mysql对这些目录有足够的权限
shell> vim /etc/my.cnf 创建配置文件,二进制安装没有该文件,需要手动创建
[mysqld]
datadir=/mysql/mysql-data
socket=/mysql/mysql-data/mysql.sock
log-error=/mysql/mysql-log/mysqld.log
pid-file=/run/mysqld/mysqld.pid
shell> cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysqld 复制启动文件
shell> vim /etc/init.d/mysqld
初始化数据库
shell> cd /usr/local/mysql8/bin/
shell> ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql8 --datadir=/mysql/mysql-data
shell> vim /etc/profile 添加环境变量
# MySQL
export MYSQL_HOME=/usr/local/mysql8
export PATH=$PATH:$MYSQL_HOME/bin
shell> source /etc/profile
shell> /etc/init.d/mysqld start
已成功启动
shell> cat /mysql/mysql-log/mysqld.log | grep -i 'password' 查看root用户初始密码
shell> mysql -u root -p
登录报错:error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory找不到 libtinfo.so.5这个文件
shell> yum install -y ncurses-compat-libs
安装好以后报错,找不到sock套接字文件
shell> ln -s /mysql/mysql-data/mysql.sock /tmp/ 执行完成后重新登录MySQL
mysql> alter user 'root'@'localhost' identified by '新密码'; 修改root用户密码(默认不支持123456这种简单的密码,线上环境不建议改密码复杂策略)
为zabbix创建数据库和用户
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user 'zabbix'@'%' identified with mysql_native_password by '密码';
mysql> grant all privileges on zabbix.* to 'zabbix'@'%';
mysql> flush privileges;
说明:MySQL8.0开始默认使用caching_sha2_password验证插件,需要改为mysql_native_password验证插件,否则zabbix连不上数据库。而且不支持grant语句同时创建用户和授权,需要先创建用户在授权
加入开机自启
shell> chkconfig --add /etc/init.d/mysqld
shell> chkconfig --level 345 mysqld on
shell> /etc/init.d/mysqld restart
到这里数据库的安装和配置已基本完成
四、安装zabbix
将汇集好的安装包上传到专网设备中,做成repo源 (当然也可以rpm来安装)
shell> tar -zxvf zabbix6.0_el8.tar.gz -C /media/ 解压路径自定义
shell> yum install -y createrepo_c.x86_64
shell> createrepo /media/zabbix/
shell> vim /etc/yum.repos.d/zabbix.repo 创建repo文件
[zabbix_6.0]
name=zabbix_6.0
baseurl=file:///media/zabbix/
enabled=1
gpgcheck=0
gpgkey=file:///media/zabbix/RPM-GPG-KEY-ZABBIX
shell> yum clean all && yum makecache
已识别到zabbix源
安装zabbix
shell> yum install -y zabbix-server-mysql.x86_64 zabbix-web-mysql.noarch zabbix-apache-conf.noarch zabbix-sql-scripts.noarch zabbix-selinux-policy.x86_64 zabbix-agent.x86_64 zabbix-get.x86_64
shell> mysql -u root -p 登录到数据库
mysql> set global log_bin_trust_function_creators=1;
回到shell终端执行
shell> zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix 导入zabbix库表文件
导入成功后,再登入到数据库禁用log_bin_trust_function_creators选项
shell> mysql -u root -p
mysql> set global log_bin_trust_function_creators=0;
这时可以使用use zabbix; show tables; 检查zabbix库下是否有表文件
shell> vim /etc/zabbix/zabbix_server.conf 修改配置文件
zabbix默认会去/var/lib/mysql/下找数据库的mysql.sock套接字文件,需要配置一下sock路径(或者改成/tmp/mysql.sock,在安装数据库时已经做过软链接)
shell> systemctl restart zabbix-server.service zabbix-agent.service httpd.service php-fpm.service
启动zabbix_server端报错,使用journalctl -xe查看信息如下:
error: /usr/sbin/zabbix_server: undefined symbol: usmAES192PrivProtocol
需要更新net-snmp安装包,如果是外网环境就方便很多了,我的是专网设备只能去外网环境汇集安装包在上传更新。
有两种方法:
1、到可连接外网的虚拟机上使用外网repo源下载新版本,和汇集zabbix安装包方法一样;
2、可以在https://pkgs.org/search/?q=net-snmp下载对应系统版本和架构的安装包
shell> rpm -Uivh net-snmp-* 安装5.8.28版本
shell> systemctl restart zabbix-server.service 重新启动zabbix_server端
shell> netstat -anput | grep -E "zabbix|httpd" 检查端口
已经起来了
浏览器访问zabbix_web
1、在访问前将SElinux设置为宽容模式(状态要为Permissive或Disabled)
2、关闭firewalld.service或放行80、443、10050、10051端口
以上两步自行设置一下(不会的搜一下,一大把)
浏览器输入:http://server端ip地址/zabbix/
说明:如果此步骤连不上数据库检查以下两项:
1、检查zabbix用户的登录行为是否为%号,如果是localhost需要改成%号。因为使用Windows上的浏览器去访问Linux上的数据库,虽然zabbix_server和MySQL部署在同一台设备上但它不属于localhost连接行为(为安全考虑也可以设置为某个地址段或精准IP);
查询语句:select host,user,plugin from mysql.user;
根据各自需求配置
修改语句:rename user 'zabbix'@'localhost' to 'zabbix'@'%';
rename user 'zabbix'@'localhost' to 'zabbix'@'127.10.5.%'; 地址段(win地址)
rename user 'zabbix'@'localhost' to 'zabbix'@'127.10.5.9'; 精准IP(win地址)
flush privileges;
2、如果安装的是MySQL8版本,检查zabbix用户验证插件是否为mysql_native_password,因为MySQL8默认使用caching_sha2_password验证插件
查询语句:select host,user,plugin from mysql.user;
修改语句:alter user 'zabbix'@'%' identified with mysql_native_password by '新密码';
flush privileges;
到这里zabbix已部署完成
shell> systemctl enable zabbix-server.service zabbix-agent.service httpd.service php-fpm.service
加入开机自启
五、处理中文乱码问题
1、在Windows电脑上按win+r 输入:c:\windows\fonts 找一个看着得劲儿舒服的字体上传到设备
2、将字体文件放到/usr/share/zabbix/assets/fonts/下,找不到的话find / -name fonts 找一下
3、修改文件名。修改文件名就不用改配置文件了,省事儿
shell> systemctl restart zabbix-server.service 重启zabbix_server
六、添加自定义监控
说明:这里只简单演示一下,添加其他自定义监控都一样
需求:假如需要监控MySQL的PID值
1、配置zabbix_agent端
shell> vim /etc/zabbix/zabbix_agentd.conf 修改以下三项
Server=zabbix_server端地址
ServerActive=zabbix_server端地址
Hostname=zabbix_agent本机地址
shell> systemctl restart zabbix-agent.service 重启agent
2、用linux命令拿到MySQL的PID值
shell> ps -aux | grep $(netstat -anput | grep mysqld | grep -w 3306 | grep -v grep | awk -F '[ /]' '{print $58}') | awk '{print $2}'
3、拿到值后创建userparameter.conf文件,默认将文件放到/etc/zabbix/zabbix_agentd.d/下,也可以修改agent配置文件来指定位置。我这里就不改了,用默认的就行。需要改的话在配置文件中检索一下 Include 关键字。
shell> vim /etc/zabbix/zabbix_agentd.d/userparameter.conf
添加:UserParameter=mysql.pid, ps -aux | grep $(netstat -anput | grep mysqld | grep -w 3306 | grep -v grep | awk -F '[ /]' '{print $58}') | awk '{print $2}'
UserParameter:固定写法
mysql.pid:相当于取值的key,后面的ps命令相当于value
shell> systemctl restart zabbix-agent.service 重启agent,如果格式不对会报错
4、取值测试
在zabibx_server端执行:zabbix_get -s 目标IP地址 -k mysql.pid
5、将自定义监控添加到zabbix_web
说明:添加主机、主机群组、图形、聚合图形、触发器等自行完成,不会的可以自己研究一下。以下直接从添加监控开始(不然得嘎嘎截图,影响阅读)
七、zabbix监控单位设置
以上图为例,MySQL_PID是一个整数型的数值,添加完图形后zabbix自动给它转换成K了,值也变为小数,和实际有很大出入。需要进行以下设置
shell> vim /usr/share/zabbix/include/func.inc.php
说明:部署的方法不同,该文件不一定在这。可以用find / -name func.inc.php找一下
shell> systemctl restart zabbix-server.service 重启server端
在监控项中修改单位
配置完成~