zabbix入门
一、监控知识概述
1.1 为什么要使用监控
- 1)对系统不间断实时监控;
- 2)实时反馈系统当前状态;
- 3)保证服务可靠性安全性;
- 4)保证业务持续稳定运行;
1.2 如何进行监控,比如监控磁盘使用率
- 1)如何查看磁盘使用率 df -h;
- 2)监控磁盘的那些指标 block、 inode;
- 3)如何获取具体的信息 df -h|awk '///{print(NF-1)}';
- 4)获取的数值到达多少报警 80%;
1.3 流行的监控工具
- 1)Zabbix
- 2)Lepus(天兔)数据库监控系统
- 3)Open-Falcon 小米
- 4)Prometheus(普罗米修斯, Docker、 K8s)
1.4 如果到一家新公司,如何入手监控
- 1)硬件监控 路由器、交换机、防火墙
- 2)系统监控 CPU、内存、磁盘、网络、进程、 TCP
- 3)服务监控 nginx、 php、 tomcat、 redis、 memcache、 mysql
- 4)WEB 监控 请求时间、响应时间、加载时间
- 5)日志监控 ELk(收集、存储、分析、展示)
- 6)安全监控 Firewalld、 WAF(Nginx+lua)、安全宝、牛盾云、安全狗
- 7)网络监控 smokeping 多机房
- 8)业务监控 活动引入多少流量、产生多少注册量、带来多大价值
二、单机时代如何进行监控
2.1 CPU 监控
命令: w、 top、 htop、 glances
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st us 用户态: 跟用户的操作有关 35% sy 系统态: 跟内核的处理有关 60% id CPU 空闲:
2.2 内存监控
命令: free
$ free -h total used free shared buff/cache available Mem: 977M 105M 724M 6.6M 148M 729M Swap: 1.0G 0B 1.0G
内存的计算方式,使用如下python脚本:
#!/usr/bin/env python # _*_ coding:UTF-8 _*_ # 收集程序所占用的物理内存大小,占所有物理内存的比例 # OS: Centos 6.7 Python: 2.7.6 # __author__:Dahlhin import sys import os from subprocess import Popen,PIPE def get_pid(program): '获取目标程序的PID列表' p = Popen(['pidof',program],stdout=PIPE,stderr=PIPE) pids,stderrput = p.communicate() # pids = p.stdout.read() #这种方法也是可以的 # 这里也可以对stderrput来进行判断 if pids: return pids.split() else: raise ValueError def mem_calc(pids): '计算PIDs占用的内存大小' mem_total = 0 for pid in pids: os.chdir('/proc/%s' % pid) with open('status') as fd: for line in fd: if line.startswith('VmRSS'): mem = line.strip().split()[1] mem_total += int(mem) break return mem_total def mem_percent(mem): '计算程序内存占用物理内存的百分比' with open('/proc/meminfo') as fd: for line in fd: if line.startswith('MemTotal'): total = line.strip().split()[1] percent = (float(mem)/int(total)) * 100 return percent def main(): try: program = sys.argv[1] pids = get_pid(program) except IndexError as e: sys.exit('%s need a Program name ' % __file__) except ValueError as e: sys.exit('%s not a Process Name or not Start' % program ) mem_total = mem_calc(pids) percent = mem_percent(mem_total) return program,mem_total,percent if __name__ == '__main__': program,mem_total,mem_percent=main() print('进程名称:%s\n物理内存为:%s\n百分比为:%.2f%%'% (program,mem_total,mem_percent))
使用方法:
$ python2.7 test.py mysqld 进程名称:mysqld 物理内存为:86664 百分比为:1.06%
参考网址:https://www.cnblogs.com/dachenzi/p/6812317.html
2.3 磁盘监控
命令: df、 iotop
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.80 25.32 33.36 221034 291193 设备名 每秒传输次数 每秒读大小 每秒写大小 读的总大小 写的总大小
2.4 网络监控
命令: ifconfig、 route、 glances、 iftop、 nethogs、 netstat
单位换算 Mbps 100Mbps/8 MB 12MB iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。 TX:发送流量、 RX:接收流量、 TOTAL:总流量 #查看 TCP11 中状态 netstat -an|grep ESTABLISHED netstat -rn # 查看路由信息 netstat -lntup
三、zabbix监控快速安装
参考zabbix官方手册!
3.1配置zabbix仓库
由于下载的其中指向的是zabbix官网,可能会下载失败,所以需要手动更换为阿里云的zabbix源!
$ vim /etc/yum.repos.d/zabbix.repo [zabbix] name=Zabbix Official Repository - $basearch baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/ enabled=1 gpgcheck=0 [zabbix-non-supported] name=Zabbix Official Repository non-supported - $basearch baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/$basearch/ enabled=1 gpgcheck=0
3.2 安装zabbix所需软件包
$ yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent
3.3 安装并初始化数据库
$ yum install -y mariadb-server $ systemctl start mariadb && systemctl enable mariadb $ mysql MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> quit;
使用 MySQL 来导入 Zabbix server 的初始数据库 schema 和数据,
$ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
3.4 为zabbix server配置数据库
$ vim /etc/zabbix/zabbix_server.conf DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix $ systemctl start zabbix-server && systemctl enable zabbix-server $ ss -lnt | grep 10051 # 确认端口已经在监听
3.5 ZABBIX 前端配置
$ vim /etc/httpd/conf.d/zabbix.conf # 修改为当前的时区 php_value date.timezone Asia/Shanghai $ systemctl start httpd && systemctl enable httpd $ ss -lnt | grep 80
zabbix前端可以在浏览器中通过http://IP/zabbix/进行访问,默认的用户名/密码:Admin/zabbix
配置zabbix-web中文显示:
$ yum -y install wqy-microhei-fonts $ cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf # 修复中文乱码
四、快速监控主机
安装zabbix-agent,需注意:zabbix-server版本可以高于zabbix-agent版本,但是zabbix-agent版本不可以高于zabbix-server版本!建议版本选择一致!
zabbix-server主机执行zabbix_server -V
命令可以查看zabbix-server版本信息!
4.1 安装、配置zabbix-agent
$ rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.25-1.el7.x86_64.rpm $ vim /etc/zabbix/zabbix_agentd.conf Server=192.168.88.1 # 修改为zabbix-server地址 $ ss -lnt | grep 10050 # 确认端口正在监听的状态
4.2 zabbix-server测试获取zabbix-agent端数据
$ yum -y install zabbix-get.x86_64 $ zabbix_get -s 192.168.88.2 -p 10050 -k "system.uptime" 508 # -s:指定zabbix agent端的IP地址; # -p:指定zabbix agent端的监听端口; # -k:指定监控项; # 如果有输出结果,则表示zabbix server可以获取zabbix agent的数据,配置成功;
4.3 zabbix-web页面,添加主机
4.4 zabbix-agent端监控失败,排查思路
- 检查IP地址和端口;
- 检查firewalld和SELinux;
- 检查zabbix-agent端配置文件;
- 重新加载zabbix-agent配置文件;
- 查看zabbix-agent日志信息;
五、zabbix监控基础架构
zabbix-agent(收集数据)
——>zabbix-server(数据分析、报警)
——>数据库(数据存储)
——>zabbix-web(数据展示)
架构图:
六、zabbix架构拆分数据库
6.1 准备一台mysql数据库(192.168.88.2),安装数据库(保证数据库版本一致);
$ yum install mariadb-server -y $ systemctl start mariadb && systemctl enable mariadb
6.2 创建zabbix数据库,网络授权;
$ mysql MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> quit;
6.3 在旧的数据库上备份zabbix库,然后恢复到新的数据库;
$ mysqldump -uroot --databases zabbix --single-transaction > `date +%F%H`-zabbix-sql $ cat 2020-10-0816-zabbix-sql | mysql -h 192.168.88.2 -uzabbix -pzabbix zabbix # 通过远程的方式导入到192.168.88.2的zabbix数据库中
6.4 修改zabbix-server配置文件指向数据库的IP地址
$ vim /etc/zabbix/zabbix_server.conf DBHost=192.168.88.2 # 只修改数据库连接地址 $ systemctl restart zabbix-server
6.5 修改zabbix-web配置文件指向数据库的IP地址
$ vim /etc/zabbix/web/zabbix.conf.php $DB['SERVER'] = '192.168.88.2'; # 修改数据库地址 $ systemctl restart httpd
该方式不适合在生产环境使用,只适合在测试环境使用!因为会丢数据,主要的就是实现的思路!
七、自定义监控
7.1 自定义监控项
① 监控系统的登录状态,如果登录的xshell超过两个用户则触发报警
② 在zabbix-agent端自定义监控项,使用UserParameter
$ vim /etc/zabbix/zabbix_agentd.conf # 添加以下内容 UserParameter=login.number,uptime | awk '{print $4}'
③ 重启zabbix-agent
$ systemctl restart zabbix-agent
④ 检查zabbix-agent端上自定义监控项是否生效
$ zabbix_agentd -p # 获取zabbix-agent端所有的监控项内容 $ zabbix_agentd -p | grep login.number login.number [t|1]
⑤ zabbix-server测试是否可以获取到zabbix-agent端上的自定义监控项的值
$ yum -y install zabbix-get.x86_64 # 安装zabbix-get软件包 $ zabbix_get -s 192.168.88.2 -k login.number 1
⑥ web界面添加监控项
7.2 自定义触发器——>动作——>通知
① 自定义触发器
手动测试,触发故障,使zabbix面板报警!
② 启用动作
③ 创建报警媒介
④ 定义收件人信息
⑤ 验证邮箱收到的消息
7.3 值映射
创建一个监控22端口的监控项!
效果已经产生!
7.4 监控TCP11种状态
① zabbix-agent编写监控文件(传参的形式)
$ vim /etc/zabbix/zabbix_agentd.d/tcp_status.conf UserParameter=tcp_state[*],netstat -ant|grep -wc $1 $ systemctl restart zabbix-agent
② zabbix-server测试是否可以获取到值
$ zabbix_get -s 192.168.88.2 -k tcp_state[LISTEN] 6 $ zabbix_get -s 192.168.88.2 -k tcp_state[TIME_WAIT] 44
③ zabbix-web添加模板、创建监控项
11种状态,也可挨个添加,也可选择克隆!自行完成!
④ zabbix-agent使用该模板
7.5 自定义触发器多条件
监控系统的内存可用百分比,如果低于25%,并且使用swap超过5%,则触发报警!
① zabbix-agent 编写监控文件监控内存使用百分比
$ vim /etc/zabbix/zabbix_agentd.d/mem_ava.conf UserParameter=mem.ava,free -m | awk '/^Mem/{print $NF/$2*100}'
② 重启zabbix-agent,agent与server测试是否可以获取到值
$ systemctl restart zabbix-agent $ zabbix_agentd -p | grep mem.ava # agent测试取值 mem.ava [t|75.1279] $ zabbix_get -s 192.168.88.2 -k mem.ava # server测试取值 75.2303
③ zabbix-web添加监控项
④ 基于该监控项创建触发器
使用dd if=/dev/zero of=/dev/null bs=500M count=1024
压低内存,测试报警!
⑤ zabbix-agent编写监控文件监控swap分区使用百分比
$ vim /etc/zabbix/zabbix_agentd.d/mem_ava.conf # 末尾添加 UserParameter=swap.use,free -m | awk '/Swap/{print $3/$2*100}' $ systemctl restart zabbix-agent $ zabbix_agentd -p | grep swap.use # agent测试取值 0 [t|75.1279] $ zabbix_get -s 192.168.88.2 -k swap.use # server测试取值 0
⑥ zabbix-web添加监控项
⑦ 配置多条件触发器
使用dd if=/dev/zero of=/dev/null bs=1024M count=1024
压低内存,测试报警!
邮件内容,信息不是太明确,所以进行以下修改!
⑧ 常用触发器表达式
and # 并且 or # 或者 last() # 比对最新的值 avg() # 平均值 diff() # 比对上一次文件内容 nodata() # 收不到数据进行报警 (5m) # 表示最近5分钟得到值 (#5) # 表示最近5次得到的值
⑨ 配置故障消息
消息内容如下:
报警主机:{HOST.NAME1} 报警服务:{ITEM.NAME1} 报警Key1: {ITEM.KEY1}: {ITEM.VALUE1} 报警Key1: {ITEM.KEY2}: {ITEM.VALUE2} 严重级别:{TRIGGER.SEVERITY}
$ swapoff -a $ swapon -a # 释放swap分区空间
重新使用dd if=/dev/zero of=/dev/null bs=1024M count=1024
压低内存,测试报警!
邮件内容如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律