基于 CentOS 8 和 LNMP 环境的 zabbix 4.4 部署

发布时间 2023-04-18 10:39:04作者: NagaResst

前言

虽然不是第一次在网络上写博客了,但是写这种带一些专业性的技术博客倒是第一次。 也是第一次开始尝试使用 Markdown 写东西,虽然知道这东西有些日子了。

前阵子公司有个领导说想搞 zabbix,正好我刚到也比较闲,也对技术类和 zabbix 很有兴趣,就在公司的 vSphere 上搞了一个。 以前部署 zabbix 的时候在网上找教程,都是针对旧版的,步骤也繁琐的多。有些已经用不上了。 正好这次在公司部署 zabbix,就把全过程都记录下来了,发到 blog 上做备份。

在 vsphere 上部署的虚拟机的过程我就不累述了。双核 4G,80G 精简置备。 其实 zabbix 真正生产用途部署的话比较吃性能,是不建议这样的,尤其硬盘读写速度。公司里的就是普通蓝盘,连 raid 都没组,这几天天天读写延迟告警。有条件的话配置还是搞得好一点。

话不多说,开搞。

LNMP 环境

这一步,其实是比较简单的。zabbix 的部署环境要求并不复杂。再加上现在的 yum 功能实在给力,犯不着像别的教程一样安装个什么东西命令就一大串。为了安装方便,我所有 Linux 代码都是直接用 root 账户敲的,实际生产环境不怕麻烦最好还是 sudo。

yum install lrzsz
yum install mysql-server		//这里yum会自己把我们需要的一些组件或者依赖都带上
yum install php				//所以安装命令短了很多
yum install nginx
yum install net-snmp

本来代码一行足以,为了不伤害大家的眼睛我决定分行。 lrzsz 是个很好用的通过 shell 传文件的小程序,非常好用,安利一波。 snmp 也是 zabbix 功能依赖的组件之一,这个需要手动安装。 这样基本环境的功能就是有了。配置的问题稍后再说。

Zabbix 下载安装
官网给的安装代码其实挺给力的,现在基本可以无脑套用。

rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm 
yum clean all
yum makecache					//为yum安装zabbix的资源包并应用 上面用的链接是zabbix官网提供的
yum install zabbix-server-mysql zabbix-agent	//安装zabbix

到这一步 zabbix 的安装算是初步完成,接下来的都是配置的事了。

MySQL 配置

我这里用的是最新的 MySQL 8。 版本新是新,跟现在满地教程的 MySQL 5.6 有些区别还是蛮大的。比如口令规则和创建用户的命令都有一些变化,和老版本基本不兼容,这里是需要注意的。 首先 MySQL 8 默认 root 账户不是空口令,初始化完成后会在控制台输出 root 的默认口令,或者在日志里有。MySQL 8 要求所有口令都是强口令,有大小写有数字有符号。查看 MySQL 的 root 账户初始口令。vim /var/log/mysql/mysqld.log

MySQL 8 在 CentOS 里安装使用并不顺畅,我也不知道为什么,大概是因为 CentOS 是 mariaDB 派吧。安装完不仅权限各种问容易导致启动失败,还有一些莫名其妙的事情。CentOS 8 安装 MySQL 8 遇到问题不是第一次了,这里我就直接把代码拿上来,就算没问题无脑照做也不会出事。

chown mysql:mysql -R /var/lib/mysql		//MySQL系统账户赋权
mysqld --initialize				//MySQL初始化,这时就会生成root账户的初始密码了
systemctl start mysqld				//启动MySQL
systemctl enable mysqld				//mysql开机自启动
chmod -R 777 /var/lib/mysql			//如果不能启动可能是不名原因文件夹权限不足以让mysql运行,需要手动赋予
systemctl start mysqld				//再启动MySQL
mysql -u root -p				//mysql用root账户登录   登陆进去之后需要把root密码改了才能进行下一步操作

接下来输入密码,我们进到 MySQL 的控制台里继续。

use mysql;								//先选择mysql数据库
alter user 'root'@'localhost' identified by 'password';			//登陆之后需要先修改root密码

root 账户搞完了,我们可以给自己创建一个账户,因为我的密码都是直接用 keepass 生成的,所以对于口令这个东西简单了许多。这里不仅要注意口令强度,还有就是一定要注意语法和单引号。“@” 前后的两对单引号不能省略任何一个。因为漏写了也能操作成功,但是你登录不进去。这里我吃了不少亏。

create user 'username'@'%' identified by 'password';		//创建用户  %代表此用户可以在任意地址登录
grant all on *.* to 'username'@'%';				//对此账户赋予了所有权限 

这一步操作完了之后,就开始给 zabbix 准备数据库了,这里的命令都是官方提供的,复制粘贴即可。

create user 'zabbix'@'localhost' identified WITH mysql_native_password by 'password';	//创建zabbix的仅限本地登录账户
create database zabbix character set utf8 collate utf8_bin;				//创建zabbix数据库
grant all privileges on zabbix.* to 'zabbix'@'localhost';				//给zabbix的账户赋权使用
flush privileges;									//刷新权限,使所有配置生效
quit;

到这数据库上的操作基本就完事了,其实还有最后一步导入 zabbix 提供的模板,不过这一步不在 MySQL 的控制台里操作。

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix		//接下来需要输入密码

这里管道符传入的命令不太一样,可能是因为 zabbix 官方制作教程的时候用的是旧版本 MySQL,不过不耽误使用。

修改配置文件
接下里需要编辑一波配置文件了。首先是 zabbix 的数据库连接。

vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=*password*

systemctl start zabbix_server
systemctl start zabbix_agent		//让zabbix跑起来

其实这里应该改一波 PHP 的性能配置的,这里我只丢个文件位置出来,具体怎么改可以百度,或者到后面 web 部署上有详细说明,它会告诉你需要改什么。除了 PHP 的性能配置,还需要再修改一下时区。

vim /etc/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Shanghai

systemctl restart php-fpm			//PHP的配置改完之后需要重启php-fpm使其生效

这里有一点需要注意的是:不管是 zabbix 的配置文件,还是 PHP 的配置文件,部分要修改的内容是有重叠的,例如这个时区,我第一次部署的时候修改的是 PHP 的配置文件。第二次同样,却怎么也过不了,找了好久终于找到了 zabbix 的配置文件也改了才过。可能跟我的部署环境有关,毕竟第一次是 Apache,第二次却是 NGINX。

Web 访问组件
安装 zabbix 的 web 端

yum install zabbix-web zabbix-web-mysql zabbix-nginx-conf		//这里根据我的搭建环境选择了额外的组件

接下来为 NGINX 配置站点,关于 NGINX 的配置方法建议 nginx.cn 好好学习一下,非常有用。
这里抛上来一个样本,大家看看就好。

server {
    listen       80 default_server;
    listen       [::]:80 default_server;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
server_name localhost;
index zabbix.html zabbix.php;
root /usr/share/zabbix/;
access_log /tmp/zabbix_access.log main;
error_log /tmp/zabbix_error.log;

location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html/$fastcgi_script_name;
        include        fastcgi_params;
 }
这里改完了需要用以下命令

nginx -t		//测试一下配置文件能不能通过,能通过才算配置完成
nginx -s reload		//重载配置文件
systemctl start nginx

防火墙与 seLinux

有的教程会直接建议你关掉防火墙,因为方便,我估计是因为他们对配置防火墙的命令并不熟悉,如果说防火墙没用,我觉得还有一些可能,毕竟都是内网环境,不过即使是内网环境我也不建议关掉。
在这里我们配置防火墙的时候针对服务,而不是针对端口。这样即使我们的 Web 服务器移动的到其他端口上去也不需要做更改。

firewall-cmd --zone=public --add-service=http --permanent		//--add-service=http(https) 自己根据情况选择
firewall-cmd --reload							//防火墙重载配置使其生效
systemctl restart firewalld						//这是重载防火墙配置的另一种方法,直接重启服务

最后设置各个服务开机器自动,Shell 上能做的事情基本就算完事了。

systemctl enable nginx
systemctl enable mysqld
systemctl enable php-fpm
systemctl enable zabbix-server
systemctl enable zabbix-agent
systemctl enable net-snmp

关于 seLinux:关不关取决于你。会玩不怕麻烦就开着,不会玩又不需要就关掉。至于到底要不要关掉,就要看你有没有遇到这个坎了。作为一个运维人,我建议还是学会怎么玩 seLinux,虽然可能真的用不上。

vim /etc/selinux/config			//修改seLinux的配置文件
SELINUX=disabled			//关闭seLinux

reboot					//修改完了需要重启才能生效 

Web 部署

Web 部署是安装 zabbix 的最后一步了,输入主机 IP 直接就打开 zabbix 的页面。然后跟着页面上指示照做就行,除了修改 PHP 的性能配置几乎毫无技术含量。我就不再累述。

这次因为不是一边部署一边码文。虽然命令都是在机器里跑过一次的,肯定没问题,不过还是差了点味道。
以后再写这种 blog 的时候,如果不是一边部署一边码,估计会先贴代码上来,文章的部分慢慢补。
如果一边部署一边写的话,大概临场效果会好一些。不过文章估计就没有这么精练了。