目录
现在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密码
2.2.4.1 查看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.21 Copyright (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
2.2.4.2 修改安全级别
第一次登陆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.21 Copyright (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 - GPL Copyright (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:除了查询之外,最常用的还有一个服务功能
2.2.5.2 使用第三方连接工具SQLyog(不推荐)
上面设置完了之后,可以使用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.ini
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
#操作效果 [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.conf
egrep "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.conf
egrep "^LogFile=|DBHost=|^DBName|^DBUser=|DBPassword=|DBPort=|DBSocket=" \
zabbix_server.conf
cd ~
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.conf
listen 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.conf
server_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: YES 43768:20200821:002928.204 SMTP authentication: YES 43768:20200821:002928.204 ODBC: YES 43768:20200821:002928.204 SSH support: YES 43768:20200821:002928.204 IPv6 support: YES 43768:20200821:002928.204 TLS support: YES 43768:20200821:002928.204 ****************************** 43768:20200821:002928.204 using configuration file: /etc/zabbix/zabbix_server.conf 43768: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 directory 43768: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