什么是监控, 为什么需要监控
-
监控: 监视, 控制
随着用户的增多, 服务器随时可能会被OOM(out of memory), 内核为了防止系统崩溃, 就会杀进程来释放内存
- 当系统的内存不足的时候, 会触发OOM
Nov 24 16:20:20 xmaster kernel: Out of memory: Kill process 4721 (httpd) score 14 or sacrifice child
Nov 24 16:20:20 xmaster kernel: Killed process 4721 (httpd), UID 48, total-vm:467296kB, anon-rss:13472kB, file-rss:0kB, shmem-rss:12kB
- 当swap分区被大量占用, 系统会特别卡
- 压力测试工具, 测出网站的瓶颈
-
并发
单位时间内达到的请求数
常见的linux监控命令
free
$ free -m
total used free shared buff/cache available
Mem: 972 495 67 7 409 316
Swap: 0 0 0
df
$ df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 4.0K 487M 1% /dev/shm
tmpfs 487M 7.8M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 2.9G 15G 17% /
/dev/sda1 1014M 193M 822M 19% /boot
tmpfs 98M 0 98M 0% /run/user/0
top
%Cpu(s): 43.6 us, 43.6 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 12.9 si, 0.0 st
us: 用户态, 跟用户的操作有关
sy: 内核态, 跟内核的处理有关
$ time df -hP
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 4.0K 487M 1% /dev/shm
tmpfs 487M 7.8M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 3.4G 14G 20% /
/dev/sda1 1014M 193M 822M 19% /boot
tmpfs 98M 0 98M 0% /run/user/0
real 0m0.098s
user 0m0.001s >>>> 用户态进程CPU处理的事件
sys 0m0.004s >>>> 内核态进程CPU处理的事件
htop
$ htop
uptime
$ uptime
00:15:57 up 2 days, 2:03, 2 users, load average: 0.10, 0.05, 0.05
cat /proc/uptime
180350.18 176528.13 >>>> 系统启动时间 系统空闲时间
$ echo 180350.18/3600|bc
50
说明 一般来说, 内存中的系统启动时间/proc/uptime
和uptime
获取的系统的启动时间的差值越小, 表示系统越闲
iftop
$ iftop
iostat
$ yum -y install sysstat
$ rpm -ql sysstat |grep bin
/usr/bin/cifsiostat
/usr/bin/iostat
/usr/bin/mpstat
/usr/bin/nfsiostat-sysstat
/usr/bin/pidstat
/usr/bin/sadf
/usr/bin/sar
/usr/bin/tapestat
$ iostat
Linux 3.10.0-1062.4.1.el7.x86_64 (xmaster) 2019年11月24日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.08 0.00 1.00 0.01 0.00 97.91
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.73 7.25 18.05 1314429 3272661
dm-0 0.76 7.07 17.68 1282562 3204894
dm-1 0.04 0.10 0.07 18848 13560
主要参数解释
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.73 7.25 18.05 1314429 3272661
设备名 每秒传输次数 每秒从硬盘读的大小 每秒写入硬盘的大小 从硬盘读的总大小 写入硬盘的总大小
iotop
vmstat
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 156356 0 496688 0 0 7 18 49 114 1 1 98 0 0
netstat
查看端口
$ netstat -at|grep ESTABLISHED|grep http|grep -v 'tcp6'
tcp 0 0 xmaster:33938 xmaster:http ESTABLISHED
tcp 0 0 xmaster:33942 xmaster:http ESTABLISHED
tcp 0 0 xmaster:33940 xmaster:http ESTABLISHED
- 查看网关
$ netstat -rn
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 172.16.240.2 0.0.0.0 UG 0 0 0 ens33
172.16.240.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
nethogs
$ yum -y install nethogs
$ nethogs
使用shell脚本来监控服务器
每隔1分钟监控一次内存, 当可用内存低于100M, 发邮件报警
配置mail
$ yum -y install mailx
$ vim /etc/mail.rc
set from=zabix1219server@163.com
set smtp=smtp.163.com
set smtp-auth-user=zabix1219server@163.com
set smtp-auth-password=ak1234
set smtp-auth=login
$ echo "Hello" | mail -s "标题" 1392263019@qq.com
#!/bin/bash
mon=`free -m |awk 'NR==2 {print $NF}'`
if [ $mon -le 500 ];then
echo "`date` memory is less than 500" >> /tmp/check_mem.log
echo -e "please check the memory is less than 500" |mail -s "check memory for the hostname `hostname`" 1392263019@qq.com
fi
说明: 规模比较小的时候, 使用shell脚本+定时任务来做监控
zabbix的基础服务架构
zabbix-agent(采集数据) --> zabbix-server(清洗数据, 报警) --> mysql(数据存储) <-- zabbix-web(数据展示)
zabbix安装
官方文档: https://www.zabbix.com/documentation/3.0/manual/installation/install_from_packages
前端安装文档: https://www.zabbix.com/documentation/3.0/manual/installation/install#installing_frontend
第一步: 配置zabbix yum仓库
- 下载并安装
zabbix-release-3.0-1.el7.noarch.rpm
$ wget https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
$ rpm -ivh zabbix-release-3.0-1.el7.noarch.rpm
- 修改
zabbix.repo
文件, 将源改为清华源
$ vim /etc/yum.repos.d/zabbix.repo
baseurl=https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/3.0/rhel/7/x86_64/
baseurl=https://mirror.tuna.tsinghua.edu.cn/zabbix/non-supported/rhel/7/x86_64/
第二步: 安装zabbix服务端和zabbix-web前端
$ yum install zabbix-server-mysql zabbix-web-mysql
Package 架构 版本 源 大小
==========================================================================================================================================================================================================
正在安装:
zabbix-server-mysql x86_64 3.0.28-1.el7 zabbix 1.8 M
zabbix-web-mysql noarch 3.0.28-1.el7 zabbix 6.3 k
为依赖而安装:
OpenIPMI x86_64 2.0.27-1.el7 base 243 k
OpenIPMI-libs x86_64 2.0.27-1.el7 base 523 k
OpenIPMI-modalias x86_64 2.0.27-1.el7 base 16 k
dejavu-fonts-common noarch 2.33-6.el7 base 64 k
dejavu-sans-fonts noarch 2.33-6.el7 base 1.4 M
fontpackages-filesystem noarch 1.44-8.el7 base 9.9 k
fping x86_64 3.10-4.el7 epel 46 k
gnutls x86_64 3.3.29-9.el7_6 base 680 k
iksemel x86_64 1.4-2.el7.centos zabbix-non-supported 49 k
libX11 x86_64 1.6.7-2.el7 base 607 k
libX11-common noarch 1.6.7-2.el7 base 164 k
libXau x86_64 1.0.8-2.1.el7 base 29 k
libXpm x86_64 3.5.12-1.el7 base 55 k
libjpeg-turbo x86_64 1.2.90-8.el7 base 135 k
libxcb x86_64 1.13-1.el7 base 214 k
libzip x86_64 0.10.1-8.el7 base 48 k
net-snmp-libs x86_64 1:5.7.2-43.el7 base 750 k
nettle x86_64 2.7.1-8.el7 base 327 k
php x86_64 5.4.16-46.1.el7_7 updates 1.4 M
php-bcmath x86_64 5.4.16-46.1.el7_7 updates 58 k
php-cli x86_64 5.4.16-46.1.el7_7 updates 2.7 M
php-common x86_64 5.4.16-46.1.el7_7 updates 565 k
php-gd x86_64 5.4.16-46.1.el7_7 updates 128 k
php-ldap x86_64 5.4.16-46.1.el7_7 updates 53 k
php-mbstring x86_64 5.4.16-46.1.el7_7 updates 505 k
php-mysql x86_64 5.4.16-46.1.el7_7 updates 101 k
php-pdo x86_64 5.4.16-46.1.el7_7 updates 99 k
php-xml x86_64 5.4.16-46.1.el7_7 updates 126 k
t1lib x86_64 5.1.2-14.el7 base 166 k
trousers x86_64 0.3.14-2.el7 base 289 k
unixODBC x86_64 2.3.1-14.el7 base 413 k
zabbix-web noarch 3.0.28-1.el7 zabbix
第三步: 安装mariadb, 创建zabbix, 授权zabbix用户
- 安装mariadb
$ yum -y install mariadb-server
$ systemctl start mariadb
$ systemctl enable mariadb
- 初始化数据库
$ mysql_secure_installation
- 创建监控账户
> create database zabbix character set utf8 collate utf8_bin;
> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
> flush privileges;
- 导入zabbix表结构和初始数据
$ zcat /usr/share/doc/zabbix-server-mysql-3.0.*/create.sql.gz | mysql -uzabbix -p zabbix
- 检查zabbix库是否导入成功
$ mysql zabbix -e 'show tables'
第四步: 配置启动zabbix-server
- 设置配置文件
$ vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
- 启动
$ systemctl start zabbix-server
$ systemctl enable zabbix-server
$ netstat -ntulp |grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 2131/zabbix_server
tcp6 0 0 :::10051 :::* LISTEN 2131/zabbix_server
- 查看zabbix日志的路径
grep -Ew 'LogFile' /etc/zabbix/zabbix_server.conf |grep -v '^#'
LogFile=/var/log/zabbix/zabbix_server.log
- 查看日志
2487:20191124:154212.902 IPv6 support: YES
2487:20191124:154212.902 TLS support: YES
2487:20191124:154212.902 ******************************
2487:20191124:154212.902 using configuration file: /etc/zabbix/zabbix_server.conf
2487:20191124:154212.909 [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost' (using password: YES)
2487:20191124:154212.909 database is down: reconnecting in 10 seconds
2487:20191124:154222.911 [Z3001] connection to database 'zabbix' failed: [1045] Access denied
第五步: zabbix前端的PHP配置
Zabbix前端的Apache配置文件位于/etc/httpd/conf.d/zabbix.conf
中. 某些额PHP设置已经配置. 但是有必要取消注释 datetime.timezone
设置为中国的时区
$ vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
第五步: SElinux配置
在强制模式下启用SElinux状态后, 需要对zabbix前端进行放行
$ setsebool -P httpd_can_connect_zabbix on
在前端和SELinux配置完成后, 需要重新启动web服务器**
$ systemctl restart httpd
$ systemctl enable httpd
$ netstat -ntulp |grep http
tcp6 0 0 :::80 :::* LISTEN 2855/httpd
第六步: 前端PHP的安装
访问地址 http://172.16.240.12/zabbix/
-
后期修改zabbix数据库密码的时候, 需要修改的配置文件
/etc/zabbix/web/zabbix.conf.php
- 登录的zabbix的账号密码
Admin
zabbix
监控一台服务器主机
第一步: 安装zabbix-agent
$ rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.20-1.el7.x86_64.rpm
$ rpm -q zabbix-agent
zabbix-agent-3.0.20-1.el7.x86_64
第二步: 配置
$ vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.240.12
$ iptables -I INPUT -p tcp -m tcp --dport 10050 -j ACCEPT
第三步: 启动
$ systemctl start zabbix-agent
$ systemctl enable zabbix-agent
$ netstat -ntulp|grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 19154/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 19154/zabbix_agentd
第四步: zabbix-web端加入主机
自定义监控
监控磁盘IO
第一步: zabbix-agent配置
$ vim /etc/zabbix/zabbix_agentd.conf
265:Include=/etc/zabbix/zabbix_agentd.d/*.conf
$ grep -Evn '^$|^#' /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
95:Server=172.16.240.12
136:ServerActive=127.0.0.1
147:Hostname=Zabbix server
265:Include=/etc/zabbix/zabbix_agentd.d/*.conf
$ vim /etc/zabbix/zabbix_agentd.d/tps.conf
UserParameter=tps,iostat |awk '$1~/sda/{print $2}'
$ systemctl restart zabbix-agent.service
第二步: zabbix-server测试
$ yum -y install zabbix-get
$ zabbix_get -s 172.16.240.13 -p 10050 -I 172.16.240.12 -k tps
20.72
第三步: zabbix-web添加自定义监控项
- 修改监控项同步时间
- 查看数据
监控tcp的状态
第一步: zabbix-agent配置
$ vim /etc/zabbix/zabbix_agentd.d/tcp.conf
UserParameter=tcp,netstat -antt|fgrep -c 'ESTABLISHED'
$ systemctl restart zabbix-agent.service
第二步: zabbix-server测试
$ zabbix_get -s 172.16.240.13 -p 10050 -I 172.16.240.12 -k tcp
自定义触发器
前提是有监控项, 并且这个监控项可以取到值
第一步: 新建触发器
第二步: 设置报警媒介类型
注意 这里的密码需要填写163邮箱的授权码