[root@zabbix ~]
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.000965925 s, 10.9 GB/s
一、监控基本概述
参考网站
zabbix中文官网
1.什么是监控?
1.监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环
2.'事前' 及时预警发现故障
3.'事后' 提供详细的数据用于追查定位问题
2.为什么要做监控?
1.系统的监控:实际上是对系统不间断的实时监控
2.'实时' 反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。
3.保证服务可靠性安全性:我们监控的目的就是要保证系统、服务、业务正常运行
4.保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。(往往,第一时间知道业务宕机的都是用户)
3.主要的监控工具
1.CACTI:'网络' 监控,Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具
2.NAGIOS:'系统' 监控,很久之前使用的,需要人为定义,没有图形,没有办法查询历史
3.ZABBIX:分布式监控
4.open-falcon:小米监控产品,开源的
5.premethous:普罗米修斯,监控'容器' ,docker,K8S
6.lepus:天兔,'数据库' 监控
4.怎么监控
1.查看内存使用 free -m
2.取出监控的值
3.对比某个限制的值
4.如果超过限制的值则告警
5.监控的内容
1.公有云:云监控,云平台自带的监控
2.硬件监控:CPU温度,主板温度,磁盘,网卡,风扇转速
3.系统监控:cpu,内存,网络,磁盘剩余
4.服务监控:
1)MySQL:主从复制是否有延迟(zabbix监控模板)
2)redis:主从复制是否有延迟
'监控思路' :zabbix没有固定模板,可以在主库中set 一个key为时间戳,然后从库会同步这个时间戳(动态),写脚本实时获取这两个时间戳,做对比。
3)NFS:磁盘挂载状况
4)tomcat:JVM监控,老年代、新生代、永久带、full-gc、垃圾回收
5)rsync的同步情况,MD5校验文件是否被篡改
5.web页面监控:请求时间,响应时间,加载时间,nginx状态码监控,pv,uv,ip
6.网络监控:网卡流量(出入流量),带宽,'监控宝'
7.业务监控:
1)URL监控 (curl)
2)api监控:针对业务的接口 (basic.action 登录接口)
3)nginx状态码 (curl)
4)tomcat日志监控 (elk)
8.日志监控:ELK,第三方'日志易'
9.安全监控:firewalld,WAF,牛盾云,安全狗
10.容器监控:premethous,'普罗米修斯'
二、脚本监控
1.监控命令
1)监控CPU
w top htop uptime glances ps
us: 用户态 跟用户的操作有关35%
sy: 内核态 跟内核的处理有关65%
id : CPU空闲
[root@web02 ~]
real 0m0.002s 真实执行时间
user 0m0.001s 用户执行时间
sys 0m0.001s 系统执行时间
2)监控内存
free glances top htop
3)监控磁盘
df glances iotop iostat dstat
[root@web02 ~]
4)网络监控
glances ifconfig iftop ip route
nethogs 该命令可以查看某个进程所使用的流量
5)TCP11种状态监控命令
netstat -ant
ss -ant
2.监控内存实例
1)需求
'每1分钟' 监控当前系统的内存使用状态,如果可用'低于100MB' 则发送邮件。同时'打印' 当前还剩余多少内存
1.如何获取内存的状态信息 free -m
2.如何获取内存的可用状态 free -m|awk '/Mem/{print $NF}'
3.如何进行数字的比对,高于100MB不处理,低于100MB,发送邮件。
4.如何每分钟执行。
2)监控脚本
[root@zabbix ~]
Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}' )
while true
do
Date=$(date +%F)
Mem_Free=$(free -m|awk '/^Mem/{print $NF}' )
if [ $Mem_Free -lt 100 ];then
echo "$Date : $Hostname_Ip 内存可用量不足100M,当前剩余: $Mem_Free " |mail -s '内存不足' xxx
else
echo "$Date : $Hostname_Ip 内存可用量充足,当前剩余: $Mem_Free " |mail -s '内存不足' xxx
fi
sleep 60
done
3)思考
随着时间的推移,用户不断增多,服务消耗的内存越来越多,当系统内存不足的时候,可能会导致系统产生'oom' (out of memory)
1.当系统内存不足时就会大量使用swap('虚拟内存' )
2.当系统大量使用swap的时候,'系统会特别卡'
4)新脚本
[root@zabbix ~]
Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}' )
while true
do
Date=$(date +%F)
Mem_Free=$(free -m|awk '/^Mem/{print $NF}' )
Swap_used=$(free -m | awk '/^Swap/ {print $3}' )
if [ $Mem_Free -lt 100 -a $Swap_used -gt 100 ];then
echo "$Date : $Hostname_Ip 内存可用量不足100M并且Swap空间占用超过100M,内存当前剩余: $Mem_Free ,Swap空间使用达到: $Swap_used " |mail -s '内存不足' xxx
fi
sleep 60
done
3.磁盘监控实例
[root@zabbix ~]
Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}' )
while true
do
Date=$(date +%F)
Disk_Used=$(df -h | awk '/\/$/ {print $5}' )
if [ ${Disk_Used%\%} -gt 90 ];then
echo "$Date : $Hostname_Ip 磁盘可用量不足10%,当时已使用: $Disk_Used "
fi
sleep 60
done
4.监控nginx进程
nginx_process=`ps -ef|grep -c [n]ginx`
if [ $nginx_process -lt 2 ];then
echo "目前nginx进程数是:$nginx_process " |mail -s "完犊子nginx挂了" ****@qq.com
fi
5.注意
zabbbix 1.0 ~ 5.0
zabbix 2.X
zabbix 3.X
zabbix 4.X
三、zabbix安装
1.zabbix架构
1.Zabbix agents '部署' 在被监控目标上,用于主动监控本地资源和应用程序,并将'收集' 的数据发送给 Zabbix server
2.Zabbix server 是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的'核心存储库' 。
3.数据库:所有配置信息以及 Zabbix 采集到的数据都被'存储' 在数据库中
4.zabbix web 为了从任何地方和'任何平台' 轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
5.Zabbix proxy 可以代替 Zabbix server'采集' 性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的'分担' 单个Zabbix server的负载。做'集群' 的时候使用该模块
2.配置官方源安装
zabbix安装要求
1)配置官方源
[root@zabbix ~]
[root@zabbix ~]
total 12
-rw-r--r--. 1 root root 2523 Jul 6 22:19 CentOS-Base.repo
-rw-r--r--. 1 root root 664 Jul 6 22:19 epel.repo
-rw-r--r-- 1 root root 633 Oct 7 2019 zabbix.repo
2)开启仓库(选做)
[root@zabbix ~]
[root@zabbix ~]
Loaded plugins: fastestmirror
3)安装zabbix
[root@zabbix ~]
3.第三方源安装
1)配置第三方源
[root@zabbix ~]
2)安装zabbix
[root@zabbix ~]
4.安装数据库
[root@zabbix ~]
5.配置数据库
[root@zabbix ~]
[root@zabbix ~]
[root@zabbix ~]
MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
MariaDB [(none)]> grant all on *.* to zabbix@'172.16.1.%' identified by 'zabbix' ;
6.配置zabbix连接数据库
[root@zabbix ~]
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
7.导入初始数据库
[root@zabbix ~]
[root@zabbix ~]
MariaDB [(none)]> use zabbix
MariaDB [zabbix]> show tables;
... ...
144 rows in set (0.01 sec)
8.启动zabbix服务
[root@zabbix ~]
[root@zabbix ~]
9.启动httpd
[root@zabbix ~]
php_value date.timezone Asia/Shanghai
[root@zabbix ~]
[root@zabbix ~]
10.web页面访问zabbix
http://10.0.0.71/zabbix/index.php
Admin
zabbix
11.启动agent
[root@zabbix ~]
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.1.71
ServerActive=172.16.1.71
Hostname=zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@zabbix ~]
四、监控一台远端主机
1.安装zabbix客户端
[root@web01 ~]
2.配置客户端
[root@web01 ~]
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.1.71
ServerActive=172.16.1.71
Hostname=web01
Include=/etc/zabbix/zabbix_agentd.d/*.conf
3.启动客户端
[root@web01 ~]
[root@web01 ~]
[root@web01 ~]
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 39529/zabbix_agentd
4.server端配置监控
1.添加'主机组'
2.创建主机
3.选择'主机模板'
4.添加主机
五、数据库拆分
1.环境准备
主机
IP
角色
zabbix
172.16.1.71,10.0.0.71
zabbix-server
db01
172.16.1.51
mysql
2.搭建新的数据库
[root@db01 ~]
3.授权数据库
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
MariaDB [(none)]> grant all on zabbix.* to zabbix@'172.16.1.%' identified by 'zabbix' ;
Query OK, 0 rows affected (0.00 sec)
4.导出源数据库数据
[root@zabbix ~]
5.将数据导入新库 (scp rsync -h)
[root@zabbix ~]
MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
[root@zabbix ~]
Enter password:
6.修改zabbix连接数据库配置
[root@zabbix ~]
DBHost=172.16.1.51
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
7.修改zabbix-web端数据库配置
[root@zabbix ~]
<?php
// Zabbix GUI configuration file.
global $DB ;
$DB ['TYPE' ] = 'MYSQL' ;
$DB ['SERVER' ] = '172.16.1.51' ;
$DB ['PORT' ] = '0' ;
$DB ['DATABASE' ] = 'zabbix' ;
$DB ['USER' ] = 'zabbix' ;
$DB ['PASSWORD' ] = 'zabbix' ;
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB ['SCHEMA' ] = '' ;
$ZBX_SERVER = 'localhost' ;
$ZBX_SERVER_PORT = '10051' ;
$ZBX_SERVER_NAME = 'Linux脱产9期' ;
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
8.重启访问
[root@zabbix ~]
9.停止旧库
[root@zabbix ~]
10.浏览器访问
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 用 C# 插值字符串处理器写一个 sscanf
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!