1. Zabbix 监控系统入门简介
-
Zabbix
是一个基于WEB
界面的提供分布式系统监控的企业级的开源解决方案,Zabbix
能监视各种网络参数,保证服务器系统的安全稳定的运行,并提供灵活的通知机制以让SA
快速定位并解决存在的各种问题。Zabbix
分布式监控系统的优点如下:- 支持自动发现服务器和网络设备;
- 支持底层自动发现;
- 分布式的监控体系和集中式的
WEB
管理; - 支持主动监控和被动监控模式;
- 服务器端支持多种操作系统:
Linux、Solaris、HP-UX、AIX、FreeBSD、OpenBSD、MAC
等; - Agent 客户端支持多种操作系统:
Linux、Solaris、HP-UX、AIX、FreeBSD、Windows
等; - 基于
SNMP、IPMI
接口方式、Agent
方式; - 安全的用户认证及权限配置;
- 基于
WEB
的管理方法,支持自由的自定义事件和邮件、短信发送; - 高水平的业务视图监控资源,支持日志审计,资产管理等功能;
- 支持高水平
API
二次开发、脚本监控、自Key
定义、自动化运维整合调用。
2. Zabbix 监控组件及流程
- Zabbix 监控组件如图所示,主要由五大组件,分别是
Zabbix server端、Zabbix Proxy、Agent
客户端,其中Zabbix Server
端包括:WEB GUI、Database、Zabbix_Server
。
- Zabbix 监控系统具体监控系统流程如图所示:
-
Zabbix
监控完整流程包括:Agentd
安装在被监控的主机上,Agent
负责定期收集客户端本地各项数据,并发送到Zabbix Server
端,Zabbix Server
收到数据,将数据存储到数据库中,用户基于Zabbix WEB
可以看到数据在前端展现图像。 -
当
Zabbix
监控某个具体的项目,该项目会设置一个触发器阀值,当被监控的指标超过该触发器设定的阀值,会进行一些必要的动作,动作包括:邮件、微信报警或者执行命令等操作。如下为Zabbix
完整监控系统,各个部分负责的工作:Zabbix Server
:负责接收agent
发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行;Database Storage
:专用于存储所有配置信息,以及存储由Zabbix
收集到的数据;Web interface
:Zabbix
的GUI
接口,通常与Server
运行在同一台主机上;Proxy
:常用于分布监控环境中,代理Server
收集部分被监控端的监控数据并统一发往Server
端;Zabbix Agent
:部署在被监控主机上,负责收集本地数据并发往Server
端或Proxy
端;
-
Zabbix
监控部署在系统中,会包含常见的四个程序:zabbix_server 、zabbix_get、zabbix_agentd 、zabbix_proxy、zabbix_sender
等。四个程序启动后分别对应四个进程,如下为每个进程的功能:Zabbix_server
:Zabbix 服务端守护进程,其中zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy
的数据最终均是提交给Zabbix_Server
;Zabbix_Agentd
:客户端守护进程,负责收集客户端数据,例如收集cpu
负载、内存、硬盘使用情况等;Zabbix_get
:Zabbix
数据获取工具,单独使用的命令,通常在server或者 proxy
端执行获取远程客户端信息的命令;Zabbix_sender
:zabbix
数据发送工具,用于发送数据给server 或者proxy
,通常用于耗时比较长的检查。很多检查非常耗时间,导致zabbix
超时。于是我们在脚本执行完毕之后,使用sender
主动提交数据;Zabbix_proxy
:zabbix
分布式代理守护进程,分布式监控架构需要部署Zabbix_Proxy
。
3. Zabbix 监控方式及数据采集
-
Zabbix
分布式监控系统监控客户端的方式常见有三种,分别是Agent 方式、SNMP、IPMI
方式,三种方式特点如下:Agent
:Zabbix
可以基于自身Zabbix_agent
客户端插件监控OS
的状态,例如CPU
、内存、硬盘、网卡、文件等;SNMP
:Zabbix
可以通过简单网络管理协议(Simple Network Management Protocol,SNMP
)协议监控网络设备或者windows
主机等,通过设定SNMP
的参数将相关监控数据传送至服务器端,交换机、防火墙等网络设备一般都支持SNMP
协议;IPMI
:智能平台管理接口(Intelligent Platform Management Interface,IPMI
)即主要应用于设备的物理特性,包括:温度、电压、电扇工作状态、电源供应以及机箱入侵等。IPMI 最大的优势在于无论OS
在开机还是关机的状态下,只要接通电源就可以实现对服务器的监控;
-
Zabbix
监控客户端分为主动监控与被动监控,主被动模式以客户端为参照,Zabbix
监控客户端默认为被动模式,可以修改为主动模式,只需要在客户端配置文件中添加。可以关闭被动模式的方法:在配置文件中加入StartAgents=0
,即为关闭被动模式。主被动监控模式区别如下:Zabbix
主动模式:Agent
主动请求server
获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
,zabbix agent
首先向ServerActive
配置的IP
请求获取active items
,获取并提交active tiems
数据值server
或者proxy
;Zabbix
被动模式:Server
向agent
请求获取监控项的数据,agent
返回数据,Server
打开一个TCP
连接,Server
发送请求agent.ping
,Agent
接收到请求并且响应,Server
处理接收到的数据。
4. Zabbix 监控平台概念
- Zabbix 监控系统包括很多监控概念,掌握 Zabbix 监控概念能对 Zabbix 监控快速的理解,如下为 Zabbix 常用术语及解。
常用术语 | 解释 |
---|---|
主机(host) | 被监控的网络设备,可以写 IP 或者 DNS |
主机组(host group) | 主机组用于管理主机,可以批量设置权限 |
监控项(item) | 具体监控项,items 值由独立的 keys 进行识别 |
触发器(trigger) | 为某个 items 设置触发器,达到触发器会执行action 动作 |
事件(event) | 例如达到某个触发器,称之为一个事件 |
动作(action) | 对于特定事件事先定义的处理方法,默认可以发送信息及发送命令 |
报警升级(escalation) | 发送警报或执行远程命令的自定义方案,如隔 5分钟发送一次警报,共发送 5 次等 |
媒介(media) | 发送通知的方式,可以支持 Mail、SMS、Scripts等 |
通知(notification) | 通过设置的媒介向用户发送的有关某事件的信息 |
远程命令 | 达到触发器,可以在被监控端执行命令 |
模板(template) | 可以快速监控被监控端,模块包含:item、trigger、graph、screen、application |
web 场景(web scennario) | 用于检测 web 站点可用性,监控 HTTP 关键词 |
web 前端(frontend) | Zabbix 的 web 接口 |
图形(graph) | 监控图像 |
屏幕(screens) | 屏幕显示 |
幻灯(slide show) | 幻灯显示 |
5. Zabbix6.0 监控平台部署
IP地址 | 服务 |
---|---|
192.168.10.10 | nginx、php-fpm、mysql、zabbix-server |
192.168.10.20 | zabbix-agent |
5.1. 关闭防火墙
#关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
5.2. 部署 Nginx + PHP 环境并测试
#安装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
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
yum -y install nginx
#安装 php
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-ldap php72w-bcmath
#修改nginx配置文件
rm -rf /etc/nginx/conf.d/default.conf
vim /etc/nginx/conf.d/zabbix.conf
server {
listen 80;
server_name sxy.zabbix.com;
root /usr/share/nginx/html;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#修改 php 配置
vim /etc/php-fpm.d/www.conf
user = nginx
group = nginx
listen = 0.0.0.0:9000
vim /etc/php.ini
max_execution_time = 300
max_input_time = 600
post_max_size = 80M
date.timezone = Asia/Shanghai
#创建测试文件,启动服务
vim /usr/share/nginx/html/index.php
<?php
phpinfo();
?>
systemctl start nginx php-fpm
5.2.1. 测试访问
- 修改C:\Windows\System32\drivers\etc\hosts
- 添加以下内容:192.168.10.10 sxy.zabbix.com
- 打开浏览器访问:http://sxy.zabbix.com/index.php
5.3. 安装数据库并配置
#安装mysql
yum -y install https://repo.mysql.com/mysql80-community-release-el7-7.noarch.rpm
yum -y install mysql-community-server
#启动mysql
systemctl start mysqld
#查询mysql的默认密码为:ueFgj11+,k1l
grep "pass" /var/log/mysqld.log
2024-04-08T08:30:06.031992Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ueFgj11+,k1l
#修改密码和密码策略
mysql -uroot -p ---回车后,输入ueFgj11+,k1l
#修改密码
alter user 'root'@'localhost' identified by '123456Qaz.';
#修改密码策略
vim /etc/my.cnf
添加以下内容
validate_password.policy=0
validate_password.length=4
#重启mysql
systemctl restart mysqld
#创建用户和数据库并授权
create database zabbix charset utf8;
create user 'zabbix'@'localhost' identified with mysql_native_password by 'zabbix';
grant all on zabbix.* to 'zabbix'@'localhost';
5.4. 安装 Zabbix 相关软件包
#下载zabbix6.0源码包
cd /data
wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.28.tar.gz
tar -xf zabbix-6.0.28.tar.gz
#安装依赖包
yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel libcurl-devel fping gcc gcc-c++ make
#创建用户
useradd -s /sbin/nologin -M zabbix
#编译安装
cd /data/zabbix-6.0.28/
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
make && make install
ln -s /usr/local/zabbix/sbin/zabbix_* /usr/local/sbin/
#导入zabbix初始数据
mysql -uroot -p123456Qaz. zabbix < /data/zabbix-6.0.28/database/mysql/schema.sql
mysql -uroot -p123456Qaz. zabbix < /data/zabbix-6.0.28/database/mysql/images.sql
mysql -uroot -p123456Qaz. zabbix < /data/zabbix-6.0.28/database/mysql/data.sql
#修改配置文件指定数据库:
cp -rp /usr/local/zabbix/etc/zabbix_server.conf /usr/local/zabbix/etc/zabbix_server.conf.bak
vim /usr/local/zabbix/etc/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
#准备 systemctl 服务管理文件
cat > /usr/lib/systemd/system/zabbix-server.service << EOF
[Unit]
Description=Zabbix Server with MySQL DB
After=syslog.target network.target mysqld.service
[Service]
Type=simple
ExecStart=/usr/local/zabbix/sbin/zabbix_server -f
User=zabbix
[Install]
WantedBy=multi-user.target
EOF
#启动zabbix_server服务
systemctl start zabbix-server.service
#查询是否启动成功
netstat -ntlp | grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1669/zabbix_server
tcp6 0 0 :::10051 :::* LISTEN 1669/zabbix_server
5.5. 迁移zabbix的前端代码至/usr/share/nginx/html
#删除测试文件
rm -rf /usr/share/nginx/html/*
#把zabbix前端代码移到/usr/share/nginx/html/
mv /data/zabbix-6.0.28/ui/* /usr/share/nginx/html/
#修改前端代码所属组所属主
chown -R nginx. /usr/share/nginx/html/
#重启nginx
systemctl restart nginx
5.6. 打开浏览器访问sxy.zabbix.com
- 解决zabbix显示图像下边文字乱码情况:
cd /usr/share/nginx/html/assets/fonts/
备份默认语言
mv DejaVuSans.ttf DejaVuSans.ttf.bak
上传新的语言
进入windows C:\Windows\Fonts目录下下载自己想要的语言传到服务器上并改成系统默认语言的名字
mv SIMSUN.TTC DejaVuSans.ttf
6. 添加监控主机
#安装zabbix-agent
yum -y install zabbix6.0-agent.x86_64
#修改配置文件
vim /etc/zabbix_agentd.conf
server=192.168.10.10 #指定了Zabbix代理将要与之通信的Zabbix服务器的主机名或IP地址
ServerActive=192.168.10.10 #它用于主动模式下,即Zabbix代理会主动向Zabbix服务器发送数据
Hostname=10.20 #Hostname的设置则帮助Zabbix服务器识别来自哪个设备的监控数据
#启动服务
systemctl start zabbix-agent.service
7. 快速入门
7.1. 登录和配置用户
7.1.1. 登录
- 这是Zabbix的“欢迎”界面。输入用户名 Admin 以及密码 zabbix 以作为 Zabbix超级用户登录。将授予访问配置和管理菜单的权限
7.1.2. 防止暴力破解
- 为了防止暴力破解和词典攻击,如果发生连续五次尝试登录失败,Zabbix界面将暂停30秒。
- 在下次成功登录后,将会在界面上尝试登录失败的IP地址。
7.1.3. 创建用户
- 可以在管理 → 用户 下查看用户信息
- 点击 创建用户添加一个新用户
在创建的用户表单中,请确保将你的用户添加到现有的 用户组, 例如 ‘Zabbix administrators’.
- 权限选项卡有一个必填字段角色。该角色决定用户可以查看哪些前端元素,以及允许用户执行哪些操作。点击选择,然后从列表中选择一个角色。例如,选择Admin role以允许访问除管理之外的所有Zabbix前端部分。稍后,你可以修改权限或创建更多用户角色。选择角色后,权限将显示在同一选项卡中:
7.2. 新建主机
- Zabbix中的主机是一个你想要监控的网络实体(物理的,或者虚拟的)。Zabbix中,对于主机的定义非常灵活。它可以是一台物理服务器,一个网络交换机,一个虚拟机或者某些应用程序。
7.2.1. 添加主机
- Zabbix中,可以通过配置 → 主机或者监测 → 主机,查看已配置的主机信息。默认已有一个名为’Zabbix server’的预先定义好的主机。但我们需要学习如何添加另一个。
- 点击创建主机来新增一台主机。将会展示出一个主机配置表。
- 其他操作可以查询我的zabbix40的相关文档,里面有自定义监控项等操作,这里就不掩饰了,基本操作一样。