zabbix===》面试技巧、单机监控命令、zabbix数据库拆分
作者:互联网
一、面试技巧
1.面试常问
#1.面试官:你们公司监控是如何做的?
你:用zabbix
面试官:....
#2.面试技巧
监控软件我们使用的是zabbix,我们监控不同维度
- 硬件层面:先说物理服务器型号:DELL R710 R720 R730...
(IDRAC自带一个远程管理卡,安装上一个软件包之后就可以监控)
(如果不适用Dell的idrac那就使用zabbix的IPMI接口监控硬件)
监控内容:1.CPU温度 2.风扇转速 3.磁盘是否损坏 4.CMOS电池电量 5.内存是否损坏等等
- 系统层面:
监控内容:1.CPU:使用率、负载 2.内存:使用率 3.磁盘:使用率、IO 4.进程 5.TCP状态 6.系统负载
- 网络层面:
监控内容:1.网络设备:路由器、交换机 2.网卡入口流量 3.网卡出口流量 4.带宽的峰值
- 应用层面:当然了最基本的就是各个服务的进程端口号,一些特殊程序我们还需要额外监控 :
监控内容:1.MySQL:主从复制是否有延迟(zabbix监控模板) 2.redis:主从复制是否有延迟(监控思路:zabbix没有固定模板,可以在主库中set一个key为时间戳,然后从库会同步这个时间戳,写脚本时获取这两个时间戳,做对比) 3.NFS:磁盘挂载状况 4.tomcat:JVM监控,老年代、新生代、永久带、full-gc 、垃圾回收 5.rsync的同步情况。MD5校验文件是否被篡改
- 业务层面:
监控内容:1.URL的监控 2.ARI的监控 3.NGINX的状态码 4.tomcat的exception 5.请求时间 6.响应时间 7.加载时间 8.渲染时间
二、单机监控命令
1.CPU 监控命令
#1.w
[root@web02 ~]# w
12:30:41 up 1 day, 8:10, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 10.0.0.1 五09 1.00s 0.00s 0.00s w
#2.top
[root@web02 ~]# top
top - 12:31:10 up 1 day, 8:11, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2030148 total, 1457796 free, 190464 used, 381888 buff/cache
KiB Swap: 1048572 total, 1048572 free, 0 used. 1652944 avail Mem
#3.htop
[root@web02 ~]# htop
CPU[| 0.7%] Tasks: 27, 38 thr; 1 running
#4.glances
[root@web02 ~]# glances
web02 (CentOS Linux 7.5.1804 64bit / Linux 3.10.0-862.el7.x86_64) Uptime: 1 day, 8:12:51
CPU [|| 2.9%] CPU 2.9% nice: 0.0% MEM 13.1% active: 310M SWAP 0.0% LOAD 1-core
MEM [|||||||||| 13.1%] user: 1.9% irq: 0.0% total: 1.94G inactive: 145M total: 1024M 1 min: 0.14
SWAP [ 0.0%] system: 1.0% iowait: 0.0% used: 260M buffers: 2.03M used: 0 5 min: 0.09
idle: 97.1% steal: 0.0% free: 1.68G cached: 319M free: 1024M 15 min: 0.07
#5.uptime
[root@web02 ~]# uptime
12:33:18 up 1 day, 8:13, 1 user, load average: 0.10, 0.08, 0.07
2.内存监控命令
#1.free
[root@web02 ~]# free -m
total used free shared buff/cache available
Mem: 1982 186 1413 9 383 1612
Swap: 1023 0 1023
[root@web02 ~]# free -h
total used free shared buff/cache available
Mem: 1.9G 186M 1.4G 9.4M 383M 1.6G
Swap: 1.0G 0B 1.0G
#2.top
#3.glances
#4.htop
后面这几个命令在看CPU的时候已经演示了。
如何查看单个进程占用内存?
#进程占用内存公式
pmem = VmRSS / MemTotal * 100
process mem = 虚拟内存 / 总内存 * 100
python脚本
[root@web02 ~]# 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))
3.磁盘监控命令
#1.df
[root@web02 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 18G 1.4G 17G 8% /
devtmpfs 981M 0 981M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.5M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 1014M 124M 891M 13% /boot
tmpfs 199M 0 199M 0% /run/user/0
[root@web02 ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda3 9436672 36259 9400413 1% /
devtmpfs 251012 393 250619 1% /dev
tmpfs 253768 1 253767 1% /dev/shm
tmpfs 253768 700 253068 1% /run
tmpfs 253768 16 253752 1% /sys/fs/cgroup
/dev/sda1 524288 326 523962 1% /boot
tmpfs 253768 1 253767 1% /run/user/0
#2.iotop
[root@web02 ~]# iotop
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
#3.iostat
#以兆为单位,每秒执行一次,执行10次
[root@web02 ~]# iostat -dm 1 10
#4.dstat
[root@web02 ~]# dstat -cdngy
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0|1729B 3483B| 0 0 | 0 0 | 47 65
0 0 100 0 0 0| 0 0 | 66B 830B| 0 0 | 92 114
0 0 100 0 0 0| 0 0 | 66B 350B| 0 0 | 92 106
0 0 100 0 0 0| 0 16k| 66B 350B| 0 0 | 102 114
#5.glances
[root@web02 ~]# glances
DISK I/O R/s W/s 0.3 0.3 292M 5.96M 537 root 0 S 1:53.61 0 0 /usr/bin/vmtoolsd
sda1 0 0 0.0 0.0 0 0 271 root -20 S 0:00.00 0 0 bioset
sda2 0 0 0.0 0.1 191M 1.21M 545 root 0 S 0:00.00 0 0 /usr/sbin/gssproxy -D
sda3 0 0 0.0 0.0 0 0 227 root -20 S 0:00.00 0 0 ata_sff
sr0 0 0 0.0 0.2 124M 4.41M 2356 nginx 0 S 0:00.30 0 0 nginx: worker process
sr1 0 0 0.0 0.1 87.5M 2.11M 1108 root 0 S 0:00.44 0 0 /usr/libexec/postfix/master -w
4.网络监控命令
#1.glances
[root@web02 ~]# glances
NETWORK Rx/s Tx/s TASKS 100 (138 thr), 2 run, 98 slp, 0 oth sorted automatically by cpu_percent, flat view
eth0 168b 1Kb
lo 0b 0b
#2.iftop
[root@web02 ~]# iftop
12.5Kb 25.0Kb 37.5Kb 50.0Kb 62.5Kb
└──────────────────────────────────────────────┴───────────────────────────────────────────────┴──────────────────────────────────────────────┴───────────────────────────────────────────────┴───────────────────────────────────────────────
web02 => 10.0.0.1 1.31Kb 2.82Kb 2.82Kb
<= 208b 347b 347b
web02 => gateway 0b 268b 268b
<= 0b 268b 268b
#按P键可以看到与什么服务在交互
#Mb 与 MB的区别
#百兆带宽:100Mb
#实际:100Mbps / 8 = 12MB
#3.nethogs (该命令可以查看某个进程所使用的流量)
[root@web02 ~]# nethogs
NetHogs version 0.8.5
PID USER PROGRAM DEV SENT RECEIVED
2477 root sshd: root@pts/1 eth0 0.131 0.064 KB/sec
? root unknown TCP 0.000 0.000 KB/sec
TOTAL 0.131 0.064 KB/sec
#4.ifconfig
[root@web02 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::20c:29ff:fea0:7ef0 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a0:7e:f0 txqueuelen 1000 (Ethernet)
RX packets 55217 bytes 64623101 (61.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 30950 bytes 4603140 (4.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 27 bytes 2072 (2.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 27 bytes 2072 (2.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#5.route
[root@web02 ~]# 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
5.TCP11种状态监控命令
#1.netstat
[root@driver-zeng ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:52022 0.0.0.0:* LISTEN
tcp 0 0 172.24.156.150:59936 100.100.30.25:80 ESTABLISHED
tcp 0 0 172.24.156.150:52022 139.226.172.217:54116 ESTABLISHED
tcp6 0 0 :::873 :::* LISTEN
udp 0 0 172.17.0.1:123 0.0.0.0:*
udp 0 0 172.18.0.1:123 0.0.0.0:*
udp 0 0 172.24.156.150:123 0.0.0.0:*
udp 0 0 127.0.0.1:123 0.0.0.0:*
udp 0 0 0.0.0.0:123 0.0.0.0:*
udp6 0 0 :::123 :::*
[root@driver-zeng ~]# netstat -an|awk '/^tcp/ {print $NF}'|sort|uniq -c
4 ESTABLISHED
6 LISTEN
[root@driver-zeng ~]# netstat -an|awk '/^tcp/ {++state[$NF]} END {for(key in state) print key," \t" ,state[key]}'
LISTEN 6
ESTABLISHED 4
#2.ss
[root@driver-zeng ~]# ss -n|awk '{print $2}'|sort|uniq -c
42 ESTAB
1 State
6.生产场景需求
如何每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@web02 ~]# sh free.sh
2018-10-12: web02_,内存低于100MB,还有20MB内存可用
2018-10-12: web02_,内存低于100MB,还有6MB内存可用
2018-10-12: web02_,内存低于100MB,还有5MB内存可用
[root@web02 ~]# dd < /dev/zero > /dev/null bs=2000M
7.系统的oom(out of memory)
随着时间的推移,用户不断增多,服务消耗的内存越来越多,当系统内存不足的时候,可能会导致系统产生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
8.使用脚本监控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
三、zabbix数据库拆分
目前我们zabbix的架构,单台zabbix服务:LAMP+zabbix
我们需要实现zabbix架构,将数据库拆分成单独的一台,LAP+zabbix+MySQL
1.环境准备
2.导出原MySQL中的zabbix数据
#导出zabbix数据
[root@zabbix ~]# mysqldump -uroot -p -B zabbix > /tmp/zabbix.sql
#拷贝数据到db01
[root@zabbix ~]# scp /tmp/zabbix.sql 10.0.0.51:/tmp
3.准备新的数据库环境
#安装数据库
[root@db01 ~]# yum install -y mariadb-server
#启动数据库
[root@web01 ~]# systemctl start mariadb
#导入数据
[root@web01 ~]# mysql -uroot -p < /tmp/zabbix.sql
4.关闭原来的数据库测试
#关闭数据库
[root@web02 ~]# systemctl stop mariadb
#打开浏览器查看
凉凉,为啥呢?因为我们需要修改php代码连接数据库,就和之前我们修改wordpres连库代码一样
5.修改连接数据库代码
#修改代码
[root@web02 ~]# vim /etc/zabbix/web/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = '10.0.0.51';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = '123';
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = '曾老湿';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
#修改配置文件
[root@web02 ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=10.0.0.51
#重启zabbix-server
[root@web02 ~]# systemctl restart zabbix-server
#打开浏览器测试
新一轮的报错又出现了,刚才是连接不上localhost的,现在连接不上10.0.0.8 证明什么,证明我们新装的数据库不允许远程连接,我们可以使用命令行测试一下。
#是拒绝的,所以我们创建个用户即可
[root@web02 ~]# mysql -uzabbix -p123 -h 10.0.0.7
ERROR 1130 (HY000): Host '10.0.0.8' is not allowed to connect to this MariaDB server
#创建用户并授权
MariaDB [(none)]> grant all on zabbix.* to zabbix@'10.0.0.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
标签:单机,0.0,zabbix,web02,拆分,total,root,内存 来源: https://blog.csdn.net/weixin_52492280/article/details/114867950