zabbix基础
zabbix监控入门
为什么做监控
企业中:
1.系统的监控:实际上是对系统不间断的实时监控
2.实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是
需要能实时看到当前系统的状态,是正常、异常、或者故障。
3.保证服务可靠性安全性:我们监控的目的就是要保证
系统、服务、业务正常运行
4.保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收
到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。(往往,第一时间知道业务宕机的都是用户)
监控软件
面试问题
面试官:你们公司监控是如何做的?
监控软件我们使用的是zabbix,我们监控在不同的维度
-
硬件层面 DELL R710 R720 R730
- 如果不使用Dell的idrac那就使用zabbix的ipmi接口监控硬件
1.CPU温度
2.风扇转速
3.磁盘是否损坏
4.CMOS电池电量
5.内存是否损坏
-
系统层面
-
内存
1.内存使用率
2.缓冲区
3.缓存区
4.堆
5.栈
-
CPU
1.CPU使用率
2.CPU的负载
3.CPU核心数线程
-
磁盘
1.磁盘使用率
2.磁盘大小
3.磁盘io
-
-
网络层面
- 网卡接口
- 网卡流量
- 交换机
- 路由器
-
应用层面
-
nginx
1.进程
2.端口
3.网站访问
-
MySQL
1.进程
2.端口
3.主从复制
4.SQL读写速率
5.是否可以登录
6.innodb
7.缓存
8.表空间
9.慢查询
-
Tomcat
-
JMX
1.老年代
2.新生代
3.永久代
-
垃圾回收
-
full-gc
-
进程
-
端口
-
网站是否可以访问
-
-
Redis
- 进程
- 端口
- 连接状态
- 主从复制 info
- 集群状态
- key,缓存
- 缓存穿透
- 缓存击穿
- 缓存雪崩
-
NFS、GFS(集群式的NFS)、Ceph、FastDFS
- 进程
- 挂载情况
- 数据同步
-
PHP
- 进程
- 端口
- 网站访问情况
- PHP info
-
业务层面
- 代码
- 接口
单机监控命令
CPU监控命令
# 负载 [root@zabbix6 ~]# w 21:22:15 up 4:33, 3 users, load average: 0.00, 0.01, 0.05 # CPU [root@zabbix6 ~]# top -n 1 # 美化的top [root@zabbix6 ~]# yum install -y htop [root@zabbix6 ~]# htop # glances [root@zabbix ~]# yum install -y glances [root@zabbix ~]# glances # uptime [root@zabbix ~]# uptime 21:25:57 up 4:33, 1 user, load average: 0.00, 0.01, 0.05 # lscpu [root@zabbix ~]# lscpu [root@zabbix ~]# cat /proc/cpuinfo
不管用什么命令监控,查看CPU,我们都必须了解,系统的用户态和内核态
-
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us:用户态 跟用户操作有关35%
sy:内核态 跟内核的处理65%
id:cpu空闲
当我们执行一个命令的时候,很快能出来结果,但是有多少人知道,这个很快,他都占用了哪些时间呢?
[root@zabbix ~]# time ls
anaconda-ks.cfg host_ip.sh
real 0m0.001s
user 0m0.001s
sys 0m0.000s
监控内存
# free
[root@zabbix ~]# free -g
[root@zabbix ~]# free -m
[root@zabbix ~]# free -h
[root@zabbix ~]# top
[root@zabbix ~]# glances
[root@zabbix ~]# htop
[root@zabbix ~]# lsmem
[root@zabbix ~]# cat /proc/meminfo
如何查看单个进程占用的内存?
# 进程占用内存的公式
pmem = VmRSS / MemTotal * 100
process mem = 虚拟内存 / 总内存 * 100
Python脚本获取进程使用内存情况
[root@zabbix ~]# vim men.py
#!/usr/bin/env python
# _*_ coding:UTF-8 _*_
# 收集程序所占用的物理内存大小,占所有物理内存的比例
# Python: 2.7.6
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))
[root@zabbix ~]# python men.py zabbix_server
进程名称:zabbix_server
物理内存为:132304
百分比为:14.23%
监控磁盘命令
# df
[root@zabbix ~]# df -i
[root@zabbix ~]# df -h
[root@zabbix ~]# df -ih
# iotop查看进程对磁盘的使用情况,熊吞吐量情况
[root@zabbix ~]# iotop
# 查看磁盘io的吞吐量
-d:指定多久出一次结果 单位是秒
-m:指定出几次结果
[root@zabbix ~]# iostat -dm 1 10
[root@zabbix ~]# yum install -y dstat
[root@zabbix ~]# dstat -cdngy
[root@zabbix ~]# glances
[root@zabbix ~]# lsblk
# 磁盘开机自动挂载
[root@zabbix ~]# vim /etc/fstab
# 创建一块新磁盘
[root@zabbix ~]# dd < /dev/zero > /disk1 bs=1024K count=5
# 格式化
[root@zabbix ~]# mkfs.ext4 -i 5120 /disk
# 挂载
[root@zabbix ~]# mount -t ext4 -o loop /disk1 /opt/cipan1/
# 查看
[root@zabbix ~]# df -h
/dev/loop0 3.9M 53K 3.5M 2% /opt/cipan1
# 查看UUID
[root@zabbix ~]# blkid /dev/loop0
/dev/loop0: UUID="0df73f10-d16e-4b24-8cf4-bc2fc51662eb" TYPE="ext4"
# 添加UUID
[root@zabbix-server ~]# vim /etc/fstab
UUID=b2503fb9-fc5e-47fc-b86a-d171a5fbf689 /opt/cipan1 ext4 defaults
0 0
网络监控命令
# glances
# iftop
# nethogs
[root@zabbix ~]# yum install -y nethogs
[root@zabbix ~]# nethogs
# ifconfig
[root@zabbix ~]# watch ifconfig
# 路由
[root@zabbix ~]# route -n
TCP11种状态监控命令
# netstat
# 查看当前服务器的所有应用TCP状态
[root@zabbix ~]# netstat -an
[root@zabbix ~]# netstat -an|awk '/^tcp/ {print $NF}'|sort|uniq -c
[root@zabbix ~]# netstat -an|awk '/^tcp/ {++state[$NF]} END {for(key in state) > print key," \t" ,state[key]}'
生产场景需求
如何每1分钟监控当前系统的内存使用状态,如果可用低于100MB则发送邮件。同时打印当前还剩余多少内存
1.如何获取内存的状态信息 free -m
2.如何获取内存的可用状态 free -m|awk '/Mem/{print $NF}'
[root@web02 ~]# vim free.sh
#!/bin/bash
while true;do
free_av=$(free -m|awk '/^Mem/{print $NF}')
Hostname=$(hostname)_$(hostname -I|awk '{print $2}')
Date=$(date +%F)
if [ $free_av -lt 100 ];then
echo "$Date: ${Hostname},内存低于100MB,还有${free_av}MB内存可用"
fi
sleep 2
done
[root@web02 ~]# sh free.sh
2018-10-12: web02_,内存低于100MB,还有20MB内存可用
2018-10-12: web02_,内存低于100MB,还有6MB内存可用
2018-10-12: web02_,内存低于100MB,还有5MB内存可用
系统的oom
# 关闭swap
[root@zabbix ~]# swapoff -a
随着时间的推移,用户不断增多,服务消耗的内存越来越多,当系统内存不足的时候,可能会导致系统产生oom(outof memory)
1.当系统内存不足时就会大量使用swap(虚拟内存)
2.当系统大量使用swap的时候,系统会特别卡
注意:有时可能内存还有剩余300M或者500M,但是swap依然被使用
[root@web02 ~]# dd < /dev/zero > /dev/null bs=2000M
[root@web02 ~]# tail -f /var/log/messages
使用脚本监控nginx
前面的课程中,我们学习了使用脚本+定时任务的方法自动备份并将检查结果,发到指定邮箱,那么这里,我也可以使用脚本+定时任务的方法,进行监控,并使用邮件报警
#!/bin/bash
nginx_process=`ps -ef|grep -c [n]ginx`
if [ $nginx_process -lt 2 ];then
echo "目前nginx进程数是:$nginx_process"|mail -s "完犊子nginx挂了" 2794552827@qq.com
fi
快速监控一台主机
# 查看服务端的版本
[root@zabbix ~]# zabbix_server -V
zabbix_server (Zabbix) 5.0.26
# 安装对于版本的agent客户端
[root@web01 ~]# yum install -y zabbix-agent-5.0.26
[root@web01 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.26-1.el7.x86_64.rpm
# 修改配置文件
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.61
ServerActive=172.16.1.61
Hostname=web01
# 启动服务
[root@web01 ~]# systemctl start zabbix-agent.service
# 检查端口
[root@web01 ~]# netstat -lntup|grep 10050
添加基础模板
绿了即可