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;

    image
  2. 官方的安装是通过yum进行的,在上一步完成后会自动在下面生成相关操作的shell命令,这里我们先完成前两步,也就是通过yum方式完成安装zabbix-server和zabbix-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-server和zabbix-agent的安装了,比通过源码编译安装的方式容易了很多,没错,菜鸟运维就是不喜欢源码编译安装!接下来要做的就是完成zabbix运行所需的数据库和WEB容器的配置;

创建Zabbix数据库

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

  1. 通过Navicat客户端工具创建数据库,注意字符集最好选择utf8mb4;
image
  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客户端导入数据;
image
  1. 通过命令行方式导入数据;
# 执行初始化SQL脚本
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uroot -p zabbix_server 

配置Zabbix数据库连接信息

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

image

编辑/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的配置环节了,或者跟我们一起看一下控制台给出的错误提示信息:

image

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

image

我们发现报错原因是不能正常加载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

image

配置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错误码。

image

很明显服务端处理出错了,面对这种情况,我们应该如何排查错误呢?错误可能是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如下:

image

在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,而且默认值为空。

image

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

image

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

image

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

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

image

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

image

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

image

在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欢迎页面了!

image

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

image

在Check of pre-requisites页面我们看到PHP检查项max_input_time的当前值60比zabbix的所需值300小,检查没有通过,所以我们需要先编辑php.ini文件,设定相关PHP配置项满足要求,其中zabbix必须的配置项有max_execution_time、max_input_time、date.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页面:

image

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

image

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

image

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

image

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

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

image
image

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

Zabbix中文乱码处理

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

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

要解决这个问题,我们首先要到本地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修改完成

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

image

踩坑经历

  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阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容