Zabbix介绍和架构
为什么需要监控
运维行业有句话:"无监控、不运维",监控俗称"第三只眼"。没了监控,什么基础运维,业务运维都是"瞎子"。所以说监控是运维这个职业的根本。尤其是在现在有人说运维是背锅侠,那么,有了监控,有了充足的数据,一切以数据说话,运维还需要背锅吗,所以作为一个运维工程师,如何构建一套监控系统是你的第一件工作。
监控功能
- 在需要的时刻,提前预警即将出问题,避免故障发生
- 实时监控系统和业务,当出问题之后,通过发出告警,提醒相关人员,快速可以找到问题的根源,从而及时处理问题
- 可以实现网站,应用或者服务器的故障自愈, 保证高可用性
- 以图形或易观察的方式呈现当前以及过往的状态,便于分析和预测系统发展趋势
需要监控什么
监控一切需要监控的资源,包括:服务器,网络设备,业务应用,云服务等
分类 | 实例内容 |
---|---|
硬件监控 | 通过远程控制卡: DeLL的iDRAC,HP的ILO和IBM的IMM等 使用IPMI来完成物理设备的监控工作。通常必须要监控包括温度、硬盘故障等 路由器,交换机(端口,光衰,日志),打印机等 |
系统监控 | cpu, 内存, 硬盘使用率, 硬盘IO, 系统负载,进程数 |
服务监控 | nginx,apache, php-fpm,mysql.memcache,redis ,tomcat,JVM,TCP连接数 |
性能监控 | 网站性能,服务器性能,数据库性能,存储性能 |
日志监控 | 系统会产生系统日志,应用程序会有应用的访问日志、错误日志,服务有运行日志等, 可以使用ELK来进行日志监控 |
安全监控 | 用户登录数,passwd文件变化,本地所有文件改动 Nginx+Lua编写一个WAF通过kibana可以图形化的展示不同的攻击类型的统计。 |
网络监控 | IP,端口,URL,DB,ping包,IDC带宽网络流量,网络流出速率,网络入流量, 网络出流是.网络使用率,SMTP.POP3 |
常见的监控工具
开源监控软件:cacti、nagios、zabbix、smokeping、open-falcon等
Zabbix使用场景及系统概述
Zabbix介绍
Zabbix是一个企业级解决方案,支持实时监控数千台服务器,虚拟机和网络设备,采集百万级监控指标,适用于任何IT基础架构、服务、应用程序和资源的解决方案
Zabbix功能
Zabbix 是一个高度成熟完善的网络监控解决方案,包含了多种功能
官方链接:
数据收集:
- 历史数据, 即记录每个监控项采集到的每个监控值
- 趋势数据, 主要保留某个监控项一个小时内历史数据的最大值、最小值和平均值以及该监控项一个小时内所采集到的数据个数
- 可用性和性能检查;
- 支持 SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控; agent
- 自定义检查;
- 按照自定义的时间间隔采集需要的数据;
- 通过 Server/Proxy 和 Agents 来执行数据采集。
灵活的阈值定义
- 您可以参考后端数据库定义非常灵活的告警阈值,即触发器
高度可配置化的告警
- 可以根据递增计划、接收者、媒介类型自定义发送告警通知;
- 使用宏变量可以使告警通知变得更加高效有用;
- 自动操作包含远程执行命令。
实时图形
- 使用内置图形功能可以将监控项实时绘制成图形。
Web 监控功能
- Zabbix可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 网站的功能和响应时间。
丰富的可视化选项
- 可以组合多个监控项到单个视图中,创建自定义图表;
- 网络拓扑图;
- 以仪表盘样式展示自定义聚合图形和幻灯片演示;报表;
- 监控资源的更高层次展示视图(业务视图)。
历史数据存储
- 存储在数据库中的数据;
- 历史配置;内置数据管理机制
配置简单
- 将被监控设备添加为主机;
- 主机一旦添加到数据库中,就会采集数据用于监控;
- 将模板用于监控设备。
使用模板
- 模板中分组检查;
- 模板可以关联模板,继承已关联模板的属性。
网络发现客户端
- 自动发现网络设备;
- Zabbix Agent 发现设备后自动注册;
- 自动发现文件系统、网络接口
快捷的 Web 界面
- 基于 PHP 的 Web 前端;
- 可以从任何地方访问;
- 您可以定制自己的操作方式;
- 您可以通过审计日志来查看你的操作
Zabbix API
- Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途
权限管理系统
- 安全的用户身份验证;
- 指定的用户只能查看指定的权限范围内的视图
功能强大且易于扩展的 Zabbix Agent
- 部署于被监控对象上;
- 支持 Linux 和 Windows ;
二进制守护进程
- 为了更好的性能和更少的内存占用,采用 C 语言编写;
- 便于移植。
适应更复杂的环境
- 使用 Zabbix Proxy 代理,可以轻松实现分布式远程监控
Zabbix架构
Zabbix 由如下主要的功能组件组成
-
SERVER
- Zabbix server 是 Zabbix 软件的核心组件
- Zabbix Agent 向其报告可用性、系统完整性信息和统计信息。
- Zabbix server也是存储所有配置信息、统计信息和操作信息的核心存储库。
- Zabbix server也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将发出通知给管理员。
-
基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web前端和数据库。
tips:
Zabbix 的所有配置信息都存储在 Server和Web前端进行交互的数据库中。例如,当你通过Web前端(或者API)新增一个监控项时,它会被添加到数据库的监控项表里。然后,Zabbix server 以每分钟一次的频率查询监控项表中的有效项,接着将它存储在 Zabbix server 中的缓存里。这就是为什么 Zabbix前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。
-
数据库
- 所有配置信息以及 Zabbix 采集到的数据都被持久存储在数据库中
- 可以支持MySQL,PostgreSQL,Oracle 等多种数据库
-
WEB 界面
- WEB 界面是 Zabbix server 的一部分,用于实现展示和配置的界面通常(但不一定)和 Zabbix server 运行在同一台物理机器上基于 Apache(Nginx)+PHP 实现,早期只支持LAMP架构,从Zabbix5.0开始支持LNMP
-
AGENT
- Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给Zabbix server。从Zabbix5.0开始支技Zabbix Agent2
-
PROXY
- Zabbix Proxy 可以代替 Zabbix Server 采集性能和可用性数据
- Zabbix Proxy 在 Zabbix 的部署是可选部分
- Zabbix Proxy 的部署可以很好的分担单个Zabbix server的负载
-
Java 网关
- Zabbix 要监控 tomcat 服务器和其它JAVA程序,需要使用 Java gateway 做为代理,才能从JAVA程序中获取数据
Zabbix术语
-
被监控: 即 Zabbix 监控的主机或设备
-
监控项item:即 Zabbix 监控的相关指标,比如:CPU利用率,内存使用率,TCP连接数等
- 监控内容
-
应用集Application:为方便管理众多的监控项,可将多个同类型的监控项进行归类,纳入一个集合中,即应用集
-
触发器Trigger:是一个表达式,或者说一个条件,如磁盘利用率超过80%等,当触发条件后,会导致一个触发事件,这个事件会执行一个或多个动作
-
告警:当触发器和动作二者结合起来时,就构成了的告警机制,比如cpu的使用率达到80%以上,触发了报警动作,系统将自动发送一封邮件到指定的邮箱。然后运维可以及时的去处理此错误 host---> items---> triggers --> action
-
Web 监测:对WEB服务进行检测,比如:访问指定网站是否可正常访问
-
模板 Template: 可以方便地应用于多个主机的一组实体的集合。而这些实体包括:
- items(监控项)
- applications(应用集)
- triggers(触发器)
- graphs(图形)
- screens (聚合图形,自Zabbix 2.0起)
使用模板是减少工作量并简化Zabbix配置的好方法。
模板分为内置模板和自定义模板
部署安装zabbix
去往官网选择安装版本
Zabbix Server 安装方法介绍
Zabbix Server 提供了三种安装方法
- 二进制包安装: 官方提供了二进制包安装的方法,可以支持CentOS和Debian/Ubuntu的安装
- 源码编译安装: 部署繁琐,生产环境定制安装可以使用
- 基于容器安装: 测试环境使用,参考链接如下
编译安装
解决依赖关系
yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel libevent-devel java-1.8.0-openjdk-devel -y
建立管理用户
groupadd zabbix
useradd -g zabbix zabbix
解压包
bash
cd /opt
#切换目录
tar xf zabbix-6.4.17.tar.gz
#解压
编译安装
css
./configure --help
#可以查看帮助
./configure --prefix=/apps/zabbix_server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
make
make install
添加客户端(用于自我监控)
bash
./configure --prefix=/apps/zabbix --enable-agent
在别的机器上 客户机需要安装的 客户端
安装数据库
sql
yum install mariadb-server.x86_64 -y
systemctl start mariadb
mysql_secure_installation 安全加固脚本
#输入当前密码
#修改root密码
#移除匿名用户
#移除测试数据库
#不让 root 远程登录
#刷新
mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
quit;
导入zabbix数据库文件
bash
cd /opt/zabbix-6.4.17/database/mysql/
mysql -uzabbix -pzabbix zabbix < schema.sql
mysql -uzabbix -pzabbix zabbix < images.sql
mysql -uzabbix -pzabbix zabbix < data.sql
###必须最后 导入 data.sql
部署 Nginx + PHP 环境并测试
安装 nginx
yum install -y nginx
修改 nginx 配置
ini
vim /etc/nginx/conf.d/zbx.conf
server {
listen 80;
server_name zbx.hzw.com;
root /var/www/zbx;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/zbx$fastcgi_script_name;
include fastcgi_params;
}
}
如果请求的路径是以`.php`结尾的,则会通过FastCGI进程执行对应的PHP文件。
根目录为`/var/www/zbx`,默认的索引文件为`index.php`。
安装php,修改配置文件
bash
#更换为阿里源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#安装依赖环境
yum install -y epel-release
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install php74 php74-cli php74-fpm php74-mysqlnd php74-gd php74-mbstring php74-xml php74-pear php74-bcmath php74-json php74-redis
zabbix6.4
版本要求PHP
版本最低为7.4,否则无法正常安装zabbix web
前端程序
如果出现Minimum required PHP version is 7.4.0
的字样,说明PHP版本过低
最好在安装完PHP后使用yum -y update
来更新一下yum仓库,该操作会顺带更新PHP版本至最新
修改 php 配置
ini
vim /etc/php-fpm.d/www.conf
user = nginx
#第8行
group = nginx
#第10行
ini
vim /etc/php.ini
max_execution_time = 300 # 368行
max_input_time = 600 # 378行
post_max_size = 80M # 656行
date.timezone = Asia/Shanghai # 877行
1. 最大执行时间(max_execution_time):您可以在第 368 行找到这个选项。默认情况下,它被设置为 300 秒(5 分钟)。您可以根据您的需求将其修改为更长的时间。
2. 最大输入时间(max_input_time):这个选项位于第 378 行。它控制从服务器接收到客户端请求开始计时的时间。默认值为 600 秒(10 分钟)。如果您需要更长的时间来处理请求,请相应地修改这个值。
3. 最大 POST 数据大小(post_max_size):在第 656 行,您可以找到这个选项。默认情况下,它被设置为 80M。您可以根据您的需要将其调整为更大或更小的值。
4. 日期时区(date.timezone):在第 877 行,您可以找到这个选项。默认情况下,它被设置为 "Asia/Shanghai",表示使用上海的时区。如果您希望使用其他时区,请将其更改为相应的时区。
测试
php
#创建目录和测试文件
mkdir -p /var/www/zbx
vim /var/www/zbx/index.php
<?php
phpinfo();
?>
#启动服务
systemctl enable --now nginx php-fpm
测试访问(hosts解析) 修改 C:\Windows\System32\drivers\etc\hosts
浏览器访问:zbx.hzw.com/index.php
部署数据库
要求 MySQL 5.7 或 Mariadb 10.5 及以上版本
安装Mariadb
ini
#配置 Mariadb yum源
cat > /etc/yum.repos.d/mariadb.repo << EOF
[mariadb]
name = MariaDB
baseurl = http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/
gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled=1
EOF
yum install -y mariadb-server mariadb
systemctl enable --now mariadb
初始化数据库并以root用户登录
shell
mysql_secure_installation
分别输入 回车 -> n -> Y (设置root密码,如abc123) -> 后面一路 Y
#"mysql_secure_installation" 是一个用于设置和加固 MySQL 安装的脚本工具
#提示您输入数据库的 root 用户密码。如果尚未设置密码,则按回车键留空。
#询问您是否需要更改 root 密码。根据需求选择 Y 或 N。
#提示您删除匿名用户。如果不希望数据库中存在匿名用户,选择 Y。
# 提示您禁用 root 远程登录。如果不希望 root 用户能够通过远程连接访问数据库,选择 Y。
#提示您删除测试数据库。如果不需要默认的测试数据库,选择 Y。
#提示您重新加载权限表以使更改生效。选择 Y 来重新加载权限表。
mysql -u root -pabc123
创建数据库并指定字符集
sql
create database zabbix character set utf8 collate utf8_bin;
创建 zabbix 数据库用户并授权
csharp
grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';
grant all on zabbix.* to 'zabbix'@'%' identified by 'zabbix';
flush privileges;
准备zabbix源码包并解压
bash
#上传源码包 zabbix-6.4.17.tar.gz 到 /opt 目录
cd /opt
tar xf zabbix-6.4.17.tar.gz
ls /opt/zabbix-6.4.17/database/mysql
#data.sql:这个文件包含了 Zabbix 数据库的实际数据,包括监控项、触发器、历史数据等。
# double.sql:这个文件包含了用于移除重复数据的 SQL 查询语句。
#history_pk_prepare.sql:这个文件包含了用于优化历史数据表的 SQL 查询语句。
#images.sql:这个文件包含了用于存储和管理图像数据的 SQL 查询语句。
#Makefile.am 和 Makefile.in:这两个文件是用于构建 Zabbix 数据库的 Makefile 配置文件。
#schema.sql:这个文件包含了 Zabbix 数据库的表结构、索引、键等定义。这是创建和初始化整个数据库的主要文件。
按照顺序向数据库导入 zabbix 数据
bash
cd /opt/zabbix-6.4.17/database/mysql
mysql -uroot -pabc123 zabbix < schema.sql
mysql -uroot -pabc123 zabbix < images.sql
mysql -uroot -pabc123 zabbix < data.sql
编译安装zabbix Server 服务端
安装依赖包,创建 zabbix 用户
bash
#依赖包
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
编译安装
css
#编译安装
cd /opt/zabbix-6.4.17/
./configure \
--sysconfdir=/etc/zabbix/ \
--enable-server \
--with-mysql \
--with-net-snmp \
--with-libxml2 \
--with-ssh2 \
--with-openipmi \
--with-zlib \
--with-libpthread \
--with-libevent \
--with-openssl \
--with-ldap \
--with-libcurl \
--with-libpcre
bash
make install
#安装zabbix
修改配置文件
ini
#修改 zabbix server 配置文件,修改数据库的密码
vim /etc/zabbix/zabbix_server.conf
......
LogFile=/var/log/zabbix_server.log
# 38行,指定 zabbix 日志路径
DBPassword=zabbix # 123行,指定 zabbix 数据库的密码
添加到系统服务中
ini
#准备 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/sbin/zabbix_server -f
User=zabbix
[Install]
WantedBy=multi-user.target
EOF
bash
#修改日志文件的属主属组为zabbix ,如果出现文件不存在的提示,可以手动创建该日志文件
chown zabbix:zabbix /var/log/zabbix_server.log
systemctl daemon-reload
systemctl start zabbix-server
perl
ss -lntp | grep 10051
效果测试(部署 Web 前端,进行访问)
bash
cp -r /opt/zabbix-6.4.17/ui/* /var/www/zbx
chown -R nginx.nginx /var/www/zbx
浏览器访问:zbx.hzw.com/
scss
[Default language]
选择 Chinese(zh_CN),点击下一步
[必要条件检测]
确认无误后,点击下一步
csharp
[Settings]
主机名称设为 Zabbix-监控
默认时区选择 Asia/Shanghai
点击下一步
默认的登录账号和密码为:Admin/zabbix
添加 zabbix 客户端主机
安装zabbix-agent2
bash
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/7/x86_64/zabbix-release-6.4-1.el7.noarch.rpm
yum install zabbix-agent2 zabbix-agent2-plugin-*
yum install -y zabbix-agent2
systemctl restart zabbix-agent2
systemctl enable zabbix-agent2
服务端和客户端设置时间同步
yum install -y ntpdate
ntpdate -u ntp.aliyun.com
服务端
和客户端
都设置域名映射
bash
cat > /etc/hosts << EOF
192.168.137.101 zbx-server
192.168.137.102 zbx-agent01
EOF
修改agent2的配置文件,启动服务
ini
vim /etc/zabbix/zabbix_agent2.conf
......
Server=192.168.137.101
#80行,指定 zabbix 服务端的 IP 地址
ServerActive=192.168.137.101
#133行,指定 zabbix 服务端的 IP 地址
Hostname=zbx-agent01
#144行,指定当前 zabbix 客户端的主机名
#启动 zabbix-agent2
systemctl start zabbix-agent2
systemctl enable zabbix-agent2
perl
ss -natp | grep zabbix
在服务端
验证 zabbix-agent2 的连通性
ini
yum install -y zabbix-get
#`zabbix_get` 是 Zabbix 命令行工具,用于从 Zabbix Agent 获取监控数据。
#常用的键值
agent.ping
#服务端与客户端是否连通,返回1表示可达,返回非表示不可达
system.hostname
#系统主机名
agent.hostname
#客户端主机名
net.if.in[if,<mode>]
#网络接口进入的流量统计,if表示网卡名称,带<>的参数表示可以省略
net.if.out[if,<mode>]
#网络接口流出的流量统计
proc.num[<name>,<user>,<state>,<cmdline>,<zone>]
#进程数
net.tcp.port[<ip>,port]
#检查是否能建立tcp连接到指定端口,返回0表示不能连接,返回1表示可以连接
go
zabbix_get -s '192.168.137.102' -p 10050 -k 'agent.ping'
`agent.ping` 是 Zabbix Agent 提供的内置键之一,用于检查 Agent 的可用性。
当 Zabbix Server 发送 `agent.ping` 请求时
如果 Agent 正常工作,它将返回 "1" 表示活动
如果 Agent 不可用,则返回 "0" 表示不活动。
在 Web 页面中添加 agent 主机
csharp
【主机名称】输入 zbx-agent011372.102
【模板】搜索 Linux ,选择 Linux by Zabbix agent
【群组】选择 Linux servers
【Interfaces】点击添加 客户端
【IP地址】输入 192.168.137.102
解决 zabbix-server Web页面中文乱码问题
解决方法
bash
#zabbix-server安装
yum install -y wqy-microhei-fonts
\cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /var/www/zbx/assets/fonts/DejaVuSans.ttf
刷新浏览器页面