zabbix监控入门
zabbix监控入门
为什么做监控
企业中
1.系统的监控:实际上是对系统不间断的实时监控
2.实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。
3.保证服务可靠性安全性:我们监控的目的就是要保证系统、服务、业务正常运行
4.保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。(往往,第一时间知道业务宕机的都是用户)
监控软件
- 
CACTI网路监控 

- 
Nagios 

- zabbix分布式监控系统


- 
open-falcon 

- 
普罗米修斯 


面试问题
面试官: 你们公司监控是如何做的
监控软件我们使用的是zabbix,我们监控在不同的维度
- 
硬件层面 Dell R710 R720 R730 如果不使用dell的drac那就使用zabbix的IPMI接口监控硬件 - CPU温度
- 风扇转速
- 磁盘是否损坏
- CMOS电池电量
- 内存是否损坏
 云主机,不需要说硬件层,一般云主机都自带,硬件监控 
- 
系统方面 内存 - 内存使用率
- 缓冲区
- 缓存区
- 堆
- 栈
 内存 - CPU使用率
- cpu的负载
- CPU的核心数线程
 磁盘 - 磁盘使用率
- 磁盘大小
- 磁盘IO
 网路层面 - 网卡接口
- 网卡流量
- 交换机
- 路由器
 应用层面 - nginx
- 进程
- 端口
- 网站访问
 
- mysql
- 进程
- 端口
- 主从复制
- SQL读写速率
- 是否可以登录
- InnoDB
- 缓存
- 表空间
- 慢查询
 
- tomcat
- JMX
- 老年代
- 新生代
- 永久代
 
- 垃圾回收
- full-gc
- 进程
- 端口
- 连接状态
- 主从复制
- 集群状态
- key,缓存
- 缓存穿透
- 缓存击穿
- 缓存雪崩
 
 
- JMX
- NFS、GFS (集群式的NFS)、Ceph、FatDFS
- 进程
- 挂载情况
- 数据同步
 
- PHP
- 进程
- 端口(socket)
- 网站访问情况
- php info
- ...
 
 
- 
业务层面 - 代码
- 接口
 
单机监控命令
CPU监控命令
# 负载
[root@db01 ~]# w
 15:31:31 up 22:11,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      30Jun22 54days  0.01s  0.01s -bash
root     pts/1    10.0.0.1         12:23    3.00s  0.33s  0.00s w
# CPU
[root@db01 ~]# top -n 1
# 美化的top
[root@db01 ~]# yum -y install -y htop
[root@db01 ~]# htop
# glances
[root@db01 ~]# yum -y install -y glances
[root@db01 ~]# glances
# uptime
[root@db01 ~]# uptime
 15:42:53 up 22:23,  2 users,  load average: 0.00, 0.01, 0.05
# lscpu
[root@db01 ~]# lscpu
[root@db01 ~]# 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@db01 ~]# time ls
anaconda-ks.cfg                          mha4mysql-node-0.56-0.el6.noarch.rpm
host_ip.sh                               mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
mha4mysql-manager-0.56-0.el6.noarch.rpm  mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz.1
real	0m0.002s
user	0m0.001s
sys	0m0.000s
监控内存
# free
[root@db01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           972M        347M        137M         10M        487M        424M
Swap:          1.0G        3.5M        1.0G
[root@db01 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:            972         347         137          10         487         424
Swap:          1023           3        1020
[root@db01 ~]# free -g
              total        used        free      shared  buff/cache   available
Mem:              0           0           0           0           0           0
Swap:             0           0           0
# top
# glances
# htop
# lsmem
[root@db01 ~]# lsmem
RANGE                                 SIZE  STATE REMOVABLE BLOCK
0x0000000000000000-0x000000003fffffff   1G online        no   0-7
Memory block size:       128M
Total online memory:       1G
Total offline memory:      0B
[root@db01 ~]# cat /proc/meminfo 
MemTotal:         995892 kB
MemFree:          140696 kB
MemAvailable:     434364 kB
Buffers:               0 kB
Cached:           392644 kB
如何查看单个进程占用内存
# 进程占用内存公式
pmem = VmRSS / MemTotal * 100
process mem = 虚拟内存 / 总内存 * 100
Python脚本获取进程使用内存情况
[root@zabbix-server ~]# cat mem.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-server ~]# python mem.py  zabbix_agentd
进程名称:zabbix_agentd
物理内存为:12332
百分比为:1.24%
监控磁盘命令
# 1.df
[root@db01 ~]# df -i
Filesystem               Inodes IUsed   IFree IUse% Mounted on
/dev/mapper/centos-root 9703424 37865 9665559    1% /
devtmpfs                 121456   389  121067    1% /dev
tmpfs                    124486     1  124485    1% /dev/shm
tmpfs                    124486   759  123727    1% /run
tmpfs                    124486    16  124470    1% /sys/fs/cgroup
/dev/sda1                256000   326  255674    1% /boot
tmpfs                    124486     1  124485    1% /run/user/0
[root@db01 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   19G  4.9G   14G  27% /
devtmpfs                 475M     0  475M   0% /dev
tmpfs                    487M     0  487M   0% /dev/shm
tmpfs                    487M   14M  473M   3% /run
tmpfs                    487M     0  487M   0% /sys/fs/cgroup
/dev/sda1                497M  126M  372M  26% /boot
tmpfs                     98M     0   98M   0% /run/user/0
[root@db01 ~]# df -hi
Filesystem              Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root   9.3M   37K  9.3M    1% /
devtmpfs                  119K   389  119K    1% /dev
tmpfs                     122K     1  122K    1% /dev/shm
tmpfs                     122K   759  121K    1% /run
tmpfs                     122K    16  122K    1% /sys/fs/cgroup
/dev/sda1                 250K   326  250K    1% /boot
tmpfs                     122K     1  122K    1% /run/user/0
# 2.iotop查看进程对磁盘的使用情况,IO吞吐量情况
[root@db01 ~]# iotop 
# 3.查看磁盘的IO吞吐量
-d:指定多久出一次结果 单位是秒
-m:指定出几次结构
[root@db01 ~]# iostat  -dm 1 10
# 4.dstat
[root@db01 ~]# yum install -y dstat
[root@db01 ~]# dstat -cdngy
# 5.glances
# 6.lsdlk
[root@db01 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 19.5G  0 part 
  ├─centos-root 253:0    0 18.5G  0 lvm  /
  └─centos-swap 253:1    0    1G  0 lvm  [SWAP]
sr0              11:0    1  4.3G  0 rom  
## 磁盘开机自动挂载
[root@zabbix-server ~]# vim /etc/fstab
## 创建一块新磁盘
[root@db01 ~]# dd < /dev/zero > /disk1 bs=1024 count=5
## 格式化
[root@db01 ~]# mkfs.ext4 -i 5120 /disk1 
## 挂载
[root@db01 ~]# mount -t ext4 -o loop  /disk1  /opt/cipan1/
## 查看
[root@db01 ~]# df -h
/dev/loop0               3.9M   53K  3.5M   2% /opt/cipan1
## 查看一块磁盘的UUID
[root@db01 ~]# blkid /dev/sda1 
/dev/sda1: UUID="104ef6e7-41cf-46d8-82a0-8b00dcd1828d" TYPE="xfs" 
[root@db01 ~]# blkid /dev/loop0
/dev/loop0: UUID="8afd7d24-7cdf-4b63-9c55-fc3f592c7ba3" TYPE="ext4" 
网络监控命令
# 1.glance
[root@db01 ~]# yum -y install glances
[root@db01 ~]# glances
# 2.iftop
[root@db01 ~]# iftop

# 3.nethogs
[root@db01 ~]# yum -y install nethogs
[root@db01 ~]# nethogs

# 4.ifconf
# 5.路由
[root@db01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.16.1.0      0.0.0.0         255.255.255.0   U     101    0        0 eth1
TCP11中状态监控命令
# netstat
# 查看当前服务器上的所有应用TCP状态
[root@db01 ~]# netstat -an
[root@db01 ~]# netstat -an|awk '/^tcp/ {print $NF}'|sort|uniq -c
     15 ESTABLISHED
      7 LISTEN
[root@db01 ~]# netstat -an|awk '/^tcp/ {++state[$NF]} END {for(key in state) print key," \t" ,state[key]}'
LISTEN  	 7
ESTABLISHED  	 15
生成场景需求
如何每1分钟监控当前系统的内存使用状态,如果可用低于100MB则发送邮件。同时打印当前还剩余多少内存
1.如何获取内存的状态信息 free -m
2.如何获取内存的可用状态 free -m|awk '/Mem/{print $NF}'
3.如何进行数字的比对,高于100MB不处理,低于100MB,发送邮件。
4.如何每分钟执行。
[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@db01 ~]# sh free.sh
2018-10-12: web02_,内存低于100MB,还有20MB内存可用
2018-10-12: web02_,内存低于100MB,还有6MB内存可用
2018-10-12: web02_,内存低于100MB,还有5MB内存可用
系统的oom
# 关闭swap
[root@db01 ~]# swapoff -a
随着时间的推移,用户不断增多,服务消耗的内存越来越多,当系统内存不足的时候,可能会导致系统产生oom(out of memory)
1.当系统内存不足时就会大量使用swap(虚拟内存)
2.当系统大量使用swap的时候,系统会特别卡
注意:有时可能内存还有剩余300M或者500M,但是swap依然被使用
[root@web02 ~]# dd < /dev/zero > /dev/null bs=2000M
[root@web02 ~]# tail -f /var/log/messages
Out of memory: Kill process 29957 (dd) score 366 or sacrifice child
Killed process 29957 (dd) total-vm:2532680kB, anon-rss:1416508kB, filers:0kB
Aug 23 20:18:27 localhost kernel: Out of memory: Kill process 22208 (dd) score 599 or sacrifice child
Aug 23 20:18:27 localhost kernel: Killed process 22208 (dd) total-vm:722512kB, anon-rss:614508kB, file-rss:0kB, shmem-rss:0kB
使用脚本监控nginx
前面的课程中,我们学习了使用脚本+定时任务的方法自动备份并将检查结果,发到指定邮箱,那么这里,我也可以使用脚本+定时任务的方法,进行监控,并使用邮件报警
#!/bin/bash
nginx_process=`ps -ef|grep -c [n]ginx`
if [ $nginx_process -lt 2 ];then
    echo "目前nginx进程数是:$nginx_process"|mail -s "完犊子nginx挂了" 133411023@qq.com
fi
快速监控一台主机
# 查看服务端的版本
[root@zabbix yum.repos.d]# zabbix_server -V
zabbix_server (Zabbix) 5.0.26
# 安装对应版本的agent客户端
# 1.在其他机器上,安装zabbix的yum源
[root@db01 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# 2.安装客户端
[root@db01 ~]# 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
# 3.修改配置文件
[root@db01 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.71
ServerActive=172.16.1.71
Hostname=db01
# 4.启动服务
[root@db01 yum.repos.d]# systemctl start zabbix-agent
# 5.检查端口
[root@db01 yum.repos.d]# netstat -lntup |grep 10050
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      31649/zabbix_agentd 
tcp6       0      0 :::10050                :::*                    LISTEN      31649/zabbix_agentd 

添加基础模板



 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号