Zabbix概述

Zabbix是⼀个基于WEB界⾯的提供分布式系统监视以及⽹络监视功能的企业级的开源解决⽅案,由 Alexei Vladishev 在1991年的莫斯科写下第一版,目前由 Zabbix SIA 主导开发和支持。Zabbix能监视各种⽹络参数,保证服务器系统的安全运营;并提供各种通知机制以让系统管理员快速定位/解决存在的各种问题。Zabbix主要由2部分构成,Zabbix server与可选组件Zabbix agent。Zabbix server可以通过SNMP,Zabbix agent,Ping,端⼝监视等⽅法提供对远程服务器/⽹络状态的监视,数据收集等功能,它可以运⾏在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台上。Zabbix 是免费的。Zabbix 是在 GPL 通用公共许可证第 2 版下编写和分发的。这意味着它的源代码是免费分发的,可供公众使用。

Zabbix是⼀款综合了数据收集、数据展⽰、数据提取、监控报警配置、⽤⼾展⽰等⽅⾯的⼀款综合运维监控平台。Zabbix学习⼊⻔较快,功能也很强⼤,是⼀个可以迅速⽤起来的监控软件,能够满⾜中⼩企业的监控报警需求,因此是中⼩型企业运维监控的⾸选平台。

Zabbix⽬前发布的版本有标准版和⻓期⽀持版(LTS)两种,LTS为Long Term Support的简写。Zabbix LTS版本,将为客⼾提供5年的⽀持服务。前三年完全⽀持与后两年有限制⽀持。前三年包括⼀般、关键、安全性问题解决,后两年包括关键、安全性问题解决。超出时间不提供技术⽀持服务。Zabbix标准版,发布计划周期为六个⽉,每六个⽉将有⼀个新的Zabbix稳定版本发布。⽬前Zabbix LTS最新版本为Zabbix 7.0 LTS。

2024.06 摄于广州海珠·广州医科大学第一附属医院住院部

Server端安装

数据库准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 安装MySQL Server 8.0数据库
dnf -y install mysql-server

# 指定客户端和服务端使用utf8来访问mariadb
cat > /etc/my.cnf.d/charset.cnf <<'EOF'
[mysqld]
character-set-server = utf8mb4

[client]
default-character-set = utf8mb4
EOF

# 拉起服务
systemctl enable --now mysqld

# 创建数据库
mysql -uroot << EOF
CREATE USER zabbix@localhost IDENTIFIED BY 'zabbix';
CREATE DATABASE zabbix CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_bin';
GRANT all privileges on zabbix.* to 'zabbix'@'localhost';
FLUSH PRIVILEGES;
set global log_bin_trust_function_creators = 1;
exit
EOF

# 访问测试
mysql -uzabbix -pzabbix -hlocalhost <<EOF
show databases;
exit
EOF

服务端部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# 获取Nginx官方源
cat > /etc/yum.repos.d/nginx.repo <<'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

# 使用Redhat系主机,如果开启EPEL,需要在epel的repo源中取消zabbix的安装包
rm -rf /etc/yum.repos.d/epel*
cat > /etc/yum.repos.d/epel.repo <<'EOF'
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
excludepkgs=zabbix*
EOF

# 获取官方源
rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm
dnf clean all
dnf makecache

dnf install -y nginx php php-fpm
dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent

# 修改php-fpm时区
cat >> /etc/php-fpm.d/zabbix.conf <<EOF
php_value[date.timezone] = Asia/Shanghai
EOF

# 导入数据库
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

# 字体问题解决
dnf install -y mkfontdir mkfontscale
wget https://dl.rockylinux.org/pub/rocky/8/AppStream/aarch64/os/Packages/w/wqy-microhei-fonts-0.2.0-0.22.beta.el8.noarch.rpm
rpm -Uvh wqy-microhei-fonts-0.2.0-0.22.beta.el8.noarch.rpm

# 字体备用站点
# wget https://abf-downloads.openmandriva.org/5.0/repository/x86_64/unsupported/release/fonts-ttf-wqy-zenhei-0.9.45-4-omv4002.noarch.rpm
# rpm -Uvh fonts-ttf-wqy-zenhei-0.9.45-4-omv4002.noarch.rpm

cd /etc/alternatives
rm -rf zabbix-web-font
ln -s /usr/share/fonts/wqy-microhei/wqy-microhei.ttc zabbix-web-font
# ln -s /usr/share/fonts/TTF/wqy-zenhei/wqy-zenhei.ttc zabbix-web-font
cd ~

# 修改Zabbix Server配置文件
cat >>/etc/zabbix/zabbix_server.conf <<EOF
DBPassword=zabbix
DBSocket=/var/lib/mysql/mysql.sock
EOF

# 重新配置数据库全局属性
mysql -uroot << EOF
set global log_bin_trust_function_creators = 0;
exit
EOF

# 修改Nginx配置文件
sed 's/8080/80/g; s/example.com/zbx.sujx.net/g; s/#//g' /etc/nginx/conf.d/zabbix.conf

# 启动进程
systemctl enable --now zabbix-server zabbix-agent nginx php-fpm

# 锁定软件版本,防止意外升级
dnf install -y python3-dnf-plugin-versionlock
dnf versionlock add zabbix-* mysql-server

#配置防火墙
systemctl enable --now firewalld
firewall-cmd --permanent --add-service={http,https}
firewall-cmd --permanent --add-port={10051/tcp,10050/tcp}
firewall-cmd --reload

配置WEB

  1. 使用setup向导部署web ui
  2. 前置安装条件检查
  3. 配置数据库
  4. 配置时区和主题
  5. 安装结束
  6. 进入系统

Agent端部署

配置Yum源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 使用Redhat系主机,如果开启EPEL,需要在epel的repo源中取消zabbix的安装包
# CentOS、RockyLinux、RHEL等RPM系主机的agent部署
rm -rf /etc/yum.repos.d/epel*
cat > /etc/yum.repos.d/epel.repo <<'EOF'
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
excludepkgs=zabbix*
EOF

rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm
dnf clean all
dnf makecache

# Ubuntu、Debian等deb系主机的部署
# wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-2+ubuntu22.04_all.deb
# dpkg -i ./zabbix-release_7.0-2+ubuntu22.04_all.deb
# apt update

手动安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# CentOS、RockyLinux、RHEL等RPM系主机的agent部署
# 安装Agent2
dnf install zabbix-agent2 zabbix-agent2-plugin-*
dnf install -y python3-dnf-plugin-versionlock
dnf versionlock add zabbix-*

# Ubuntu、Debian等deb系主机的部署
# apt install zabbix-agent2 zabbix-agent2-plugin-*
# apt-mark hold zabbix-agent2*

# 修改Agent2的配置文件
sed -i 's/Server=127.0.0.1/Server=zbx.sujx.net/; s/ServerActive=127.0.0.1/ServerActive=zbx.sujx.net/; s/Hostname=Zabbix server/# Hostname= Zabbix Agent/; s/# UnsafeUserParameters=0/UnsafeUserParameters=1/; s/# HostnameItem=system.hostname/HostnameItem=system.hostname/; s/# HostMetadata=/HostMetadata=linux zabbix.beijing/ ' /etc/zabbix/zabbix_agent2.conf

# 启动服务
systemctl enable --now zabbix-agent2

#配置防火墙
systemctl enable --now firewalld
firewall-cmd --permanent --add-service=zabbix-agent
firewall-cmd --reload

创建主机

查看视图

告警配置

电子邮件

添加邮件媒介

  1. 设置电子邮件SMTP
  2. 用户添加E-Mail通知

添加动作

  1. 启用“通知管理员”
  2. 配置发送条件

电话告警

可以使用饭碗告警的邮件转电话方式来实现电话通知

自动化

自动化部署Agent

部署Ansible

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 创建目录
mkdir -p ~/ansible/{files,log,tmp,playbook,pem}
touch ~/ansible/{inventory,ansible.cfg}
dnf makecache
dnf update

# 配置证书
# 由于主机使用证书方式访问SSH,所以需要将pem文件放置到~/ansible/pem目录下
chmod 400 ~/ansible/pem/wulanchabu.pem
dos2unix ~/ansible/pem/wulanchabu.pem

# 安装Ansible
dnf install -y ansible

# 配置Ansible
cat > ~/ansible/ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory
remote_tmp = ./tmp
local_tmp = ./tmp
log_path = ./log/ansible.log
private_key_file = ./pem/wulanchabu.pem

forks = 5
poll_interval = 15
transport = smart
host_key_checking = False

# [privilege_escalation]
# become = True
# become_method = sudo
# become_user = root
EOF

cat >> ~/ansible/inventory <<'EOF'
[MartixAccount]
macc[20:39].sujx.net
EOF

# 校验
ansible all -m ping

批量部署

创建执行脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

#!/bin/bash
# touch /tmp/zabbix_agent_install.sh
rm -rf /etc/yum.repos.d/epel*
cat > /etc/yum.repos.d/epel.repo <<'EOF'
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
excludepkgs=zabbix*
EOF

rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm
dnf clean all
dnf makecache

dnf install -y zabbix-agent2 zabbix-agent2-plugin-*
dnf install -y python3-dnf-plugin-versionlock
dnf versionlock add zabbix-*

sed -i 's/Server=127.0.0.1/Server=zbx.sujx.net/; s/ServerActive=127.0.0.1/ServerActive=zbx.sujx.net/; s/Hostname=Zabbix server/# Hostname= Zabbix Agent/; s/# UnsafeUserParameters=0/UnsafeUserParameters=1/; s/# HostnameItem=system.hostname/HostnameItem=system.hostname/; s/# HostMetadata=/HostMetadata=linux zabbix.beijing/ ' /etc/zabbix/zabbix_agent2.conf

systemctl enable --now zabbix-agent2
Ansible部署
1
2
ansible all -m copy -a "src=/tmp/zabbix_agent_install.sh dest=/tmp/"
ansible all -m shell -a 'sh /tmp/zabbix_agent_install.sh'

自动化添加主机

添加规则

启用动作