小艾的自留地

Stay foolish, Stay hungry

因为一些特殊原因,部分环境不是搭建在云上面,而是在托管的实体机上面,这就导致原本很多云可以帮我们做的事情,现在只能自己去做了。
比如:监控系统。

本着不想当运维的前端不是一个好全栈的思想,我迫切需要自己搭建一套完整的监控系统来解放自己的双手👐️。

我希望这套监控系统是怎样的?

  1. 免费开源
  2. 入门相对容易
  3. 支持多平台分布式监控

综合以上需求,最后我选择了 Zabbix

网上找了一圈,并没有发现合适的入门教程,要么是教程太老了,要么是写的不够详细,学习曲线很陡,光是部署就很费劲,而Zabbix 重要的不是部署,而是学会如何使用。

所以这篇笔记就是用来记录如何快速部署 Zabbix。

认识 Zabbix

Zabbix 是一个企业级的分布式开源监控方案。

一个完整的监控系统是由服务机(zabbix server)和客户机(zabbix zgent)组成,运行大概流程是这样的:
zabbix agent 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到 zabbix server 端,zabbix server将数据存储到自己的数据库中,zabbix web根据数据在前端进行展现和绘图。这里 agent 收集数据分为主动和被动两种模式:

  • 主动:agent 请求server 获取主动的监控项列表,并主动将监控项内需要检测的数据提交给 server/proxy 。
  • 被动:server 向agent请求获取监控项的数据,agent返回数据。

工作原理:

安装

系统环境:

  • Ubuntu 18.04 LTS
  • Mysql 5.7
  • PHP 7.2
  • Nginx
  • Zabbix 5.0

1. 安装数据库

在正式安装之前,这里推荐先去官网找到符合自己的 Zabbix 服务器平台。

根据自己的实际环境来找到属于自己的下载链接,比如我是Zabbix 5.0 + Ubuntu 18.04 + Mysql + Nginx,所以我的安装方式应该是:

1
2
3
$ wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+bionic_all.deb
$ dpkg -i zabbix-release_5.0-1+bionic_all.deb
$ apt update

2. 安装Zabbix server,Web前端,agent

1
$ apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-agent
  • Zabbix Server:用来接收并处理 Zabbix agent 传过来的数据
  • Web 前端:Zabbix 的交互界面
  • Zabbix agent:需要被监控的主机

3. 初始数据库

安装完数据库之后,并不能直接登录,因为不知道root 用户的密码,所以需要重置root 用户的密码,重置的方式有多种,这里推荐我常使用的的一种。

1
2
3
4
5
6
# vim /etc/mysql/conf.d/mysql.conf  
# 也许你编辑的配置文件和我的名称不一样,不过没关系。

# 添加下面两行配置
[mysqld]
skip-grant-tables

重启Mysql 服务:

1
$ service mysql restart

现在的root 用户已经没有密码了,所以下一步要做的就是修改root 用户密码:

1
2
3
$ mysql -hlocalhost -uroot -p

mysql > UPDATE mysql.user SET authentication_string=PASSWORD('password'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';

然后再次修改刚才的配置文件,将下面那行配置给注释掉, 最后重启Mysql 服务就可以了。

Mysql 默认用户是root,这里不推荐直接使用 root 用户去管理 zabbix 数据库,所以还是使用官方推荐的方式,创建一个新的用户去管理:

1
2
3
4
5
6
7
$ mysql -hlocalhost -uroot -p

mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> flush privileges;
mysql> quit;

这里默认Mysql 是运行在本地机器上,如果Mysql 运行在容器中,而Zabbix 又运行在本机上,可能会出现一些异常(我遇到了但没能解决)。

导入初始架构和数据。

1
$ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

4. 配置数据库

为Zabbix server配置数据库,

1
2
3
# vim /etc/zabbix/zabbix_server.conf

DBPassword=password

5. 配置Web

1
2
3
4
5
# vim /etc/zabbix/nginx.conf

# 去掉前面的注释,换成你自己的端口或者域名。
# listen 80;
# server_name example.com;

6. 配置时区

1
2
3
# vim /etc/zabbix/php-fpm.conf

php_value[date.timezone] = Asia/Shanghai

7. 启动服务

启动Zabbix server和agent 进程,并为它们设置开机自启:

1
2
$ systemctl restart zabbix-server zabbix-agent nginx php7.2-fpm
$ systemctl enable zabbix-server zabbix-agent nginx php7.2-fpm

一切准备就绪之后,就可以访问了:http://server_ip_or_name,如果你上面配置的不是80 端口,那得记得加上对应的端口。如果你不能正常访问,那可能是因为防火墙没有允许该端口。

初次进来,需要配置相关参数,确认无误之后,点击 Next step。

Zabbix 默认的用户名和密码是Adminzabbix,顺利登录到后台之后,记得修改默认登录密码。

配置中文语言包

如果需要设置中文版的环境,需要做一些额外的配置。

1
$ vim /usr/share/zabbix/include/locales.inc.php

将zh_CN 后面参数改为 true。

如果在选择语言时,发现还是不能选择,并且提示:

You are not able to choose some of the languages, because locales for them are not installed on the web server.

这是因为你系统里没中文环境,查看当前的所有系统语言环境

1
$ locale -a

1. 安装中文包

1
apt-get install language-pack-zh-hant language-pack-zh-hans

2. 配置环境变量

增加语言和编码的设置:

1
2
3
4
# vim /etc/environment

LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"

3. 替换Zabbix 语言包

1
2
3
4
5
$ cd cd /usr/share/zabbix/locale/zh_CN/LC_MESSAGES
$ wget https://github.com/echohn/zabbix-zh_CN/archive/v0.1.0.zip
$ unzip master.zip
$ rm frontend.mo
$ cp zabbix-zh_CN-master/frontend.mo frontend.mo

4. 解决乱码问题

1
2
3
4
5
$ wget https://github.com/chenqing/ng-mini/blob/master/font/msyh.ttf
$ vim /usr/share/zabbix/include/defines.inc.php

# 找到 define('ZBX_GRAPH_FONT_NAME', 'graphfont');
# 将graphfont 替换成 msyh

5. 更新mibs 库

1
$ apt-get install snmp-mibs-downloader

6. 重启服务

1
$ systemctl restart zabbix-server zabbix-agent php7.2-fpm

至此Zabbix 的完整部署过程就全介绍完了。

参考链接

评论