高级运维学习(十四)Zabbix监控(一)
一 监控概述
1 监控的目的
(1)报告系统运行状况
- 每一部分必须同时监控
- 内容包括吞吐量、反应时间、使用率等
(2)提前发现问题
- 进行服务器性能调整前,知道调整什么
- 找出系统的瓶颈在什么地方
2 监控的资源类别
(1)公开数据
- Web、FTP、SSH、数据库等应用服务
- TCP或UDP端口
(2)私有数据
- CPU、内存、磁盘、网卡流量等使用信息
- 用户、进程等运行信息
3 系统监控命令
# uptime可以查看系统已经运行了多久。最后的3个数字分别是CPU最近1分钟、5分钟、15分钟的平均负载。平均负载的值,不应该大于总核心数。
[root@myhost ~]# uptime 09:28:25 up 53 days, 27 min, 0 users, load average: 0.09, 0.08, 0.03[root@myhost ~]# free -h # 主要用于查看内存
[root@myhost ~]# swapon -s # 查看swap空间
[root@myhost ~]# df -h # 查看硬盘使用情况
[root@myhost ~]# ping -c2 www.baidu.com # 发2个包,测试网络
4 自动化监控系统
| Cacti | 基于SNMP协议的监控软件,强大的绘图能力 |
| Nagios | 基于Agent监控,强大的状态检查与报警机制 插件极多,自己写监控脚本嵌入到Nagios非常方便 |
| Zabbix | 基于多种监控机制,支持分布式监控 |
二 Zabbix 基础
1 基本概念
(1)Zabbix简介
- Zabbix是一个高度集成的监控解决方案
- 可以实现企业级的开源分布式监控
- Zabbix通过C/S模式采集监控数据
- Zabbix通过B/S模式实现Web管理
(2)监控拓扑

监控服务器(需要使用Web页面操作,因此需要先部署LNMP)
- 监控服务器可以通过SNMP(简单网络管理协议,用于网络设备的数据采集)或Agent(可安装软件的系统上)采集数据
- 数据可以写入MySQL、Oracle等数据库中
- 服务器使用LNMP实现web前端的管理
被监控主机
- 被监控主机需要安装Agent
- 常见的网络设备一般支持SNMP
(3)安装zabbix 6.0
- 安装说明:Download and install Zabbix
- 中文手册:Zabbix 文档
| 主机名 | 地址 |
|---|---|
| zabbixserver | 192.168.88.5/24 |
| web1 | 192.168.88.100/24 |
| web2 | 192.168.88.200/24 |
# 准备3台主机。按上表配置主机名和IP地址
[root@myhost ~]# vm clone zabbixserver web1 web2
- 安装zabbix
# 1. 拷贝zabbix软件包到pubserver
[root@zabbixserver ~]# scp /linux-soft/s2/zzg/zabbix_soft/*.rpm 192.168.88.240:/var/ftp/rpms
# 2. 更新yum仓库配置
[root@pubserver ~]# createrepo -v /var/ftp/rpms/
# 3. 在pubserver上创建ansible工作环境
[root@pubserver ~]# mkdir -p zabbix/files
[root@pubserver ~]# cd zabbix/
[root@pubserver zabbix]# vim ansible.cfg
[defaults]
inventory = inventory
host_key_checking = false[root@pubserver zabbix]# vim inventory
[zabbix]
zabbixserver ansible_host=192.168.88.5[webservers]
web1 ansible_host=192.168.88.100
web2 ansible_host=192.168.88.200[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=a# 4. 为各台主机配置yum
[root@pubserver zabbix]# vim files/local88.repo
[BaseOS]
name = BaseOS
baseurl = ftp://192.168.88.240/dvd/BaseOS
enabled = 1
gpgcheck = 0[AppStream]
name = AppStream
baseurl = ftp://192.168.88.240/dvd/AppStream
enabled = 1
gpgcheck = 0[rpms]
name = rpms
baseurl = ftp://192.168.88.240/rpms
enabled = 1
gpgcheck = 0[root@pubserver zabbix]# vim 01-upload-repo.yml
---
- name: config repos.dhosts: alltasks:- name: delete repos.dfile:path: /etc/yum.repos.dstate: absent- name: create repos.dfile:path: /etc/yum.repos.dstate: directorymode: '0755'- name: upload local88copy:src: files/local88.repodest: /etc/yum.repos.d/
[root@pubserver zabbix]# ansible-playbook 01-upload-repo.yml # 5. 在zabbixserver上安装相应软件包
[root@pubserver zabbix]# vim 02-inst-zabbix.yml
---
- name: install zabbixhosts: zabbixtasks:- name: install zabbix # 安装软件包yum:name:- zabbix-server-mysql- zabbix-web-mysql- zabbix-nginx-conf- zabbix-sql-scripts- zabbix-selinux-policy- zabbix-agent- mysql-server- langpacks-zh_CNstate: present
[root@pubserver zabbix]# ansible-playbook 02-inst-zabbix.yml# 6. 启动mysqld服务
[root@pubserver zabbix]# vim 03-start-mysqld.yml
---
- name: config mysqldhosts: zabbixtasks:- name: start mysqld # 启动mysqld服务service:name: mysqldstate: startedenabled: yes
[root@pubserver zabbix]# ansible-playbook 03-start-mysqld.yml # 7. 在zabbix上创建连接数据库的用户
[root@zabbixserver ~]# mysql
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
# 在binlog日志开启的情况下,打开函数生成器
mysql> set global log_bin_trust_function_creators = 1;
mysql> create user zabbix@localhost identified by 'zabbix';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;# 8. 验证数据库配置,如果登陆不到数据库表示上一步配置不正确
[root@zabbixserver ~]# mysql -uzabbix -pzabbix -hlocalhost zabbix# 9. 在数据库中创建表并导入数据
[root@zabbixserver ~]# cp /usr/share/zabbix-sql-scripts/mysql/server.sql.gz .
[root@zabbixserver ~]# gzip -d server.sql.gz
[root@zabbixserver ~]# mysql -uzabbix -pzabbix zabbix < server.sql# 10. 配置zabbix_server
[root@zabbixserver ~]# vim +129 /etc/zabbix/zabbix_server.conf
DBPassword=zabbix# 11. 配置zabbix_agent
[root@zabbixserver ~]# vim /etc/zabbix/zabbix_agentd.conf
182 Hostname=zabbixserver# 12. 配置nginx展示zabbix
[root@zabbixserver ~]# vim /etc/nginx/conf.d/zabbix.conf
# 打开第2、3行的注释,结果如下所示:
server {listen 8080;server_name example.com;
...以下省略...# 13. 启动相关服务
[root@pubserver zabbix]# vim 04-start-zabbix.yml
---
- name: config zabbixhosts: zabbixtasks:- name: start service # 循环启动多个服务service:name: "{{item}}"state: startedenabled: yesloop:- zabbix-server- zabbix-agent- nginx- php-fpm
[root@pubserver zabbix]# ansible-playbook 04-start-zabbix.yml
(4) 初始化
访问zabbixserver的8080端口,进行初始化:






注意:这里的用户名Admin,A是大写的!密码是小写的zabbix


此时zabbix已经开始在监控自己了,查看默认监控配置


2 Zabbix监控服务
(1)配置被监控主机
在web1上安装agent
# 1. 安装agent
[root@pubserver zabbix]# vim 05-inst-agent.yml
---
- name: install agenthosts: webserverstasks:- name: install agent # 安装agentyum:name: zabbix-agentstate: present
[root@pubserver zabbix]# ansible-playbook 05-inst-agent.yml # 2. 修改web1配置文件
[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.conf
117 Server=127.0.0.1,192.168.88.5
182 Hostname=web1# 3. 起动服务
[root@pubserver zabbix]# vim 06-start-agent.yml
---
- name: config agenthosts: web1tasks:- name: start agent # 启动服务service:name: zabbix-agentstate: startedenabled: yes
[root@pubserver zabbix]# ansible-playbook 06-start-agent.yml
(2)添加监控主机
在web页面中添加对web1的监控
- 主机:安装了agent,被监控的主机
- 主机组:根据需求,将多台主机加入到一个主机组中,方便管理。系统默认已经创建了一些主机组。
- 模板:是监控项的集合。将模板应用到主机,主机就可以直接拥有模板中的所有监控项。系统中默认已经创建了一些模板。




常用监控指标
- Space utilization:以百分比显示的磁盘利用率
- Used space:已用磁盘空间
- Available memory:可用内存
- CPU idle time:CPU空闲时间。不宜过低。
- Load average (1m avg)、Load average (5m avg)、Load average (15m avg):CPU1分钟、5分钟、15分钟的平均负载。这个值不应长期大于核心数。
- Interface eth0: Bits received:网卡接收到的数据量
- Interface eth0: Bits sent:网卡发送的数据量
- Number of processes:系统运行的进程数
- Number of logged in users:已登陆的用户数
3 自定义监控项
实现监控web1用户数量的监控项
- 在被控端创建key。被控端被监控的内容叫作key,可以理解为它就是一个变量名,具体的名字自己决定。
- 在web页面中创建监控项。监控项对应key值。

(1)自定义 Key 值
- 在被控端创建key
UserParameter=自定义key值,命令
# 命令的执行结果,是key的value
- 创建自定义配置文件。文件名自定义。
[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/usercnt.conf
UserParameter=usercnt,sed -n '$=' /etc/passwd
[root@web1 ~]# systemctl restart zabbix-agent.service
- 验证自定义监控项
# 1. 安装zabbix-get
[root@zabbixserver ~]# yum install -y zabbix-get
[root@web1 ~]# yum install -y zabbix-get# 2. 获取监控项的值
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k usercnt
46
[root@zabbixserver ~]# zabbix_get -s 192.168.88.100 -k usercnt
46
(2)创建监控模板


(3)创建监控项


(4)应用模板到主机


(5)查看结果

相关文章:
高级运维学习(十四)Zabbix监控(一)
一 监控概述 1 监控的目的 (1)报告系统运行状况 每一部分必须同时监控内容包括吞吐量、反应时间、使用率等 (2)提前发现问题 进行服务器性能调整前,知道调整什么找出系统的瓶颈在什么地方 2 监控的资源类别 …...
vite + electron引入itk报错
代码 import { readImageArrayBuffer } from itk-wasm console.log(readImageArrayBuffer)通过itk-wasm官网,创建新的项目vitevue(vue2或者vue3),都没问题。加入electeon后包此错。通过排查,意外找到原因,…...
大厂面试题-MySQL为什么使用B+Tree作为索引结构
从几个方面来回答: 首先,常规的数据库存储引擎,一般都是采用B树或者B树来实现索引的存储。 (如图)因为B树是一种多路平衡树,用这种存储结构来存储大量数据,它的整个高度会相比二叉树来说,会矮很多。 而对…...
Tomcat的Engine容器
https://tomcat.apache.org/tomcat-10.1-doc/config/engine.html Engine元素代表与一个特定的Catalina Service关联的、整体的请求处理系统。它从一个或多个Connector接收并处理请求、返回完整的响应给Connector,以便最终传输给客户端。 在Service元素内部…...
vscode绿色行数设置
"workbench.colorCustomizations": {"editorLineNumber.foreground": "#00ff00"},...
闪站侠洗衣洗鞋管理系统app小程序开发;
闪站侠洗护软件系统为您提供全面的洗衣洗鞋解决方案,系统多门店,多网点。为您开通公中号小程序,并与顺丰、天猫、抖音、美团点评等第三方平台紧密连接。 我们解决洗衣工厂/门店的五大问题: 一、效率 从门店收衣到工厂出库…...
【操作系统】测试一
文章目录 单选题判断题简答题 单选题 ( )不是基本的操作系统。 A. 批处理操作系统 B. 分时操作系统 C. 实时操作系统 D. 网络操作系统 【 正确答案: D】 操作系统提供给程序员的接口是( )。 A. 进程 B. 系统调用 C. 库函数 D. B和…...
如何用sklearn对随机森林调参
文章目录 一、概述二、实操1、导入相关包2、导入乳腺癌数据集,建立模型3、调参 三、总结 Link:https://zhuanlan.zhihu.com/p/126288078 Author:陈罐头 一、概述 sklearn是目前python中十分流行的用来实现机器学习的第三方包,其中…...
Java中单例模式
什么是单例模式? 1. 构造方法私有化 2. 静态属性指向实例 3. public static的 getInstance方法,返回第二步的静态属性 饿汉式是立即加载的方式,无论是否会用到这个对象,都会加载。 package charactor;public class GiantDragon…...
第1章 现代通信网概述
文章目录 1.1 通信网的定义1.2 通信网的分类1.3 通信网的结构1.4 通信网的质量要求 1.1 通信网的定义 1.1.1 通信系统 1.1.2 通信网的定义 通信网是由一定数量的节点 (包括终端节点、交换节点) 和连接这些节点的传输链路有机地组织在一起,以实现两个或多个规…...
99%的时间里使用的14个git命令
学习14个Git命令,因为你将会在99%的时间里使用它们 【赠送】IT技术视频教程,白拿不谢!思科、华为、红帽、数据库、云计算等等 https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502 必须了解的命令整理 1&…...
适用于 iOS 的 10 个最佳数据恢复工具分享
在当今的数字时代,我们的移动设备占据了我们生活的很大一部分。从令人难忘的照片和视频到重要的文档和消息,我们的 iOS 设备存储了大量我们无法承受丢失的数据。然而,事故时有发生,无论是由于软件故障、无意删除,甚至是…...
泛微E-Mobile 6.0命令执行漏洞
声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一、漏洞原理 泛微E-Mobile 6.0存在命令执行漏洞的问题,在…...
React 共享组件状态及其实践
React 是一个强大的JavaScript库,它提供了一种简单的方式来构建用户界面。然而,随着应用规模的增长,状态管理成为一个复杂的问题。本篇文章将深入探讨如何在React组件之间共享状态。 状态提升 首先,我们来谈谈"状态提升&qu…...
linux目录说明
我一般会在/opt目录下创建 一个software目录,用来存放我们从官网下载的软件格式是.tar.gz文件,或者通过 wget地址下载的.tar.gz文件 执行解压缩命令,这里以nginx举例 tar -zxvf nginx-1.16.0.tar.gz -C /usr/local/src/ 把源码解压到/usr/loc…...
成集云 | 英克对接零售O2O+线上商城 | 解决方案
方案介绍 零售O2O线上商城是一种新型的商业模式,它通过线上和线下的融合,提供更加便捷的购物体验。其中,O2O指的是线上与线下的结合,通过互联网平台与实体店面的结合,实现线上线下的互动和协同。线上商城则是指通过互…...
java传base64返回给数据报404踩坑
一、问题复现 1.可能因为base64字符太长,导致后端处理时出错,表现为前端请求报400错误; 这一步debug进去发现base64数据是正常传值的 所以排除掉不是后端问题,但是看了下前端请求,猜测可能是转换base64时间太长数据过大导致的404 2.前端传…...
【Delphi】Android 开发HTTP请求出错解决方案
目录 一、故障现象 二、原因及解决方案 一、故障现象 在android内建的WebBrowser浏览器中通过http访问一个网站(注意不是https),出现如下错误提示: 在使用ntfy的时候,访问http定义的服务器地址(注意不是…...
Kafka中遇到的错误:
1、原因:kafka是一个去中心化结果的,所以在启动Kafka的时候,每一个节点上都需要启动。 启动的命令:kafka-server-start.sh -daemon /usr/local/soft/kafka_2.11-1.0.0/config/server.properties...
线程安全(JAVA)
线程安全对于我们编写多线程代码是非常重要的。 什么是线程安全? 在我们平时的代码中有些代码在单线程程序中可以正常执行,但如果同样的代码放在在多个线程中执行就会引发BUG,而这种现象我们一般称为 “线程安全问题” 或 “线程不安全”。…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
高保真组件库:开关
一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...
【QT控件】显示类控件
目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏:QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...
