一、先想清楚:一个理想的监控系统该有什么

动手装之前,最好先有套标准。网课上总结的 "理想监控系统" 清单,我理解下来是三层。

第一层,监控本身。

  • 能自定义监控内容,自己写脚本采集数据就行
  • 数据要入库,方便事后分析计算
  • 部署要简单快速
  • 可视化要直观清晰

第二层,告警。

  • 告警逻辑能定义得复杂,比如监控项之间的关联告警、程序依赖检测,而不是只盯一个孤立的指标
  • 告警要能确认响应,让组里人知道 "这个已经有人在处理了"
  • 报警方式可自定义:短信、邮件、微信、钉钉
  • 告警内容可自定义,能带一点简单分析,省得人还得登服务器去看
  • 报警后能自动的简单的预处理,比如自我修复、重启、采集数据

第三层,协同。

  • 有 API 给研发和其他系统调用
  • 监控数据开放、结构主流,方便解析
  • 可视化能插件化使用,而不是一堆复杂的 JS 文件

二、监控到底在监控什么

一个监控对象有哪些?

硬件监控:
通过远程控制卡:Dell的iDRAC,HP的ILO和IBM的IMM等
使用IPMI来完成物理设备的监控工作。通常必须要监控的就是温度、硬盘故障等
路由器,交换机(端口,光庭,日志),打印机,Windows等

系统监控:
cpu,内存,硬盘使用率,硬盘IO,系统负载,进程数

服务监控:
apache,nginx.php-fpm,mysql.memcache,redis,tomcat,JVM,TCP连接数

性能监控:
网站性能,服务器性能,数据库性能,存储性能

日志监控:
使用ELK来进行日志监控

安全监控:
(1)Nginx+Lua编写了一个WAF通过kibana可以图形化的展示不同的攻击类型的统计。
(2)用户登录数,passwd文件变化,本地所有文件改动

网络监控:
端口,web(URL),DB.ping包,IDC带宽网络流量,网络流出出速率,网络入流量,网络出流量,网络使用率,SMTP.POP3

三、Zabbix 是什么

Zabbix 是 Alexei Vladishev 开发的一套网络监视、管理系统,基于 Server-Client 架构,用来监视各种网络服务、服务器和网络机器的状态。

几个关键点:

  • 数据存储:支持 MySQL、PostgreSQL、SQLite、Oracle、IBM DB2 等(注意单独设置mysql的zabbix账户与专门数据库)
  • 技术栈:Server 端用 C 语言写,Web 前端用 PHP(注意版本,低版本如php5可能不兼容)
  • 监控方式灵活:可以只用 Simple Check,不装客户端;在 UNIX/Windows 上装 Agent 后能监控 CPU Load、网络状况、硬盘容量等;不装 Agent 也能通过 SNMP、TCP、ICMP、IPMI、SSH、telnet 监控目标
  • 扩展性:自带 Item 足够满足普通小公司;大公司可以自定义 Item、自动生成报表、用 API 和其他系统集成

zabbix的业务逻辑

一个完整的 Zabbix 监控系统主要由以下部分组成:

组件角色与职责部署位置
Zabbix Agent数据采集器。部署在被监控目标(如服务器、网络设备)上,负责采集CPU、内存、磁盘等数据。所有被监控的主机上
Zabbix Proxy区域代理。可选组件,充当Server的“区域采集站”。负责代表Server收集其下所有Agent的数据,进行缓存和预处理后,再批量转发给Server。(代理)靠近被监控端的独立服务器或容器
Zabbix Server核心控制节点。整个系统的“大脑”,负责接收所有数据、触发告警、执行动作,并提供API接口。(主机)中心服务器
Database数据存储。存储所有配置、历史数据和事件信息。(数据库)通常与Server在同一台或独立的数据库服务器上
Web UI用户界面。提供图形化的配置、监控数据查看和报表功能。(就是浏览器)可与Server在同一台或独立部署

四、部署实战:CentOS 7 上部署Zabbix

1. 环境初始化

# 查看 IP
ifconfig eth0 | awk 'NR==2{print $2}'

# 关闭 SELinux(改完重启生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 关闭并禁用防火墙
systemctl disable --now firewalld

注意:Zabbix Server 内存尽量给大一点,4G 比较稳。

2. 获取下载源,换成阿里云镜像

rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

把 repo 里的官方源替换成阿里云,国内下载快:

sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo

清缓存,装服务端和 agent:

yum clean all
yum makecache
yum install zabbix-server-mysql zabbix-agent -y

3. 装前端(Web 界面)

Zabbix 5.0 的 Web 前端跑在 SCL(Software Collections)环境里,先装 SCL 工具:

yum install centos-release-scl -y

再把 [zabbix-frontend] 段的 baseurl 改成阿里云镜像:

vim /etc/yum.repos.d/zabbix.repo
改成:
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/frontend
enabled=1(默认为0所以不会装)
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

grep -A6 '^\[zabbix-frontend\]' /etc/yum.repos.d/zabbix.repo   # 确认 enabled=1、baseurl 是阿里云
yum makecache
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y

安装前端环境和 Apache 配置:

yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y

##注意如果报错cannot find,大概率是依赖树出了问题,换源成阿里云的镜像站即可

4. 装数据库 MariaDB

yum install mariadb-server -y
systemctl enable --now mariadb

初始化并设置 root 密码(演示用 123,生产请换强密码):

mysql_secure_installation

这里有个交互项 "Disallow root login remotely? [Y/n]",学习用的虚拟机可以选 n 跳过;允许远程 root 登录在生产环境不建议。

5. 建库建用户

mysql -uroot -p//进入数据库

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> create user zabbix@localhost identified by '123';


SHOW DATABASES;//看看创建了没有

补一步授权 —— 网课里没明说,但导入数据前必须做,否则后面会报权限错误:

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by '123';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;

6. 导入初始数据

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

7. 改 server 配置文件里的数据库密码

grep '^DBPa' /etc/zabbix/zabbix_server.conf
# DBPassword=123 //记得去注释
systemctl restart zabbix-server
//改完重启

8. 改 PHP 时区

时区不对的话,Web 安装向导会卡住。改 PHP-FPM 配置:

grep 'timezone' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Shanghai

9. 启动服务并访问

systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

浏览器访问 http://192.168.75.153/zabbix,默认账号密码(注意大小写,网课老师专门强调过,用大写):

Admin
zabbix

老问题

[root@m01 ~]# chown -R zabbix:zabbix /var/run/zabbix
[root@m01 ~]# chmod 755 /var/run/zabbix
由于老版或者zabbix文件权限不足导致无法运行zabbix,提权即可

成功了

五、agent2的部署

1.前置准备

时间同步

Zabbix 对时间敏感程度高,服务端与客户端时间不一致会出现监控数据异常、数据不采集、告警错乱等问题,所有 agent 节点都要做时间同步。

# 安装ntpdate时间同步工具
yum install ntpdate -y

# 同步阿里云NTP时间服务器
ntpdate -u ntp.aliyun.com

#备份原有localtime
mv /etc/localtime{,.bak}
#软链接指向上海时区
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


添加防火墙的10050端口规则(agent2默认的端口是10050的高位端口)

firewall‑cmd --add‑port=10050/tcp --permanent
firewall‑cmd --reload

2.安装

yum install zabbix-agent2 -y    //安装

systemctl enable --now zabbix-agent2    //设置自启

ss -tnlp | grep zabbix    //老系统用ss查看程序端口使用

ss -tnlp | grep 10050    //查看端口情况

3.配置文件

/etc/zabbix/zabbix_agent2.conf    //agent配置地址

ServerActive=127.0.0.1
Server=127.0.0.1
hostnanme=agentnanme
//修改为服务端地址与主机名

4.重启并且验证

systemctl restart zabbix-agent2

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐