「Zabbix」Centos7下搭建Zabbix+MySQL+Nginx

前言

小菜运维仅仅只是一位菜鸟运维

废话不多说,小菜运维最近计划在公司内网部署一套 Zabbix Server 环境,用于监控公司线上WEB项目的运行状态,经过一番调研,最终决定采用 Nginx 部署 Zabbix,而放弃 Zabbix官网 推荐的 Apache 部署方案,主要原因还是目前公司运行环境都是基于 Nginx 搭建的。如果想使用 Apache 进行部署,完全可以参照 Zabbix官网教程 进行操作即可。

前置条件

环境准备:本文除 Zabbix 外,不再介绍其他组件的安装过程,假设你已经安装好了其他相关组件。

序号 组件 版本
0 Centos 7
1 Zabbix 4.2
2 MySQL 5.7
3 PHP 7.0
4 Nginx 1.14.2

安装Zabbix

我们将参照 Zabbix官网教程,通过yum的方式进行安装。

  1. 访问 Zabbix官网下载页,如下图选择平台环境,这里我们选择的数据库是 MySQL;
    Choose your platform
  2. 官方的安装是通过yum进行的,在上一步完成后会自动在下面生成相关操作的shell命令,这里我们先完成前两步,也就是通过yum方式完成安装 zabbix-serverzabbix-agent
# a. Install Zabbix repository
rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm
yum clean all 
# b. Install Zabbix server, frontend, agent
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent 

到这里,我们已经实现了 zabbix-serverzabbix-agent 的安装了,比通过源码编译安装的方式容易了很多,没错,菜鸟运维就是不喜欢源码编译安装!接下来要做的就是完成 zabbix 运行所需的数据库和WEB容器的配置;

创建Zabbix数据库

我们假设数据库用户为 root,密码为 Zabbix01,数据库实例名称为 zabbix_server 。对于创建数据库实例,我们可以参照官网教程在服务器通过命令行实现,也可以通过 Navicat 等客户端实现。

  1. 通过Navicat客户端工具创建数据库,注意字符集最好选择 utf8mb4
通过Navicat创建数据库
  1. 通过命令行创建数据库;
# 通过命令行创建数据库
mysql -uroot -p
mysql> create database zabbix_server character set utf8mb4 collate utf8mb4_general_ci;
mysql> grant all privileges on zabbix_server.* to 'root@%' identified by 'Zabbix01';
mysql> quit;

初始化Zabbix数据库

Zabbix 的数据库初始化SQL脚本默认存储在 /usr/share/doc/zabbix-server-mysql-4.2.0/create.sql.gz,我们可以将其下载到本地解压后通过 Navicat 导入数据库,或通过执行命令行的方式导入。

  1. 通过Navicat客户端导入数据;
通过Navicat导入数据
  1. 通过命令行方式导入数据;
# 执行初始化SQL脚本
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uroot -p zabbix_server 

配置Zabbix数据库连接信息

Zabbix 的配置文件默认存储在 /etc/zabbix 目录,其中 zabbix_server.confzabbix-server 的配置文件,zabbix_agentd.confzabbix-agent 的配置文件。

zabbix配置文件

编辑 /etc/zabbix/zabbix_server.conf,配置 Zabbix 数据库连接信息:

# 编辑 /etc/zabbix/zabbix_server.conf
vi /etc/zabbix/zabbix_server.conf
# 修改以下配置项
DBHost=localhost
DBName=zabbix_server
DBUser=root
DBPassword=Zabbix01

启动zabbix-server服务

配置完数据库信息后,我们可以暂时跳过 PHP 和 Nginx 的配置过程,尝试启动 zabbix-server 服务,先确保 zabbix-server 服务是可正常启动的。

# 启动zabbix-server服务
systemctl restart zabbix-server

这时你可能会发现 zabbix-server 服务启动失败了,如果你的 zabbix-server 服务可正常启动,那么你可以跳过这部分直接看 Nginx 的配置环节了,或者跟我们一起看一下控制台给出的错误提示信息:

systemctl restart zabbix-server

我们根据提示通过journalctl -xe命令查看一下详细信息,具体内容如下图:

journalctl -xe

我们发现报错原因是不能正常加载 libmysqlclient.so.18 库文件,对于类似的错误可能大家都遇到过,我们也不再深入探讨其原因和解决方案,在这里只给出一种小菜运维的「简单粗暴」处理方法,重新安装mysql-libs。如果大家尝试无效的话还请大家自行百度一下解决方案。
小菜运维的解决方案:

# libmysqlclient.so.18: cannot open shared object file: No such file or directory
yum -y reinstall mysql-libs

重新安装完成 mysql-libs 之后,我们再次尝试启动 zabbix-server 服务没有报错,然后查看一下 zabbix-server 服务运行状态发现服务已经启动成功。

# 启动zabbix-server服务
systemctl start zabbix-server
# 查看zabbix-server服务运行状态
systemctl status zabbix-server
systemctl status zabbix-server

配置Nginx的location

我们知道 zabbix 是 PHP 开发的,PHP7.0 已经内置了 PHP-FPM,我们要做的就是配置 Nginx 使其支持 php-fpm,这里我们不再介绍如何安装 Nginx 以及配置 php-fpm,我们只给出经测试可用的 Nginx server 配置文件以及相关异常错误的排除过程。

找到你的 Nginx 的配置文件,参照如下的 server 配置做出相应修改。需要注意的是 Zabbix 的WEB页面文件默认保存在 /usr/share/zabbix 目录,所以这里我们 将server的root指向了 /usr/share/zabbix 目录

# 重点说三遍!!!此处只给出重点配置项的参考,其他常规配置项自行补充
# 重点说三遍!!!此处只给出重点配置项的参考,其他常规配置项自行补充
# 重点说三遍!!!此处只给出重点配置项的参考,其他常规配置项自行补充
server {
  # 其他常规配置项自行补充
  root /usr/share/zabbix;
  location / {
    try_files $uri $uri/ /index.php?$args;
  }
  location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi.conf;
  }
}

执行命令重新加载Nginx的配置文件使修改生效:

# 重新加载Nginx配置文件
nginx -s reload

接下来,我们尝试通过浏览器访问一下 http://server_ip_or_name/zabbix,看看是否能够顺利加载 zabbix的欢迎页面?很扫兴,服务端返回了 500 错误码。

ERROR 500

很明显服务端处理出错了,面对这种情况,我们应该如何排查错误呢?错误可能是 Nginx 的配置错误,可能是 php-fpm 的处理错误,也可能是 zabbix 的配置错误,首先我们需要先定位出错误出现在哪里。

小菜运维排查错误的第一反应就是要查看错误日志,Nginx 是一个WEB容器,其日志只记录了请求访问日志和 Nginx 本身的错误日志,不会记录 PHP 的运行错误信息,Nginx 把对 PHP 的请求转发给 php-fpm fastcgi 进程来处理,默认的 php-fpm 只会输出 php-fpm 的错误信息,在 php-fpm 的错误日志里也看不到 PHP 的错误日志,
原因是 php-fpm 的配置文件 php-fpm.conf 中默认是关闭了 worker 进程的错误输出,直接把他们重定向到 /dev/null,当然这个可以通过修改 php-fpm.conf 来解决。那么 Zabbix 服务本身有没有日志输出呢?答案是肯定的,默认情况下 Zabbix 的日志是保存在文件 /var/log/zabbix/zabbix_server.log 中,这个配置项我们可以在上面提到的 zabbix-server 默认配置文件 /etc/zabbix/zabbix_server.conf 中进行查看和编辑。

我们查看日志文件 /var/log/zabbix/zabbix_server.log 如下:

zabbix_server.log

在 zabbix-server 日志中我们发现有一条错误信息 [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2),也就是说 zabbix-server 不能通过 socket 文件 '/var/lib/mysql/mysql.sock' 连接 MySQL 数据库,那么 '/var/lib/mysql/mysql.sock' 是哪里来的呢?带着这个疑惑,小菜运维又一次打开了 zabbix-server 的配置文件 /etc/zabbix/zabbix_server.conf,在 zabbix-server.conf 中我们找到了被注释掉的配置项 DBSocket,而且默认值为空。

zabbix-server.conf

很显然,配置项 DBSocket 应该配置 MySQL 数据库的 socket 文件,难道我们服务器上 MySQL 的 socket 就是配置的 '/var/lib/mysql/mysql.sock'?带着疑问我们先查找了一下文件 /var/lib/mysql/mysql.sock 并发现该文件并不存在,然后我们又打开MySQL的配置文件 /etc/my.cnf,发现我们安装的 MySQL 默认的 socket 配置项配置的是 /tmp/mysql.sock

/etc/my.cnf

我们编辑配置文件 zabbix-server.conf,将配置项 DBSocket 设置为 /tmp/mysql.sock

zabbix-server.conf

然后重新启动zabbix-server服务并再次尝试从浏览器访问 http://server_ip_or_name/zabbix,依然很扫兴,服务端仍然返回了 500 错误码!

# 重新启动zabbix-server服务
systemctl restart zabbix-server
ERROR 500

同样的还是查看 zabbix-server 服务日志文件 /var/log/zabbix/zabbix_server.log

zabbix_server.log

这次从日志 zabbix_server.log 中我们看到,zabbix-server 服务正常启动,没有再报错了! zabbix-server 服务没有报错,而服务端也正常做出了响应,只不过响应码是 500 错误码,说明 Nginx 配置没有问题,问题应该是出在了 php-fpm 。上面已经提到过了,php-fpm 默认是不输出错误日志到日志文件的,所以我们需要先配置 php-fpm 日志输出到日志文件,在这里我们就不再介绍如何配置了,直接给出 php-fpm 的错误日志信息和解决方案。

php-fpm error_log

在 php-fpm 错误日志中我们看到错误提示信息 Failed opening required '/etc/zabbix/web/maintenance.inc.php',很明显这是一个文件权限问题导致的错误,因为我们 Nginx 的启动用户组为 www:www,而 /etc/zabbix/web 目录所属用户组为 root:root,导致 Nginx 无法读取文件 '/etc/zabbix/web/maintenance.inc.php',我们尝试修改 /etc/zabbix/web 目录的用户群组为 www:www,然后再次重启 zabbix-server 服务:

# 指定/etc/zabbix/web拥有者为www:www
chown -R www:www /etc/zabbix/web
# 重新启动zabbix-server服务
systemctl restart zabbix-server

我们又一次尝试从浏览器访问 http://server_ip_or_name/zabbix,这一次终于顺利进入 zabbix 欢迎页面了!

zabbix welcome

点击页面 「Next step」按钮,进入到 Check of pre-requisites 页面:

Check of pre-requisites

Check of pre-requisites 页面我们看到 PHP 检查项 max_input_time 的当前值60比 zabbix 的所需值300小,检查没有通过,所以我们需要先编辑 php.ini 文件,设定相关 PHP 配置项满足要求,其中 zabbix 必须的配置项有 max_execution_timemax_input_timedate.timezone 等,大家可以根据 Check of pre-requisites 页面的提示信息进行配置:

# 小菜运维的PHP配置文件为/usr/local/php/etc/php.ini
cd /usr/local/php/etc
# 编辑PHP配置文件php.ini
vi php.ini
# 开始修改PHP配置项
# max_input_time = 300
# PHP配置项修改完成
# 重启php-fpm服务
systemctl restart php-fpm

强制刷新 Check of pre-requisites 页面,我们看到所有 PHP 配置项检查都已通过,继续点击页面 「Next step」 按钮,进入到 Configure DB connection页面:

Configure DB connection

依次填写数据库各配置项,然后继续点击页面 「Next step」 按钮,进入到 Zabbix server details 页面,在 Zabbix server details 页面我们需要填写 zabbix-server 实例的 HostPortName,这些主要是用来和 zabbix-agent 做通信时使用的,这里我们只是简单的配置了 zabbix-server 实例的名称为 zabbix server,其他均取了默认值,如果以后有特殊需要的话可以到相应配置文件下进行修改:

Zabbix server details

继续点击 Zabbix server details 页面 「Next step」 按钮,进入到 Pre-installation summary 确认页面:

Pre-installation summary

继续点击 Pre-installation summary 页面 「Next step」按钮,进入到 Install 安装完成页面:

Install

记住上图中标注的文件 /etc/zabbix/web/zabbix.conf.php,有兴趣的可以打开看看该文件内容。

继续点击 Install 页面 「Finish」 按钮,我们看到 zabbix 的登录页面了,默认登录帐号为 Admin,密码为 zabbix,输入帐号密码点击 「Sign in」 按钮完成登录就可进入 zabbix-server 主页了:

Sign in

Home

到此,祝贺你,我们已经成功完成 zabbix-server 的安装了!

Zabbix中文乱码处理

zabbix 默认已经内置中文支持,可以通过系统配置选项切换系统语言类型,但是由于服务器字体缺失导致zabbix 图表的中文会存在乱码现象。

  1. 切换中文语言
    我们在主页,点击右上角用户图标进入用户个人资料设置页,在 Language 配置项选择 Chinese(zh_CN),然后点击 「Update」 按钮即可自动完成语言切换;
update language
  1. 修复中文乱码
    zabbix 虽然本身已经支持中文,但是在图表的标注上还存在中文乱码,这是由于 zabbix 的图表字体默认配置的是 graphfont,而在 zabbix 字体目录下却不存在相应字体造成的;
图表中文乱码

要解决这个问题,我们首先要到本地 windows 操作系统目录 C:\Windows\Fonts 下找一款你喜欢的中文字体,将其ttf字体文件上传到服务器目录 /usr/share/zabbix/fonts 下,然后在服务器端编辑文件 /usr/share/zabbix/include/defines.inc.php,将配置项 ZBX_GRAPH_FONT_NAME 的值由 graphfont 改为 simfang (这里小菜运维选择的字体是 「仿宋 常规」,对应的字体文件为 simfang.ttf);

# 小菜运维的PHP配置文件为/usr/local/php/etc/php.ini
vi /usr/share/zabbix/include/defines.inc.php
# 开始修改ZBX_GRAPH_FONT_NAME
# define('ZBX_GRAPH_FONT_NAME',   'simfang');  // font file name
# ZBX_GRAPH_FONT_NAME修改完成

再次强制刷新页面,我们发现图表的中文乱码现象已经不存在了。

图表中文正常

踩坑经历

1. libmysqlclient.so.18: cannot open shared object file: No such file or directory
问题表现:systemctl start zabbix-server 启动失败
问题排查:journalctl -xe
解决方法:yum -y reinstall mysql-libs
2. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
问题表现:访问 http://server_ip_or_name/zabbix 返回500错误码
问题排查:依次排查 zabbix_server.log、php-fpm 日志
解决办法:配置 zabbix_server.conf的DBSocket 和 MySQL 一致
3. Failed opening required '/etc/zabbix/web/maintenance.inc.php'
问题表现:访问 http://server_ip_or_name/zabbix 返回500错误码
问题排查:依次排查 zabbix_server.log、php-fpm 日志
解决办法:将目录 /etc/zabbix/web 指定拥有者为 Nginx 用户 chown -R www:www /etc/zabbix/web
4. session.save_path is correct (/var/lib/php/session) in Unknown on line
问题表现:zabbix 在某步点击「Next step」无法进入下一页面
问题排查:依次排查 zabbix_server.log、php-fpm 日志,多是因权限不足导致
解决办法:配置 PHP 的 session 存储目录如 session.save_path = /var/lib/php/session,并授权 Nginx 用户拥有该目录 chown -R www:www /var/lib/php/session

zabbix服务管理

# zabbix-server
systemctl status zabbix-server
systemctl start zabbix-server
systemctl stop zabbix-server
systemctl restart zabbix-server

# zabbix-agent
systemctl status zabbix-agent
systemctl start zabbix-agent
systemctl stop zabbix-agent
systemctl restart zabbix-agent

# zabbix默认配置文件目录
cd /etc/zabbix

# zabbix默认日志存储目录
cd /var/log/zabbix
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345