目录
一、实验环境
1.1 环境说明
1.2 准备工作(所有)
1.3 所涉及的软件及版本
1.3.1 zabbix体系结构
1.3.2 安装zabbix所需的软件
二、zabbix服务端安装lnmp(dnf)
2.1 安装nignx(dnf)
2.1.1 安装nginx(dnf)
2.1.2 安装指定版本nginx(dnf新特性)
2.2 安装mysql8.0 (dnf)
2.2.1 安装
2.2.2 修改配置文件
2.2.3 启动mysql
2.2.4 查看及修改mysql密码
2.2.5 使用SQL客户端工具登陆(SQLyog)
2.3 安装php7.4(dnf)
2.3.1 php安装(dnf)
2.3.2 修改php.ini
2.3.3 修改php-fpm配置
2.3.4 修改nginx配置让其支持php
2.3.5 启动php并测试
三、zabbix服务器端安装及配置
3.1 安装(dnf)
3.1.1 zabbix安装(dnf)
3.1.2 把zabbix脚本导入mysql中
3.2 修改zabbix配置
3.3 通过web配置zabbix
3.3.1 修改nginx
3.3.2 修改php-fpm配置
3.3.3 启动zabbix
3.3.4 安装zabbix
四、zabbix agent 客户端安装
4.1 安装agent
4.2 修改agent配置
4.2.1 agent的两种模式(主动和被动)
4.2.2 修改agent配置
4.3 启动agent客户端
五、测试
5.1 使用zabbix-get命令(服务端操作)
5.2 通用zabbix web添加监控
5.2.1 创建一个监控组
5.2.2 添加被监控主机
5.2.3 查看监控数据
六、其它
6.1 中文乱码
6.1.1 检查zabbix服务端是否安装了中文语言包
6.1.2 上传中文字体到zabbix服务端
6.1.3 修改字体相关的配置文件
6.2 切换中文界面
附录一、 安装基础软件及基础配置
1.1 centos8安装兼容包(已安装)
1.2 关闭selinux(重要)
1.3 关闭防火墙
1.4 时间同步(最好要)
1.5 安装常用软件
1.6 安装第三方源epel源及remi源(必要)
现在zabbix更新到了5.0了,所以我直接就用最新版本zabbix5.0,使用的是dnf安装,我这先安装,然后再给大家讲zabbix概念。
为全方便读者理解
- 在执行命令或命令代码段中添加了注解
- 命令或命令代码段中的注解不会影响命令执行,可以复制整个命令,粘贴即可
- 为了方便复制我把执行命令和效果命令分开,只复制执行命令即可,效果命令不用复制,效果命令主要是为了给读者看一下执行命令的效果
一、实验环境
Zabbix从3.0版本起,服务器端只支持centOS6以上版本(即centos7/8),客户端和代理可以支持centOS6
1.1 环境说明
#本文在centos8.2基础上进行安装
[root@vm82 ~]# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
主机名 | IP地址(外网) | IP地址(内网) | 描述 |
vm82 | ens32:192.168.128.82 | ens33:192.168.3.82 |
|
vm821 | ens32:192.168.128.21 | ens33:192.168.3.21 |
|
vm822 | ens32:192.168.128.22 | ens33:192.168.3.21 |
|
备注: |
|
1.2 准备工作(所有)
操作系统:centos8.2 64位,在安装mysql之前centos8.1做了
- 关闭了防火墙、selinux、时间同步、epel及remi源、
- 安装vim lrzsz wget curl man tree rsync软件
- 安装了gcc及gcc++ v8版本
其中防火墙、selinux强烈建议设置一下,其它可以不用,具体见附录一中的 1.6 安装第三方源epel源及remi源(必要)
#在vm821和vm822加入hosts绑定主机名
echo '192.168.3.82 vm82'>>/etc/hosts
echo '192.168.3.21 vm821'>>/etc/hosts
echo '192.168.3.22 vm822'>>/etc/hosts
1.3 所涉及的软件及版本
软件 | 版本 | 安装方式 | 备注 |
xshell | 6.0 | win exe | ssh连接连接工具 |
zabbix | 5.0.2 | dnf安装,使用目前最新版本 | 目前最新版本为4.4.8 |
nginx | 1.18.0 | dnf安装,使用目前最新版本 | dnf安装的最新版本 |
mysql | 8.0.21 | dnf安装,使用8.0 | 最新版本8.0 |
php | 7.4.9 | dnf安装,使用目前最新版本 | 目前最新版本 |
注:使用LNMP主要是做zabbix是以web方式管理的、以web形式展示数据 |
官方安装需求:https://www.zabbix.com/documentation/current/manual/installation/requirements
1.3.1 zabbix体系结构
1.3.2 安装zabbix所需的软件
从图中可以看出,安装zabbix需要如下:
1)Zabbix web是php写的,故需要安装php
2)Zabbix database是存放数据存的地方,只要关系型数据库都行,这里选择mysql
3) Zabbix server中可以看出是通过web页管理的,故需要安装http,这里选择nginx
4)Zabbix proxy这个是选择性安装的
可以选择LAMP或LNMP,我这里选择主流的LNMP环境,因为主要是用zabbix软件,所以LNMP环境用dnf安装Zabbix database和Zabbix server是可以分离的,这里为了实验方便,安装在同一台主上。
Zabbix Server:负责接收agent发送的报告信息的核心组 件,所有配置、统计数据及操作数据均由其组织进行;
Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据,以及存储在Zabbix所配置的配置信息,比如:哪个指标需要监控,多长时间监控一次等;
Web interface:zabbix的GUI接口,通常与Server运行在 同一台主机上;
也可以看官网的zabbix安装需求,主要是使用PHP+数据库,其它我就不一一列出来了
二、zabbix服务端安装lnmp(dnf)
在新版本zabbix5.0中,如果你不安装nginx,它也会用dnf/yum安装默认的nginx,版本为1.14,所以我先安装最新稳定版本
2.1 安装nignx(dnf)
2.1.1 安装nginx(dnf)
根据nginx官方centos安装文档,我直接配置yum源方式安装
#安装管理工具 yum-utils 用yum和dnf都可以
dnf install yum-utils -y#配置nginx官方yum源
cat>/etc/yum.repos.d/nginx.repo<<EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
cat /etc/yum.repos.d/nginx.repo
#官网默认nginx-mainline版本是禁止的,即 enabled=0,如果要开启,则会安装主线版本,而非稳定版本
#下面是开启命令,在这里不要开启 yum-config-manager --enable nginx-mainline#这个功能就是找到nginx-mainline 标签下设置enabled=1,使用下面命令也是等效的 #sed -i '/enabled=0/s/0/1/' /etc/yum.repos.d/nginx.repo
2.1.2 安装指定版本nginx(dnf新特性)
CentOS8给我们带来了一些新的特性,这次是完全用dnf取代了yum来进行包管理,同时在软件包管理上也有一些更新,增加了dnf module功能,dnf module在软件安装上更方便,可以通过dnf module install 在安装软件时指定安装的版本,默认dnf install安装时,优先安装软件仓库中最新版本,有了dnf module install 之后可以在不同软件版本之间切换。
在此之前先安装一个yum配置管理,方便管理
#安装yum配置管理
dnf install yum-utils -y
#列出nginx模块相关的版本
dnf module list nginx
效果如下:
#列出nginx模块相关的版本 [root@vm82 ~]# dnf module list nginx 上次元数据过期检查:0:06:30 前,执行于 2020年08月20日 星期四 13时17分38秒。 CentOS-8 - AppStream Name Stream Profiles Summary nginx 1.14 [d] common [d] nginx webserver nginx 1.16 common [d] nginx webserver Extra Packages for Enterprise Linux Modular 8 - x86_64 Name Stream Profiles Summary nginx mainline common nginx webserver 提示:[d]默认,[e]已启用,[x]已禁用,[i]已安装
发现上面的有2个源一个centos默认的AppStream,另一个是epel源,官方nginx源没有在dnf模块中。官方nginx存在仓库中
因后面使用remi源安装php7.4,一定会用到nginx模块依赖的,下图是我没有用dnf module install安装,而是用dnf install直接安装的截图,在截图中就会自动安装nignx默认版本
所以还得用dnf module 安装,我这里直接指定高一点的版本 ,从上面知道最后的版本为1.16
#安装nginx,这样会连官网稳定版本1.18和模块一起安装
dnf module install:1.16 -y
上面的主模块修改为官网最新稳定版本1.18,而并非是1.16版本
#查看版本,应该是目前最新稳定版本1.18.0
nginx -v
#检查语法
nginx -t#启动nginx
systemctl start nginx
systemctl status nginx
#查看是否开机启动
systemctl list-unit-files|grep enable|grep nginx
systemctl enable nginx
#隐藏版本号(可选)
为了nginx安全往往把版本号隐藏掉,不让显示出来
#在http{...}配置文件中添加server_tokens off;
cd /etc/nginx/
cp nginx.conf nginx.conf.orig
sed -i '/^http/a\ server_tokens off;' nginx.conf
grep -A 2 '^http' nginx.conf
#检查配置是否有误
nginx –t
#平滑重启nginx
systemctl reload nginx#备份一下nginx配置目录
cp -ar /etc/nginx /etc/nginx.orig
#注:有的机子reload没有生效的,只能直接重启!
PS:平滑重启就是先关闭已建议的连接再重启;重启则是暴力的,直接就重启了,不管nginx有没有在处理客户请求。
看一下是否能打开直接输入IP地址
PS:如果因添加官网的nginx源文件,导致php使用不了,可以先卸载再把nginx官方yum文件删除,直接使用dnf module install nginx:1.16 命令安装
2.2 安装mysql8.0 (dnf)
2.2.1 安装
根据mysql官网的yum库网页
知道它的下载地址就可以直接用rpm安装了,在安装之前查看是否存在mysql
#查看是否存在mysql,如果存在则需要执行yum remove mysql*进行
rpm -qa|grep mysql
yum remove mysql*
rpm -ih https://repo.mysql.com/mysql80-community-release-el8-1.noarch.rpm
#检查是否安装成功
yum repolist enabled | grep "mysql.*-community.*"
#查看当前MySQL Yum Repository中所有MySQL版本(每个版本在不同的子仓库中)
yum repolist all | grep mysql
#检查当前启动的仓库,如果同时启用了多个仓库,安装时会选择最新版本
yum repolist enabled | grep mysql
#安装依赖
dnf install perl openssl openssl-devel -y
#我这里使用官网mysql80-community安装,所以需要指定
dnf --repo mysql80-community install -y \
mysql-community-server mysql-community-devel mysql-community-clien
改为手工安装,因mysql源是国外源安装太慢了,现在我这里修改为手工安装按ctrl+c退出dnf 安装
#------------------------------------------手工安装开始-------------------------------------
#如果下载慢可以去官网仓库http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64
#手工下载,再上传到目录中用dnf命令安装,但是还是慢,所以使用国内仓库,可以是阿里云、163、搜狐等
#我这里使用的是华云镜像https://mirrors.huaweicloud.com/mysql 下载,操作如下:#建立相关目录
mkdir -p /disk1/tools/
cd /disk1/tools/
mkdir mysql8
cd mysql8
#下载相关mysql rpm包
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-community-common-8.0.21-1.el8.x86_64.rpm
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-community-libs-8.0.21-1.el8.x86_64.rpm
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-community-server-8.0.21-1.el8.x86_64.rpm
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-community-devel-8.0.21-1.el8.x86_64.rpm
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-community-client-8.0.21-1.el8.x86_64.rpm#安装rpm包,注意,一定要先安装mysql yum源,否则无法判断依赖关系
dnf install mysql*.rpm -y
cd ..#------------------------------------------手工安装结束-------------------------------------
2.2.2 修改配置文件
#1建立相关目录:
#建立相关目录
mkdir -pv /disk1/logs/mysql/mysql8.0/error
mkdir -pv /disk1/logs/mysql/mysql8.0/slow
mkdir -pv /disk1/mysqlData
chown mysql.mysql -R /disk1/logs/mysql
chown mysql.mysql -R /disk1/mysqlData
#2 修改my.cnf配置
cp /etc/my.cnf /etc/my.cnf.orig
vi /etc/my.cnf
#编辑配置文件并修改,黑色粗体部分为添加的,红色部分为修改的,普通黑色为原配置
[client]
#版本8不推荐用default-character-set=utf8
default-character-set = utf8mb4
[mysql]
#版本8不推荐用default-character-set=utf8
default-character-set = utf8mb4
[mysqld]
#datadir=/var/lib/mysql
datadir=/disk1/mysqlData
socket=/var/lib/mysql/mysql.sock
#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
##by hua尾行添加
#设置密码策略及长度,mysql5.7开始默认安装并开启validate_password插件
#第一次初始化运行的时候要去掉,否则因mysql初始化生成不了密码而起不来
#8.0不要
#5.7 validate_password_policy=0
#5.7 validate_password_length=4
#validate_password.policy=0
#validate_password.length=4
default-time-zone='+08:00'
port = 3306
#id是唯一的,不能与主库的server_id相同,多个的从库的话也不能与其它从库相同
server_id =1
#设置默认字符集,也可以取消,取消则用安装时的默认字符集(不指定一般为latin1)
#用show variables like '%char%';命令可以查看安装时的字符集是多少
default-storage-engine=INNODB
#版本8不推荐用character-set-server=utf8
character-set-server=utf8mb4
#版本8不推荐用collation-server=utf8_general_ci
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
innodb_file_per_table=1
#同步一定要开启bin log
log-bin=/disk1/logs/mysql/mysql8.0/mysql-bin
log-queries-not-using-indexes=on
log-error=/disk1/logs/mysql/mysql8.0/error/error.log
#记录慢查询,建议开启
slow-query-log = on
long_query_time = 3
slow_query_log_file=/disk1/logs/mysql/mysql8.0/slow/slowquery.log
#管理慢查询sql ,1为开启0为关闭
log-slow-admin-statements=1
#记录从库上执行的慢查询语句
log-slow-slave-statements=0
# 将没有使用索引的语句记录到慢查询日志
log-queries-not-using-indexes=1
PS:最好把编码改为UTF8MB4
PSS:my.cnf配置的符号一定要看清楚!我之前因复制word的时候,不知道为什么,符号变成中文了!
init_connect='SET NAMES utf8mb4'写成了init_connect=’SET NAMES utf8mb4 #单引号变成了 ’ ,还复制少了一个 ’ 号,没仔细看还真发现不了!#这样造成了 GRANT ALL PRIVILEGES 给所有权限用户没问题,但是指定权限,如执行 GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%'; #命令之后,发现使用此用户连接mysql都出问题,连接不上,直接在linux可以连接上,执行任何命令都 #报错:ERROR 2013 (HY000): Lost connection to MySQL server during query
还有一个问题就是init_connect=’SET NAMES utf8mb4 出现了几个重复!
init_connect='SET NAMES utf8mb4' init_connect='SET NAMES utf8mb4' collation-server=utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' init_connect='SET NAMES utf8mb4' #把单引号' 写成了 ’号,导致普通用户,不能执行任何sql命令! init_connect=’SET NAMES utf8mb4
所以配置my.cnf一定要看清楚!
注意:没修改就启动mysql8.0看错误日志会发现如下提示:
- --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
- 2019-11-05T08:53:37.233342Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8_general_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.
- 'validate password plugin' is deprecated and will be removed in a future release. Please use validate_password component instead
2.2.3 启动mysql
#mysql启动、停止、重启,前提是安装了net-tools,没有安装可以直接用systemctl 命令
#启动mysql
systemctl start mysqld#检查mysql状态、进程、端口号
systemctl status mysqld
ps -ef |grep mysql
netstat -altnp|grep 3306#设置开机启动
systemctl enable mysqld
PS:如果启动不起来可以使用如下方法
方法一:删除原来目录数据,再次启动让其重启生成数据
systemctl stop mysqld ps -ef |grep mysql rm -rf /disk1/mysqlData rm -rf /disk1/logs/mysql/mysql8.0 mkdir -p /disk1/logs/mysql/mysql8.0/error mkdir -p /disk1/logs/mysql/mysql8.0/slow mkdir -p /disk1/mysqlData chown mysql.mysql -R /disk1/logs/mysql chown mysql.mysql -R /disk1/mysqlData systemctl start mysqld systemctl status mysqld ps -ef |grep mysql netstat -altnp|grep 3306
方法二:如果还是解决不了,有可能selinux没关,请关闭selinux
方法三:按照上面的方法还是启动不起来,那么有可能是my.cnf没配置正确,或者相关目录没有授权,请仔细检查
2.2.4 查看及修改mysql密码
mysql8.0相对mysql5.6做了新的调整,密码并不是空密码,而是一个至少是8位的随机生成的密码,保存在错误日志中,通过查看/etc/my.cnf得知错误日志的路径我改为了“/disk1/logs/mysql/mysql8.0/error/error.log”,查看日志内容里面的密码
#mysql生成的密码放在my.cnf配置文件配置的错误日志中,每次安装密码都不同
grep "password is" /disk1/logs/mysql/mysql8.0/error/error.log
操作效果:
#mysql生成的密码放在my.cnf配置文件配置的错误日志中,每次安装密码都不同 [root@vm82 tools]# grep "password is" /disk1/logs/mysql/mysql8.0/error/error.log 2020-08-20T07:25:31.189597Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: lZPfim>l,3R(#登陆测试: [root@vm82 tools]# mysql -uroot -p Enter password: #输入上面的密码 lZPfim>l,3R( Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.21Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> \q #退出 Bye
第一次登陆mysql之后需要修改密码才能执行操作,否则会报如下错误:
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
而yum mysql8.0默认安装了validate_password安全插件(用二进制安装默认是没有的),默认情况是不能少于8位,密码强度为中级,如果我们要修改为简单的(字母+数字、纯数字、纯字母),则会报如下错误:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
所以我们要要修改安全策略,为了永久生效,已经添加到了my.cnf中,把注解去掉
sed -i '/#validate_password/s/#//g' /etc/my.cnf
grep '^validate_password' /etc/my.cnf
#重启mysql
systemctl restart mysqld
#效果 [root@vm82 mysql8]# grep '^validate_password' /etc/my.cnf validate_password.policy=0 validate_password.length=4
2.2.4.3 修改mysql密码
在修改了密码策略及长度的前提下,就可以设置比较简单的密码了
#特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了
#下面的语句是把本地为root的账号密码修改为123456
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
\q
效果:
#操作效果 #登录mysql进行密码修改 [root@vm82 tools]# mysql -uroot -p Enter password: #输入之前的mysql密码,我这里是lZPfim>l,3R( Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.21Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; #密码修改为123456 Query OK, 0 rows affected (0.05 sec)mysql> \q #退出 Bye[root@vm82 tools]# mysql -uroot -p Enter password: #输入新密码:123456 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 11 Server version: 8.0.21 MySQL Community Server - GPLCopyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>\q Bye
PS:如果要添加用户则用:grant PRIVILEGES
#下面是授权hua用户密码为123456,给访问所有数据库的权限,
#客户端IP址址只能是192.168开头的,但是在版本8不能用下面方式#mysql5.7版本,版本8不能使用此语句
#GRANT ALL PRIVILEGES ON *.* TO 'hua'@'192.168.%.%' IDENTIFIED BY '123456' WITH GRANT OPTION;#mysql8版本
CREATE USER 'hua'@'192.168.%.%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* to 'hua'@'192.168.%.%';
flush privileges;
也可以指定权限,下面语句,指定权权限给t1用户 ,密码为123456,数据库指定为hua,客户端IP址址只能是192.168开头
#mysql5.7 版本执行
#GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE TEMPORARY TABLES, DROP, INDEX, ALTER, LOCK TABLES ON hua.* TO 't1'@'192.168.%.%' IDENTIFIED BY '123456' WITH GRANT OPTION;#mysql8 版本执行
CREATE USER 't1'@'192.168.%.%' IDENTIFIED BY '123456';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE TEMPORARY TABLES, DROP, INDEX, ALTER, LOCK TABLES ON hua.* TO 't1'@'192.168.%.%';
flush privileges;
注:删除用户可以使用“drop user 用户名”,如 drop user 't1'@'192.168.%.%';
2.2.5 使用SQL客户端工具登陆(SQLyog)
2.2.5.1 使用mysql官方的workbench连接工具
我这里先用mysql官网推荐使用的客户端工具workbench,这个可以去mysql官网下载地址为:https://dev.mysql.com/downloads/workbench/
点上面的 No thanks, just start my download 则会弹出下载对话框,为了加快下载,我推荐使用迅雷,有加速的作用
下载完后安装即可,安装完成之后,双击运行,在弹出的窗口中点红色箭头添加连接
Query为查询窗口,怎么操作点上面的小图标就有提示了,这里不详解,如还是不懂可以搜索。
PS:除了查询之外,最常用的还有一个服务功能
上面设置完了之后,可以使用mysql客户端工具SQLyog或navicat for mysql 登记测试一下,我这里使用SQLyog
发现报错:plugin caching_sha2_password could not be loaded
分析:
因为SQLyog只支持mysql8.0之前的版本,密码加密方式是:mysql_native_password
mysql8和php7.4(准确说是php7.2.4之后)的默认密码加密方式是caching_sha2_password
解决:
可以把密码方式修改回mysql_native_password,但是会出现问题,php7.4连接不上mysql8.0,所以只要实验试一下即可。
#修改用户的验证方式,我这里修改为'hua'@'192.168.%.%' 用户
ALTER USER 'hua'@'192.168.%.%' IDENTIFIED WITH mysql_native_password BY 'hua123';
2.3 安装php7.4(dnf)
根据zabbix官方安装要求,找到PHP
FRONTEND
The minimum supported screen width for Zabbix frontend is 1200px.
Software | Version | Comments |
---|---|---|
Apache | 1.3.12 or later | |
PHP | 7.2.0 or later | |
PHP extensions: | ||
gd | 2.0.28 or later | PHP GD extension must support PNG images (--with-png-dir), JPEG (--with-jpeg-dir) images and FreeType 2 (--with-freetype-dir). |
bcmath | php-bcmath (--enable-bcmath) | |
ctype | php-ctype (--enable-ctype) | |
libXML | 2.6.15 or later | php-xml, if provided as a separate package by the distributor. |
xmlreader | php-xmlreader, if provided as a separate package by the distributor. | |
xmlwriter | php-xmlwriter, if provided as a separate package by the distributor. | |
session | php-session, if provided as a separate package by the distributor. | |
sockets | php-net-socket (--enable-sockets). Required for user script support. | |
mbstring | php-mbstring (--enable-mbstring) | |
gettext | php-gettext (--with-gettext). Required for translations to work. | |
ldap | php-ldap. Required only if LDAP authentication is used in the frontend. | |
openssl | php-openssl. Required only if SAML authentication is used in the frontend. | |
mysqli | Required if MySQL is used as Zabbix backend database. | |
oci8 | Required if Oracle is used as Zabbix backend database. | |
pgsql | Required if PostgreSQL is used as Zabbix backend database. |
如果需要支持特定要求的话需要安装
Mandatory requirements are needed always. Optional requirements are needed for the support of the specific function.
Requirement | Status | Description |
---|---|---|
libpcre | Mandatory | PCRE library is required for Perl Compatible Regular Expression (PCRE) support. The naming may differ depending on the GNU/Linux distribution, for example 'libpcre3' or 'libpcre1'. Note that you need exactly PCRE (v8.x); PCRE2 (v10.x) library is not used. |
libevent | Required for bulk metric support and IPMI monitoring. Version 1.4 or higher. Note that for Zabbix proxy this requirement is optional; it is needed for IPMI monitoring support. | |
libpthread | Required for mutex and read-write lock support. | |
zlib | Required for compression support. | |
OpenIPMI | Optional | Required for IPMI support. |
libssh2 or libssh | Required for SSH checks. Version 1.0 or higher (libssh2); 0.6.0 or higher (libssh). libssh is supported since Zabbix 4.4.6. | |
fping | Required for ICMP ping items. | |
libcurl | Required for web monitoring, VMware monitoring, SMTP authentication, web.page.* Zabbix agent items, HTTP agent items and Elasticsearch (if used). Version 7.28.0 or higher is recommended.Libcurl version requirements: - SMTP authentication: version 7.20.0 or higher - Elasticsearch: version 7.28.0 or higher | |
libxml2 | Required for VMware monitoring and XML XPath preprocessing. | |
net-snmp | Required for SNMP support. Version 5.3.0 or higher. | |
GnuTLS, OpenSSL or LibreSSL | Required when using encryption. |
为了显示,我全部安装,产生环境中建议按需求安装
2.3.1 php安装(dnf)
注意事项:
根据PHP官网解释,如果php连接mysql8.0,php的版本必须是PHP7.2.4之后
#1.安装php依赖
#启动PowerTools源,默认是关闭的
dnf config-manager --enable PowerTools
yum repolist all | grep PowerTools
#安装php依赖,
dnf install -y curl curl-devel
#php-devel需要用到libedit-devel
dnf --enablerepo=PowerTools install -y libedit-devel
dnf --enablerepo=PowerTools install -y OpenIPMI OpenIPMI-devel \
net-snmp net-snmp-devel
#安装选用 libpcre、libevent、zlib、libssh2、fping、libcurl、libxml2、net-snmp
dnf install -y pcre pcre-devel libevent libevent-devel zlib zlib-devel libssh2 libssh2-devel \
fping libcurl libcurl-devel libxml2 libxml2-devel
#2.安装php
安装PHP的不能直接dnf install安装,因为后面安装zabbix 前端的时候会用到php依赖,默认的是PHP7.2,查看如下:
#验证Remi存储库的存在,运行命令
rpm -qa | grep remi
#成功添加EPEL和Remi存储库后,执行以下命令以获取可用PHP模块流的列表。
dnf module list php
操作效果如下:
#效果,发现默认安装的是PHP7.2 [root@vm82 tools]# dnf module list php 上次元数据过期检查:2:01:46 前,执行于 2020年08月20日 星期四 14时51分04秒。 CentOS-8 - AppStream Name Stream Profiles Summary php 7.2 [d] common [d], devel, minimal PHP scripting language php 7.3 common [d], devel, minimal PHP scripting language Remi's Modular repository for Enterprise Linux 8 - x86_64 Name Stream Profiles Summary php remi-7.2 common [d], devel, minimal PHP scripting language php remi-7.3 common [d], devel, minimal PHP scripting language php remi-7.4 common [d], devel, minimal PHP scripting language 提示:[d]默认,[e]已启用,[x]已禁用,[i]已安装
如果不用dnf moudel安装的话,后台zabbix安装也会使用第三方源scl安装,zabbix官方文档 RHEL/CENTOS 7 FRONTEND INSTALLAT已经指出了,有兴趣的可以看一下。
这里要安装php7.4需要使用到remi源才可以,所发要用“附录一中的remi源安装”
我在这里使用的是remi源安装,点Configuration wizard
我们按上面命令要求,安装php7.4最新稳定版本7.4.9,操作命令如下:
#前3个在开始已经安装了,所以不用安装,安装也行,也会提示已经安装了
#dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
#dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
#dnf install yum-utils#重置php模块
dnf module reset php
#安装remi源的,php7.4版本
dnf module install php:remi-7.4 -y
#查看默认模块是不是改为php remi-7.4了
dnf module list php
#安装php扩展,这时的扩展安装的就是php7.4版本的了,并不是默认的php7.2
dnf install php php-devel php-mysql php-gd php-bcmath php-ctype php-xml \
php-xmlreader php-xmlwriter php-session php-mbstring php-gettext \
php-ldap php-fpm -y
注:
1.php-net-socket不用安装 dnf安装自动会--enable-sockets 通过phpinfo()测试就知道
2.php-mysqli默认支持通过phpinfo()测试就知道
2.3.2 修改php.ini
#备份配置文件
cp /etc/php.ini /etc/php.ini.orig
#使用sed命令进行修改配置文件
sed -i '/max_execution_time/s/30/300/' /etc/php.ini
#sed -i '/memory_limit/s/128/128/' /etc/php.ini
sed -i '/post_max_size/s/8/16/' /etc/php.ini
#sed -i '/upload_max_filesize/s/2/2/' /etc/php.ini
sed -i '/max_input_time/s/60/300/' /etc/php.ini
sed -i '/max_input_vars/s/; //' /etc/php.ini
sed -i '/max_input_vars/s/1000/10000/' /etc/php.ini
#php7.4没有always_populate_raw_post_da
sed -i '/always_populate_raw_post_dat/s/;//' /etc/php.ini
sed -i 's#;date.timezone =#date.timezone = Asia/Shanghai#' /etc/php.iniegrep "max_execution_time|memory_limit|post_max_size|upload_max_filesize\
|^max_input_time|max_input_vars|always_populate_raw_post_data|\
date.timezone =" /etc/php.ini
#操作效果 [root@vm82 tools]# egrep "max_execution_time|memory_limit|post_max_size|upload_max_filesize\ > |^max_input_time|max_input_vars|always_populate_raw_post_data|\ > date.timezone =" /etc/php.ini max_execution_time = 300 max_input_time = 300 ;max_input_vars = 10000 memory_limit = 128M post_max_size = 16M upload_max_filesize = 2M date.timezone = Asia/Shanghai
2.3.3 修改php-fpm配置
cd /etc/php-fpm.d/
cp www.conf www.conf.orig
egrep ";listen.owner =|;listen.group =|user =|group =|pm.max_children =|pm.max_requests =" www.conf
sed -i 's/apache$/nginx/g' www.conf
sed -i 's/nobody/nginx/g' www.conf
sed -i '/pm.max_children/s/50/70/' www.conf
sed -i '/;pm.max_requests/s/500/600/' www.conf
sed -i '/;pm.max_requests/s/;//' www.conf
egrep ";listen.owner =|;listen.group =|user =|group =|pm.max_children =|pm.max_requests =" www.confegrep "request_slowlog_timeout|slowlog =|php_admin_value\[error_log\] =|php_value[session.save_path\]" www.conf
sed -i '/slowlog =/s#var/log/php-fpm/www-slow.log#disk1/logs/php7.4/www-slow.log#' www.conf
sed -i '/;request_slowlog_timeout =/s#0#15#' www.conf
sed -i '/;request_slowlog_timeout =/s#;##' www.conf
sed -i 's#/var/log/php-fpm/www-error.log#/disk1/logs/php7.4/www-error.log#' www.conf
egrep "request_slowlog_timeout|slowlog =|php_admin_value\[error_log\] =|php_value\[session.save_path\]" www.conf#建立相关目录
mkdir -p /disk1/logs/php7.4
chown nginx.nginx -R /disk1/logs/php7.4
#因为用yum安装session目录默认用户是apache,如果修改为nginx也需要相应地修改,否则会出现网站登陆不了的情况
chown nginx.nginx -R /var/lib/php/session#查看php-fpm是基于端口运行还是基于sock,发现是基于sock
[root@vm82 php-fpm.d]# egrep 'listen = ' www.conf
listen = /run/php-fpm/www.sock
2.3.4 修改nginx配置让其支持php
cd /etc/nginx/conf.d/
cp default.conf default.conf.orig#让nginx支持php,编辑default.conf,第10行添加index.php
#再把30-36行注解去掉即可。
vim default.conf +10
注:如果配置34行的$document_root不行的话就改为/usr/share/nginx/html
#语法检查
nginx -t
#重启nginx
systemctl restart nginx
2.3.5 启动php并测试
#生成php文件
echo '<?php echo "this is php test";?>' >/usr/share/nginx/html/index.php#1)启动php
systemctl start php-fpm
systemctl status php-fpm
#2)测试php
echo '<?php phpinfo() ?>' >/usr/share/nginx/html/index.php
#打开本地浏览器输入服务器ip地址,我的为192.168.3.82
注:如果不能访问的话,说明防火墙没有关闭
#测试完后为了安全起见记得删除,养成好的习惯
rm -f /usr/share/nginx/html/index.php
三、zabbix服务器端安装及配置
3.1 安装(dnf)
3.1.1 zabbix安装(dnf)
进入zabbix官网下载页,选择好版本、系统、数据库、web,我这里选择如下:
接下来按着安装步骤安装即可
#安装zabbix源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
dnf clean all#安装zabbix服务端相关,zabbix_get工具比较实用,所以也添加上
dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-agent zabbix-get -y
PS:zabbix_get可以在server端获取监控项item的值
#发现直接用上面的安装命令安装会报错,所以我选择手工下载安装,我这里选择国内源,选择华为云吧
#建立相关目录
mkdir -pv /disk1/tools/zabbix5.0
cd /disk1/tools/zabbix5.0
#手工下载相关的zabbix包,我使用国内源,可以是阿里去镜像、华为云等,我这里使用华为云
wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-server-mysql-5.0.2-1.el8.x86_64.rpm
wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-web-mysql-5.0.2-1.el8.noarch.rpm
wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-web-5.0.2-1.el8.noarch.rpm
wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-nginx-conf-5.0.2-1.el8.noarch.rpm
wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-agent-5.0.2-1.el8.x86_64.rpm
#zabbix-get是一个命令行实用程序,可用于与Zabbix代理通信并从代理检索所需信息,所以也安装上
wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-get-5.0.2-1.el8.x86_64.rpm
ll
#dnf install安装rpm包的时候一定要添加zabbix源,否则会安装不成功
dnf install -y zabbix*.rpm
cd ~
3.1.2 把zabbix脚本导入mysql中
#登录mysql
mysql -uroot -p
#输入密码#执行相关SQL语句,在这里我密码设置为123456,
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by '123456';
grant all privileges on zabbix.* to zabbix@localhost;
\q#导入结构和数据,发现用zabbix用户导入报 MySQL server has gone away,所以直接用root用户
zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz |mysql -uzabbix -p zabbix
3.2 修改zabbix配置
cd /etc/zabbix/
cp zabbix_server.conf zabbix_server.conf.orig
#建立日志目录
mkdir /disk1/logs/zabbix
chown zabbix.zabbix -R /disk1/logs/zabbix#修改zabbix配置,默认DBName=zabbix,所以我就不做修改了
sed -i 's#/var/log/zabbix#/disk1/logs/zabbix#' zabbix_server.conf
sed -i 's/# DBHost=localhost/DBHost=localhost/' zabbix_server.conf
sed -i 's/# DBPassword=/DBPassword=123456/' zabbix_server.conf
sed -i '/DBPort=/c\DBPort=3306' zabbix_server.conf
sed -i '/DBSocket=/c\DBSocket=/var/lib/mysql/mysql.sock' zabbix_server.confegrep "^LogFile=|DBHost=|^DBName|^DBUser=|DBPassword=|DBPort=|DBSocket=" \
zabbix_server.confcd ~
3.3 通过web配置zabbix
#因zabbix是用php写的,所以查看一下zabbix的php文件就知道它默认放在哪个目录了
[root@vm82 zabbix]# rpm -qa|grep zabbix-web
zabbix-web-mysql-5.0.2-1.el8.noarch
zabbix-web-5.0.2-1.el8.noarch
[root@vm82 zabbix]# rpm -ql zabbix-web-5.0.2-1.el8.noarch|grep index.php
/usr/share/zabbix/index.php
3.3.1 修改nginx
我们在前面安装zabbix-nginx-conf的时候,会默认在nginx添加一个zabiix配置,并指定了/usr/share/zabbix,所以不需要任何修改,如下所示:
[root@vm82 ~]# ll /etc/nginx/conf.d/zabbix.conf
-rw-r--r-- 1 root root 1864 7月 13 16:57 /etc/nginx/conf.d/zabbix.conf
[root@vm82 ~]# cd /etc/nginx/conf.d/
[root@vm82 conf.d]# ll
总用量 16
-rw-r--r-- 1 root root 1152 8月 20 22:14 default.conf
-rw-r--r-- 1 root root 1093 8月 20 22:10 default.conf.orig
-rw-r--r-- 1 root root 136 8月 4 20:23 php-fpm.conf
-rw-r--r-- 1 root root 1864 7月 13 16:57 zabbix.conf
我这里也会之前的默认配置去掉,让专门为zabbix服务
mv default.conf default.conf.$(date +%Y%m%d)
#我们把zabbix.conf的端口配置修改一下,按官方文档说法默认是注解的,把注解去掉
cp zabbix.conf zabbix.conf.orig
sed -i '/listen/s/#//' zabbix.conf
sed -i '/server_name/s/example.com/localhost zabbix.hualinux.com/' zabbix.conf
sed -i '/server_name/s/#//' zabbix.conf
egrep 'listen|server_name' zabbix.conf#效果
[root@vm82 conf.d]# egrep 'listen|server_name' zabbix.conflisten 80;server_name localhost zabbix.hualinux.com;
#为了方便我在zabbix.conf的server_name下添加多2条日志记录
#建立日志目录
mkdir -pv /disk1/logs/nginx
chown nginx.nginx /disk1/logs/nginx#添加错误日志
sed -i '/server_name/a\ error_log /disk1/logs/nginx/zabbix.error.log;' zabbix.conf
#插入日志
sed -i '/server_name/a\ access_log /disk1/logs/nginx/zabbix.access.log main;' zabbix.conf
#插件空行
sed -i '/server_name/s/$/\n/' zabbix.conf#查看效果
[root@vm82 conf.d]# grep -A 3 'server_name' zabbix.confserver_name localhost zabbix.hualinux.com;access_log /disk1/logs/nginx/zabbix.access.log main;error_log /disk1/logs/nginx/zabbix.error.log;
[root@vm82 conf.d]# cd ~
3.3.2 修改php-fpm配置
按上面所说zabbix会在/etc/php-fpm.d/生成一个zabbix.conf,有自己的地址池,之前默认有www.conf,因没不用到所以移走它,
#查看是否生成的zabbix.conf的php配置
[root@vm82 ~]# ll /etc/php-fpm.d/
总用量 44
-rw-r--r-- 1 root root 19490 8月 20 22:17 www.conf
-rw-r--r-- 1 root root 19491 8月 20 22:04 www.conf.orig
-rw-r--r-- 1 root root 585 7月 13 16:57 zabbix.conf#执行命令
cd /etc/php-fpm.d/
#我们改为上海时区Asia/Shanghai
sed -i '/date.timezone/s#Europe/Riga#Asia/Shanghai#' zabbix.conf
sed -i '/date.timezone/s/; //' zabbix.conf
#查看效果 是否变成 php_value[date.timezone] = Asia/Shanghai
grep date.timezone zabbix.conf#查看用户和组,发现是apache用户 user = apache group = apache
egrep 'user|group' zabbix.conf #因为在上面我把php中的session修改为nginx了,所以要修改回来,否则无法写入
chown apache.apache -R /var/lib/php/session
cd ~
3.3.3 启动zabbix
#重启
systemctl restart zabbix-server zabbix-agent nginx php-fpm
#加入开机启动
systemctl enable zabbix-server zabbix-agent nginx php-fpm
3.3.4 安装zabbix
本地win上的hosts文件(C:\Windows\System32\drivers\etc\hosts)添加如下内容
192.168.3.82 zabbix.hualinux.com
也可以直接使用IP访问,我这里是 http://192.168.3.82/index.php
PS:加index.php主要是为的服务器的nginx,不能自动加载index.php,会变成nginx静态页的内容
PSS:如果按zabbix官网安装,只安装mysql,不安装nginx和php让它在安装zabbix服务的时候以依赖方式安装,那么它的安装地址是 http://<server_ip_or_name>/zabbix ,详见 Installing frontend
#在下面记得查看所有都显示OK,不要报错再下一步
#mysql8填写zabbix用户,但是执行不了,会报如下错误,所以我直接用root了
#用zabbix用户虽然授权了,但是执行不了
[root@vm82 ~]# mysql -uzabbix -p -e 'select * from zabbix.users'
Enter password:
ERROR 2006 (HY000) at line 1: MySQL server has gone away#root用户则可以
[root@vm82 ~]# mysql -uroot -p -e 'select * from zabbix.users'
Enter password:
+--------+-------+--------+---------------+--------------------------------------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
| userid | alias | name | surname | passwd | url | autologin | autologout | lang | refresh | type | theme | attempt_failed | attempt_ip | attempt_clock | rows_per_page |
+--------+-------+--------+---------------+--------------------------------------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
| 1 | Admin | Zabbix | Administrator | $2y$10$92nDno4n0Zm7Ej7Jfsz8WukBfgSS/U0QkIuu8WkJPihXBb2A1UrEK | | 1 | 0 | en_GB | 30s | 3 | default | 0 | | 0 | 50 |
| 2 | guest | | | $2y$10$89otZrRNmde97rIyzclecuk6LwKAsHN0BcvoOKGjbT.BwMBfm7G06 | | 0 | 15m | en_GB | 30s | 1 | default | 0 | | 0 | 50 |
+--------+-------+--------+---------------+--------------------------------------------------------------+-----+-----------+------------+-------+---------+------+---------+----------------+------------+---------------+---------------+
上面会自动创建配置文件 /etc/zabbix/web/zabbix.conf.php
关于用户名和密码,在上面的 最后一句 Installing frontend 链接中有说明,如下:
Zabbix frontend is ready! The default user name is Admin, password zabbix.
得知用户名为Admin密码为zabbix,用它登录后界面如下:
发现上图中有一个红色的No,zabbix服务没有运行,报错了,是因为上面我配置的时候用户使用了zabbix,所以需要修改过来
#把用户名从zabbix修改为root
sed -i '/^DBUser/s/zabbix/root/' /etc/zabbix/zabbix_server.conf
grep '^DBUser' /etc/zabbix/zabbix_server.conf
再查看一下zabbix日志发现如下:
[root@vm82 zabbix]# tail -f zabbix_server.log 43768:20200821:002928.204 VMware monitoring: YES43768:20200821:002928.204 SMTP authentication: YES43768:20200821:002928.204 ODBC: YES43768:20200821:002928.204 SSH support: YES43768:20200821:002928.204 IPv6 support: YES43768:20200821:002928.204 TLS support: YES43768:20200821:002928.204 ******************************43768:20200821:002928.204 using configuration file: /etc/zabbix/zabbix_server.conf43768:20200821:002928.213 [Z3001] connection to database 'zabbix' failed: [2059] Plugin caching_sha2_password could not be loaded: lib64/mariadb/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory43768:20200821:002928.213 Cannot connect to the database. Exiting...
因为mysql8.0认证方式变了使用是是caching_sha2_password
,所以root还是修改回原来的密码加密方式mysql_native_password
#登陆mysql执行下面语句
alter user 'root'@'localhost' identified with mysql_native_password by '123456';
flush privileges;
\q#为了保险起见重启mysql
systemctl restart mysqld
systemctl status mysqld
#启动zabbix-server,发现卡住不动了,重启服务器再启动成功
#重启zabbix-server,如发现卡住不动的话,重启服务器 shutdown -r now
systemctl start zabbix-server
netstat -alntp|grep -i listen|egrep ':80|:10050|:10051|:3306'
ps -ef|grep php-fpm
操作效果:
#效果 [root@vm82 ~]# netstat -alntp|grep -i listen|egrep ':80|:10050|:10051|:3306' tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 909/nginx: master p tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 778/zabbix_agentd tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1311/zabbix_server tcp6 0 0 :::3306 :::* LISTEN 1263/mysqld tcp6 0 0 :::10050 :::* LISTEN 778/zabbix_agentd tcp6 0 0 :::10051 :::* LISTEN 1311/zabbix_server tcp6 0 0 :::33060 :::* LISTEN 1263/mysqld [root@vm82 ~]# [root@vm82 ~]# ps -ef|grep php-fpm root 766 1 0 01:18 ? 00:00:00 php-fpm: master process (/etc/php-fpm.conf) apache 815 766 0 01:18 ? 00:00:00 php-fpm: pool zabbix apache 816 766 0 01:18 ? 00:00:00 php-fpm: pool zabbix apache 817 766 0 01:18 ? 00:00:00 php-fpm: pool zabbix apache 818 766 0 01:18 ? 00:00:00 php-fpm: pool zabbix apache 819 766 0 01:18 ? 00:00:00 php-fpm: pool zabbix apache 1284 766 0 01:18 ? 00:00:00 php-fpm: pool zabbix root 1507 1408 0 01:31 pts/0 00:00:00 grep --color=auto php-fpm
再次登录zabbix web发现正常了
四、zabbix agent 客户端安装
要监控,在需要监控的机子上安装agent(即客户端),我这里是vm821、vm822 2台机子
在安装前我先介绍一下zabbix提供了两个小工具:zabbix_sender和zabbix_get,它们的作用如下:
zabbix get:可在server端获取监控项item的值。
zabbix sender : 可在agent端给server发送监控项item值。比如你自定义的监控项,就可以通过这个工具采集信息。
我在服务端上已经安装了zabbix_get、现在建议在客户端上安装zabbix_sender
4.1 安装agent
#安装依赖
dnf install -y unixODBC
#安装zabbix源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
#安装agnet客户端及sender 小工具
dnf install -y zabbix-agent zabbix-sender
PS:如果发现用dnf安装太慢,也可以使用国内的zabbix源,如阿里云镜像、华为云镜像等,我这里使用华为云
#建立相关目录 mkdir -pv /disk1/tools cd /disk1/tools/ #下载对应的包 wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-agent-5.0.2-1.el8.x86_64.rpm wget https://mirrors.huaweicloud.com/zabbix/zabbix/5.0/rhel/8/x86_64/zabbix-sender-5.0.2-1.el8.x86_64.rpm #通过dnf方式安装rpm包,一定要记得先安装zabbix yum源,否则如果有依赖则无法自动添加 dnf install zabbix-*.rpm
4.2 修改agent配置
4.2.1 agent的两种模式(主动和被动)
Zabbx agent配置分为主动模式和被动模式,Zabbix默认是被动模式的。
在这里顺便讲一下主动模式和被动模式,主动和被动都是对于agent端来说的
主动模式:agent-->server(push推送)
由agent主动采集数据并返回给zabbix server,不需要server进行干预, 主动模式在一定程度上可减轻server的压力。
被动模式:agent<--server(pull拉取)
由server向agent发出指令获取数据, 即agent被动的去获取数据并返回给server,server周期性的向agent 索取数据, 这种模式的最大问题就是会加大server的工作量, 在数百台服务器的环境下server不能及时获取到最新数据, 但这也是默认的工作方式。
PS:
一般来说,被动模式对监控控制端服务器的开销较大,适合小规模的监控环境;主动模式对监控控制端服务器的开销较小,适合大规模的监控环境。
4.2.2 修改agent配置
在这里我拿vm821配置被动模式,vm822先不配置,留着后面文章我配置主动模式使用
#我这里是按默认的被动模式配置
#1.建立相关目录
mkdir -pv /disk1/logs/zabbix
chown zabbix.zabbix -R /disk1/logs/zabbix
#2.修改配置
cd /etc/zabbix/
cp zabbix_agentd.conf zabbix_agentd.conf.orig
sed -i 's#/var/log/zabbix#/disk1/logs/zabbix#' zabbix_agentd.conf
#配置被动模式,填写的是zabbix服务端的IP地址,如果设置为纯主动模式,则应该注释掉这一条配置
sed -i 's/Server=127.0.0.1/Server=192.168.3.82/' zabbix_agentd.conf
#客户端的hostname,不配置默认使用系统主机名
egrep "^LogFile=|^Server=" zabbix_agentd.conf
效果:
#修改效果 [root@vm821 zabbix]# egrep "^LogFile=|^Server=" zabbix_agentd.conf LogFile=/disk1/logs/zabbix/zabbix_agentd.log Server=192.168.3.82
PS:如果想配置主动模式,可以看我的文章《zabbix5 agent配置主动模式》
4.3 启动agent客户端
#启动服务
systemctl start zabbix-agent
#查看状态,按ctrl+c退出
systemctl status zabbix-agent
#设置开机启动
systemctl enable zabbix-agent
五、测试
5.1 使用zabbix-get命令(服务端操作)
Zabbix get 是一个命令行应用,它可以用于与 Zabbix agent 进行通信,并从 Zabbix agent 那里获取所需的信息
#登陆zabbix服务端执行如下命令,不懂命令可以zabbix_get --help
#获取ip地址为192.168.3.21的agent端 hostname
zabbix_get -s 192.168.3.21 -k system.hostname
效果如下:
[root@vm82 ~]# zabbix_get -s 192.168.3.21 -k system.hostname vm821
5.2 通用zabbix web添加监控
打开浏览器输入:http://192.168.3.82/index.php,登录zabbix
5.2.1 创建一个监控组
zabbix概念是“主机host”在“组Host groups”中,“模板Template”可以套在主机也可以套上组上,如果套上组中,那么所有“主机”都会使用,如果套上“主机”上只有某台主机生效。
起一个名字,我里起hualinux
在下方会多出一个组
5.2.2 添加被监控主机
我这里先拿vm821机子添加监控,vm822先不添加,因为我没有配置
#加入被监控的主机
Host name:客户端的主机名,可以是IP地址或主机名,这个主机名服务器需要ping得通
Visible name:在zabbix主机列表中显示的名字,主要是为了方便记忆,可以按公司要求分类
Groups:属于哪个组(可以多个组),可以直接输入会有提示,也可以点旁边的 Select 选取
Interfaces下的Agent:就是客户端信息啦,默认只填写IP地址即可
Description:描述,主要是辅助记忆的,也可以什么都不写
为了方便我没有直接点Add,我再点模板,直接套用监控模板 可以省不少麻烦
我这里弄一个简单的,只添加系统监控,如果有兴趣了解其它可以点旁边的 Select
Template OS Linux by Zabbix agent active:是主动模式
Template OS Linux by Zabbix agent:被动模式
#在页面的最下方会自动添加多一行,如下:
从上面看出刚才看主机名为Visible name的名字,刚才添加多一个模板也在其中,的模板状态为Enabled,表示主机在运行,处于可用状态。
5.2.3 查看监控数据
六、其它
6.1 中文乱码
上面监控图中,发现标题在包含有中文的时候,乱码了,所以解决一下
6.1.1 检查zabbix服务端是否安装了中文语言包
先查看一下系统是否安装有中文
#查看系统默认设置编码,我的是中文UTF-8
[root@vm82 ~]# echo $LANG
zh_CN.UTF-8#查看是否安装了中文,如果有则表示已经安装了
[root@vm82 ~]# locale -a|grep zh_
zh_CN
zh_CN.gb18030
zh_CN.gbk
zh_CN.utf8
zh_HK
zh_HK.utf8
zh_SG
zh_SG.gbk
zh_SG.utf8
zh_TW
zh_TW.euctw
zh_TW.utf8
PS:如果没有可能执行下面命令安装
#centos7系统 #yum install kde-l10n-Chinese -y#centos8系统 dnf install langpacks-zh_CN.noarch#查看是否安装了中文 locale -a|grep zh_
6.1.2 上传中文字体到zabbix服务端
上面的图形中文乱码,也有可能是没有中文字体支持,可以在win上找一字体文上传到服务端上。
#1.win中复制字体文件
我的本地系统是win7 64位, 在windows的C:\Windows\Fonts目录中找个字体,是中文的,我就找个简体吧
上面图中简体字,复制出桌面名字变成了 SimSun
#2.上传字体文件到服务器即可,操作如下
#查看zabbix字体目录centos默认 /usr/share/zabbix/assets/fonts
rpm -qa|grep zabbix|xargs rpm -ql|grep fonts#进入目录
cd /usr/share/zabbix/assets/fonts#上传字体到此目录中,安装lrzsz的话,可以使用rz命令,再简单的直接拖拽到shh窗口中即可
mv simsun.ttc simsun.ttf
6.1.3 修改字体相关的配置文件
#查找包含有字体配置的inc.php文件
rpm -qa|grep zabbix|xargs rpm -ql|grep inc.php|xargs grep -l -i FONT_NAME
效果如下:找到了2个
#查找包含有字体配置的inc.php文件 [root@vm82 web]# rpm -qa|grep zabbix|xargs rpm -ql|grep inc.php|xargs grep -l -i FONT_NAME /usr/share/zabbix/include/defines.inc.php /usr/share/zabbix/include/graphs.inc.php
上现发现有2个,选择修改 /usr/share/zabbix/include/defines.inc.php 总配置文件即可。
cd /usr/share/zabbix/include
cp defines.inc.php defines.inc.php.orig
grep ZBX_FONT_NAME defines.inc.php#查看含有 graphfont 字体的配置
grep graphfont defines.inc.php
#使用把graphfont字体改为刚刚上传的宋体simsun
sed -i 's/graphfont/simsun/g' defines.inc.php
#查看效果
grep _FONT_NAME defines.inc.php
效果:就是把 把graphfont字体改为刚刚上传的宋体simsun
[root@vm82 include]# #查看含有 graphfont 字体的配置 [root@vm82 include]# grep graphfont defines.inc.php define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name define('ZBX_FONT_NAME', 'graphfont'); [root@vm82 include]# #使用把graphfont字体改为刚刚上传的宋体simsun [root@vm82 include]# sed -i 's/graphfont/simsun/g' defines.inc.php [root@vm82 include]# #查看效果 [root@vm82 include]# grep _FONT_NAME defines.inc.php define('ZBX_GRAPH_FONT_NAME', 'simsun'); // font file name define('ZBX_FONT_NAME', 'simsun');
按F5刷新一下刚才的zabbix监控界面,发现正常了
6.2 切换中文界面
现在zabbix支持中文,前提是你系统已经安装了中文包,如果没安装可以执行下面命令安装
#查看是否安装了中文
locale -a|grep zh_#centos7系统
#yum install kde-l10n-Chinese -y#centos8系统
dnf install langpacks-zh_CN.noarch
附录一、 安装基础软件及基础配置
1.1 centos8安装兼容包(已安装)
#兼容centOS6之前的命令
dnf install -y net-tools
不关闭也可以要让其端口通过防火墙
1.2 关闭selinux(重要)
如果不关闭selinux的话,有些自定义路径不符它的规则会产生问题,一般推荐关闭
#临时关闭:
setenforce off#永久性关闭:
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sed -n '/SELINUX=/p' /etc/selinux/config
shutdown -r now
1.3 关闭防火墙
#停止firewall
#禁止firewall开机启动
systemctl stop firewalld.service
systemctl disable firewalld.service
1.4 时间同步(最好要)
有不少软件对时间有要求的,不能相差太多,比如主从、zabbix等,所以建议配置一下
centos8已经取消了ntp,默认使用的是chronyd
- chronyd 和 ntpd 性能对比 https://chrony.tuxfamily.org/comparison.html#Performance
- 为什么要使用 chronyd 替换掉 ntpd https://chrony.tuxfamily.org/comparison.html#Summary
有些软件时间性要求比较强的,如同步类,数据库主从,做实验也最好同步一下时间
#dnf和yum都可以安装,推荐用dnf
dnf install chrony
在第8次迭代之前,CentOS使用dnf包管理器。从CentOS 8开始,包管理已经从dnf迁移到Dandified dnf (DNF)。DNF最早是在Fedora 18中引入的,并成为Fedora 22中的默认软件包管理器,它与dnf使用上非常相似。
#配置时间服务器,我这里使用的是中国区的
#备份配置
cp /etc/chrony.conf /etc/chrony.conf.orig
#注解掉pool
sed -i '/^pool/s/^/#/' /etc/chrony.conf
grep '#pool' /etc/chrony.conf
sed -i '/#pool/a\server cn.pool.ntp.org iburst' /etc/chrony.conf
sed -i '/#pool/a\server ntp.ntsc.ac.cn iburst' /etc/chrony.conf
sed -i '/#pool/a\server ntp1.aliyun.com iburst' /etc/chrony.conf
grep -A 3 '#pool' /etc/chrony.conf#重启服务
systemctl restart chronyd
1.5 安装常用软件
#centos8之前用dnf
dnf install -y vim lrzsz wget curl man tree rsync gcc gcc-c++ openssl openssl-devel
1.6 安装第三方源epel源及remi源(必要)
#安装epel源可以下载比较新版本的软件及部分默认没用的dnf软件
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
wget http://rpms.remirepo.net/enterprise/remi-release-8.rpm
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ih remi-release-8.rpm
rm -f remi-release-8.rpm