# 服务器资源监控通用解决方案
# 背景
由于系统时常由于磁盘或内存原因,导致服务器上的k8s或docker服务异常,进而导致系统不可用,故需要监控服务器资源使用情况,但业务服务器很多,逐个登录服务器查看资源效率太低。
# 方案思路:
1、在各个需要监控资源的服务器上,通过shell命令将相关信息临时保存到"/root/error.log"文件中;
2、通过curl将保存信息的文本文件提交到B服务器上的指定API接口;
3、B服务器每天累积汇总各服务器上报的信息;
4、安全人员每天只需要关注B服务器上的上报信息即可。
# ===== 以下是方案实施相关命令和脚本参考 =====
# 服务器本地脚本编写示例
# 编写收集web系统异常日志内容的脚本: vim /root/bin/appLogRpt.sh
tail -n 150 /data/application/logs/error.log|grep -v "org.\|sun." > error.log
curl -X POST -H 'Content-type: text/plain' --data-binary '@error.log' http://report.abc.net/?type=serverId_reportType
# 编写收集k8s异常pod实例的脚本:vim /root/bin/serviceErrRpt.sh
```
kubectl get pod -n app -o wide|egrep "0/1" > error.log
curl -X POST -H 'Content-type: text/plain' --data-binary '@error.log' http://report.abc.net/?type=serverId_reportType
```
# 编写收集docker异常node的脚本: vim /root/bin/serviceErrRpt.sh
```
docker node ls|grep -v Ready > error.log
curl -X POST -H 'Content-type: text/plain' --data-binary '@error.log' http://sysreport.bncfit.net/?type=erp_serviceLog
```
# 编写收集内存和磁盘信息的脚本: vim /root/bin/sysInfoRpt.sh
free -h > error.log && echo "" >> error.log && df -h >> error.log
curl -X POST -H 'Content-type: text/plain' --data-binary '@error.log' http://report.abc.net/?type=serverId_reportType
# 注:report.abc.net,为接收上报信息的服务器域名或IP地址
# --data-binary,使提交的文体文件保留换行符
# ----- 基础环境配置 -----
# 增加host映射
```
echo "12.37.96.16 report.abc.net" >> /etc/hosts
```
# 给脚本添加执行权限
```
chmod +x /root/bin/*.sh
```
# 添加系统定时任务
# crontab -e
```
01 8,19 * * * sh /root/bin/sysInfoRpt.sh
02 8,19 * * * sh /root/bin/serviceErrRpt.sh
03 10,15 * * * sh /root/bin/appLogRpt.sh
```
# 注:定时任务的分钟数需要错开,以免接收服务器并发时,导致上报失败
# 此方案需要后端API配合使用,有需要的请留言