搭建zabbix属于没有事情可干而干的事,其实很大原因是因为宝塔那个插件要钱;简单说就一个“穷”字
以前在内网的树莓派上搭过这玩意,然后成功翻车了当时用的是编译安装,然而怎么整都没有正常工作,当时又懒,所以就把系统重置了(成功让我又编译了一次WiringPi),现在再来装选在了一个我没怎么用过的国内服务器上。
(没有多少图)
简单步骤
因为我可能会写下我安装配置的全过程(包括建议),所以你实在懒得看可以就看这一点点,命令基础为Ubuntu,amd64架构,root权限。宝塔配置为LNMP,Mysql版本8.0(Zabbix 6.0LTS好像强制这个版本,简单步骤不包括有关宝塔强制安装的过程)。提前创建网站连带数据库并按照顺序导入源码包里的schema.sql、images.sql和data.sql,将源码中的ui文件夹下所有文件放在网站根目录。简单步骤不包括zabbix proxy的安装。
同时,因为我是从docker转的数据库,所以可能有想的不周到的地方,配置的时候最好多找找文档。
配置源
echo "deb https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/ubuntu/ $(lsb_release -cs) main" >> /etc/apt/sources.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 082AB56BA14FE591
apt update
安装预编译包
服务器端
apt install -y zabbix-server-mysql zabbix-agent2
监控端
apt install -y zabbix-agent2
配置
服务端
nano /etc/zabbix/zabbix_server.conf
配置 DBName
、DBUser
、DBPassword
,同时因为宝塔Mysql的Socket不同,还需设置 DBSocket=/tmp/mysql.sock
,或者用软连接 ln -s /tmp/mysql.sock /var/run/mysqld/mysqld.sock
然后 systemctl restart zabbix-server
重启服务;systemctl enable zabbix-server
开机自启
可以 cat /var/log/zabbix/zabbix_server.log
看看有没有报错
监控端
配置文件在 /etc/zabbix/zabbix_agent2.conf
如果监控端与服务端在一个服务器就基本不用修改,有需要的话可以修改 Hostname
如果不在一个服务器,需要修改 Server
(主动),ServerActive
与 Hostname
(被动);有需要的话可以修改 TLSConnect
、TLSAccept
来使用PSK加密,并在 TLSPSKIdentity
与 TLSPSKFile
配置PSK密钥的相关设置。并放开服务端与监控端的10050端口,建议用服务器提供商的防火墙来指定该端口只能由服务端的IP访问。
systemctl restart zabbix-agent2
重启服务;systemctl enable zabbix-agent2
开机自启
日志在 /var/log/zabbix/zabbix_agent2.log
systemctl status
里都看不到日志呢
前端
提前把宝塔PHP的禁用函数中的 putenv
删除,并把最大输入时间设为300;然后完全按照网页的指引就行,如果没有中文选项就需要服务器安装中文包检查 dpkg-reconfigure locales
,选择一个中文就行,或者 apt-get install language-pack-zh-hans
然后重启服务器。默认用户为Admin,密码是zabbix (用户名区分大小写)
END
完整步骤
准备工作
以下命令全部基于root权限。
系统为Ubuntu 20.04 LTS 宝塔配置为LNMP,Mysql版本8.0(Zabbix 6.0LTS好像强制这个版本) 除此之外你还需要准备源码包
强制安装Mysql8.0:
编译安装 :
wget http://download.bt.cn/install/0/mysql.sh bash mysql.sh install 8.0
急速安装:
wget http://download.bt.cn/install/1/mysql.sh bash mysql.sh install 8.0
同时,zabbix只支持utf8_bin、utf8mb3_bin、utf8mb4_bin编码,具体会在日志里显示为(虽然好像都能用?):
Zabbix supports only "utf8_bin,utf8mb3_bin,utf8mb4_bin" collation(s). Database "zabbix_proxy" has default collation "utf8mb4_unicode_520_ci" only character set(s) "utf8,utf8mb3,utf8mb4" and corresponding collation(s) "utf8_bin,utf8mb3_bin,utf8mb4_bin" should be used in database
创建网站(PHP)与数据库,数据库按照顺序导入源码里 /database/mysql/
目录下的schema.sql、images.sql和data.sql;然后将 /ui/
目录下的所有文件放在网站根目录。(schema.sql为数据库表结构,如果后续需要安装zabbix proxy的话,这个文件还会用到,可以先别删。)
把宝塔PHP的禁用函数中的 putenv
删除,并把最大输入时间设为300。
当然Zabbix Linux有预编译包可以直接用,可以省去很多时间,但是不要使用系统自带的源,自带的源的包非常旧。
echo "deb https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/ubuntu/ $(lsb_release -cs) main" >> /etc/apt/sources.list
这个是清华的源,官方的源在:Zabbix
如果你要在树莓派等arm架构的Linux上安装请把链接末尾的ubuntu改成ubuntu-arm64或者raspbian。或者,安装其他版本请更改链接中的数字,不确定的话请访问链接然后更改命令里的链接。
然后执行 sudo apt update
,若报错,请执行以下命令(把返回的keys替换命令中的 <keys>
):
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <keys>
然后 apt install -y zabbix-server-mysql zabbix-agent2
安装 (按需安装)
关于proxy,proxy需要单独的数据库,一般用于服务端与客户端访问困难时(监控通信不可靠的位置)的解决方法,或者用于分摊服务端的压力,就像这样:
代理只需要一个到 Zabbix 服务器的 TCP 连接。这种方式更容易绕过防火墙,因为您只需要配置一个防火墙规则。
proxy的数据库只需要导入schema.sql这个文件服务启动并连接上数据库时会自动初始化数据库。
配置
server的配置文件在 /etc/zabbix/zabbix_server.conf
需要找到并修改:
- DBName、DBUser、DBPassword
- 同时因为宝塔Mysql的Socket不同,还需设置
DBSocket=/tmp/mysql.sock
,或者用软连接ln -s /tmp/mysql.sock /var/run/mysqld/mysqld.sock
然后 systemctl restart zabbix-server
重启服务;systemctl enable zabbix-server
配置开机自启;之后可以 cat /var/log/zabbix/zabbix_server.log
看看有没有报错。
agent的配置文件在 /etc/zabbix/zabbix_agent2.conf
- 如果server与agent在一个机器里可以完全不用配置,直接
systemctl enable zabbix-agent2
设置开机自启就行了。 - 如果不在一个机器,需要更改
Server
(主动模式),ServerActive
与Hostname
(被动模式,hostname要唯一) - 有需要的话 (前提是agent与server都要有openssl编译,预编译软件包自带,Windows端的agent需要看清楚下载带openssl的) 可以修改
TLSConnect
、TLSAccept
来使用PSK加密,并在TLSPSKIdentity
与TLSPSKFile
配置PSK密钥的相关设置。
在linux上PSK可以用
openssl rand -hex 32
获取并创建.psk
文件,填入命令获取的一长串输出,然后更改文件的权限,设置为仅限zabbix用户读取(路径与文件名替换为自己的):chown zabbix.zabbix /etc/zabbix/zabbix_agent2.psk chmod 400 /etc/zabbix/zabbix_agent2.psk
agent的配置文件中
TLSPSKIdentity
可以自定义(一个PSK对应一个Identity)windows版的agent可以就使用msi安装,安装过程可以配置PSK,并自动注册系统服务
相关配置文件在
C:\Program Files\Zabbix agent2
(应该没记错)下
关于PSK的问题,最好就用一个PSK,可以保证使用代理的时候也能正确连接(没完全测试过用不同的PSK,好像不行,会报TLS错误好像)
算了还是提一下proxy的配置,proxy可以在最后配置
-
ProxyMode:proxy的主/被动设置 默认是0(主动式),也就是proxy从服务端10051端口获取配置然后自主监控、存储数据然后把数据发送给服务端,减小服务端的负载。(更新服务端上的使用代理的主机配置后最好把代理重启一下,然后你就会在日志
/var/log/zabbix/zabbix_proxy.log
里看见一个类似一下的输出:received configuration data from server at "<服务端的IP>", datalen <数字>
-
Server、Hostname(proxy没有ServerActive)跟server与agent一样
-
proxy同样需要填写DBName、DBUser、DBPassword,因为是宝塔的环境,所以一样,DBSocket也要更改为
/tmp/mysql.sock
-
StatsAllowedIP:填只允许的IP的,然而你会在服务端的web界面找到一样的设置,所以这里其实不用管,直接在服务端增加代理的时候填写代理地址就行了
<br>
-
配置TLSConnect (TLSAccept只需要在设置为ProxyMode=1,也就是被动式的时候填写)、TLSPSKIdentity、TLSPSKFile来使用加密 (在编译有openssl的前提下才能使用加密,预编译软件包自带);配置完后在列表里会有一个小的标志
<br>
<br>
-
可以看看列表里的“最近出现(持续)”来看看是不是连上了(主动式不会持续连接,通常就几秒钟)
-
有关proxy与server的区别,官方文档里有个表格(因为暂时没有中文翻译就用机翻代替一下):
Function 功能 | Supported by proxy 代理支持 |
---|---|
Items 项目 | |
Zabbix agent checks Zabbix 代理检查 | Yes |
Zabbix agent checks (active) Zabbix 代理检查(主动) | Yes |
Simple checks 简单检查 | Yes |
Trapper items 捕手物品? | Yes |
SNMP checks SNMP检查 | Yes |
SNMP traps SNMP陷阱 | Yes |
IPMI checks IPMI检查 | Yes |
JMX checks JMX检查 | Yes |
Log file monitoring 日志文件监控 | Yes |
Internal checks 内部检查 | Yes |
SSH checks SSH检查 | Yes |
Telnet checks Telnet检查 | Yes |
External checks 外部检查 | Yes |
Dependent items 依赖项 | Yes |
Built-in web monitoring 内置网络监控 | Yes |
Network discovery 网络发现 | Yes |
Low-level discovery 低级发现 | Yes |
Remote commands 远程命令 | Yes |
Calculating triggers 计算触发器 | No |
Processing events 处理事件 | No |
Event correlation 事件关联 | No |
Sending alerts 发送警报 | No |
Item value preprocessing 项值预处理 | No |
前台
server的前台在PHP配置好的前提下访问网页,一步一步按照提示下一步就行;如果没有中文选项就需要服务器安装中文包检查 dpkg-reconfigure locales
,选择一个中文就行,或者 apt-get install language-pack-zh-hans
然后重启服务器。 默认用户为Admin,密码是zabbix (用户名区分大小写)
PHP的插件那个界面最好全部装上,装完直接刷新页面即可;网页也需要填写server的数据库信息,后面可能会出现要手动把配置文件放在网站根目录下的 /conf
下,直接下载下来用宝塔上传上去就行,配置好权限与用户组。
一些小建议
(部分在宝塔环境下建议)
- 在添加主机时宏里的所有localhost (除了mysql的,mysql是要填
{$MYSQL.DSN}
) 最好都改为127.0.0.1,不然会有些奇奇怪怪的报错。(比如有的模板不支持301重定向,而localhost必然301到了127.0.0.1等;还有之前还挺好,我加了个PSK加密就不行了等等奇葩问题) - 添加Nginx by Zabbix agent模板时可以完全不用按照模板的操作,直接添加就行,什么都不用改,因为宝塔自己也是用的ngx_http_stub_status_module来显示Nginx状态的;同理添加PHP-FPM by Zabbix agent模板也不需要按照模板的文档添加任何东西,只需要更改宏
{$PHP_FPM.STATUS.PAGE}
为phpfpm_74_status(74对应PHP7.4,同理)即可. - 因为宝塔的安全设置所以“Nginx: Version”这个监控项是获取不到的,可以不用管或者直接在模板里关闭。(可以调,但是有点麻烦)
- 官方的Redis by Zabbix agent 2模板不支持设置了密码的Redis,论坛里有相关的问题与回答:Zabbix official redis template does not pass password,不过Redis在本地用可以不用设置密码 (前提是端口对外关闭)
- 安装proxy带agent时记得在主机配置里添加Zabbix proxy health模板,同理server有Zabbix server health模板
- 可以直接去模板更改宏一样的项。
- 对MySQL的监控的账户最好拥有
SELECT, SHOW DATABASES, REPLICATION CLIENT
的全局权限以监控每个数据库的状况 (SHOW DATABASES与REPLICATION CLIENT权限是自动发现规则需要用到的,然后后续自动添加的监控项需要SELECT权限来获取数据库的大小)
END
Docker版安装
顺便把我最早用docker部署的全部命令发上来(自行更改<>的内容)
基本来自于官方的文档内容
创建专用于 Zabbix 的网络:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
启动Mysql8.0的容器
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="<password>" \
-e MYSQL_ROOT_PASSWORD="<password>" \
--network=zabbix-net \
--restart unless-stopped \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
启动Zabbix java网关
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:ubuntu-6.0-latest
启动Zabbix server
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="<password>" \
-e MYSQL_ROOT_PASSWORD="<password>" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:ubuntu-6.0-latest
启动前台
docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="<password>" \
-e MYSQL_ROOT_PASSWORD="<password>" \
--network=zabbix-net \
-p 18080:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:ubuntu-6.0-latest
启动agent(用了高权限)
IP参考如何获取 docker 容器(container)的 ip 地址
docker run --name local-zabbix-agent -t \
--link zabbix-server-mysql:local-zabbix-server \
-e ZBX_HOSTNAME="Zabbix server" \
-e ZBX_SERVER_HOST="<server在docker里的ip>" \
--privileged \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-agent:ubuntu-6.0-latest
访问端口是18080,要监控其他服务器要防火墙开启10050端口
其他服务器用docker(用了高权限):
docker run --name <name> -it \
-e ZBX_HOSTNAME="<hostname>" \
-e ZBX_SERVER_HOST="<ip>" \
-e ZBX_ACTIVESERVERS="<ip>" \
--privileged \
-p 10050:10050 \
--restart unless-stopped \
-d zabbix/zabbix-agent2:ubuntu-6.0-latest
docker好像不能监控容器外的nginx与php之类的,如果只要监控linux,docker版挺好用的。
参考资料
版权属于:ShiroKumo
本文链接:https://www.shiro-kumo.com/archives/374/build-zabbix-service-in-baota-environment.html
所有原创文章采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。