一、前言
小鸡监控项目很多 功能都差不多,大家可以选择自己喜欢的搭建
我个人比较喜欢 cppla 大佬的小鸡监控探针: ServerStatus ,功能齐全 界面美观 支持tcping看丢包等功能,本文写个教程记录一下搭建该探针的过程
二、服务端配置
服务端即为总控,用于监控小鸡、消息推送、可视化web页面等
1、安装docker
① 更新源
yum update -y && yum upgrade -y apt update -y && apt upgrade -y
② 安装docker及docker compose
curl -fsSL https://get.docker.com -o get-docker.sh && sh ./get-docker.sh
③ 检查docker是否安装成功
root@debian-4gb-fsn1-2:~ Docker Compose version v2.17.2 root@debian-4gb-fsn1-2:~ Docker version 23.0.2, build 569dd73
2、修改配置文件
下载两个配置文件 serverstatus-config.json serverstatus-monthtraffic
wget --no-check-certificate -qO ~/serverstatus-config.json https://raw.githubusercontent.com/cppla/ServerStatus/master/server/config.json && mkdir ~/serverstatus-monthtraffic
下载完后选择性修改 serverstatus-config.json 文件
3、docker run 启动服务端
docker安装无法修改默认界面,如需修改默认界面请选择手动安装
: 之前是代表vps外部文件地址/端口 : 之后是容器内的文件地址/端口
不用担心多个容器端口冲突问题,docker默认为每个容器分配不同的内网IP段
docker run -d --restart=always --name=serverstatus -v ~/serverstatus-config.json:/ServerStatus/server/config.json -v ~/serverstatus-monthtraffic:/usr/share/nginx/html/json -p 80:80 -p 35601:35601 cppla/serverstatus:latest docker run -d --restart=always --name=serverstatus -v ~/serverstatus-config.json:/ServerStatus/server/config.json -v ~/serverstatus-monthtraffic:/usr/share/nginx/html/json -p 8880:80 -p 45601:35601 cppla/serverstatus:latest
通过 http://ip:port 访问
4、通过反代配置域名访问(非必须)
法一 :可以用 宝塔/aapanel 自带的反向代理功能
法二 :使用nginx反代设置
我用的宝塔,配置如下
只需要修改 proxy_pass http://127.0.0.1:8880/; 的IP和端口就行
因为这个nginx是在我本机,我直接用的 127.0.0.1 ,nginx不在本机的话需要更改为服务端的公网IP
location / { proxy_pass http://127.0.0.1:8880/; rewrite ^/(.*)$ /$1 break ; proxy_redirect off; proxy_set_header Host $host ; proxy_set_header X-Forwarded-Proto $scheme ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_set_header Upgrade-Insecure-Requests 1; proxy_set_header X-Forwarded-Proto https; }
3、客户端配置
也就是为每个被监控的小鸡进行配置
1、下载客户端配置文件
此时我在 /root 文件夹下
wget --no-check-certificate -qO client-linux.py 'https://raw.githubusercontent.com/cppla/ServerStatus/master/clients/client-linux.py'
2、选择性编辑客户端配置文件
SERVER = "143.198.119.164" USER = "s01" PASSWORD = "USER_DEFAULT_PASSWORD" PORT = 45601 CU = "mall.10010.com" CT = "www.189.cn" CM = "www.bj.10086.cn" PROBEPORT = 80 PROBE_PROTOCOL_PREFER = "ipv4" PING_PACKET_HISTORY_LEN = 100 INTERVAL = 1
3、安装python3
程序支持python2.7-python3.10
首先通过 python3 --version 确认是否有 python3
或者 python --version 看python版本是否高于2.7
如果没有输出,则需要安装python
ubuntu/debian可以用apt安装
不了解centos的安装方法,你可以google看看 🙂
4、为客户端程序配置守护进程systemd
我习惯使用守护进程,你也可以根据官网直接nohup后台运行
建议先执行命令看看是否可以正常运行,自行修改python版本和文件路径
python3 /root/client-linux.py
[Unit] Description=serverstatus After=network.target [Service] ExecStart=python3 /root/client-linux.py Restart=always [Install] WantedBy=multi-user.target
systemctl start tzstatus systemctl status tzstatus systemctl enable tzstatus systemctl stop tzstatus systemctl disable tzstatus
四、报警推送
1、推送
以telegram_bot为例
获取 bot_token 和 chat_id ,如何获取可以参考这里:获取bot_token和chat_id
在主控修改 serverstatus-config.json 的 callback 填入 https://api.telegram.org/bot你自己的密钥/sendMessage?parse_mode=HTML&disable_web_page_preview=true&chat_id=你自己的标识&text=
例如我的是 https://api.telegram.org/bot575****292:AAGsqP2m_g2UzSmOZSTaup8mN****svsaYM/sendMessage?parse_mode=HTML&disable_web_page_preview=true&chat_id=191****008&text=
Server酱和PushDeer可以参考官方
2、规则设置
截至2023-4-19暂不支持 持续一段时间才发送警告,作者在 issue#198 说以后会支持,如已经支持 请留言告诉我及时更正
规则的已知字段和字段的值可以通过 ip:port/json/stats.json 查看,如:demo1 demo2
watchdog interval 表示最小通知间隔,如果超过这个时间 问题还在则会再次报警,如问题已修复 则不会报警
"watchdog" : [ { "name" : "cpu使用超过80%" , "rule" : "cpu>80" , "interval" : 300, "callback" : "https://yourSMSurl" }, { "name" : "内存超过80%" , "rule" : "(memory_used/memory_total)*100>80" , "interval" : 300, "callback" : "https://yourSMSurl" }, { "name" : "机器离线" , "rule" : "online4=0&online6=0" , "interval" : 600, "callback" : "https://yourSMSurl" }, { "name" : "1分钟内负载大于3" , "rule" : "load_1>3" , "interval" : 600, "callback" : "https://yourSMSurl" }, { "name" : "瞬时出栈速度大于200MB/S" , "rule" : "network_tx/1024/1024>200" , "interval" : 600, "callback" : "https://yourSMSurl" }, { "name" : "瞬时入栈速度大于500MB/S" , "rule" : "network_rx/1024/1024>500" , "interval" : 600, "callback" : "https://yourSMSurl" }, { "name" : "tcp连接数超过500,疑似被CC攻击" , "rule" : "tcp_count>500" , "interval" : 300, "callback" : "https://yourSMSurl" }, { "name" : "该月出栈流量超过1TB" , "rule" : "(network_out-last_network_out)/1024/1024/1024>1024" , "interval" : 864000, "callback" : "https://yourSMSurl" }, { "name" : "硬盘使用空间超过80%" , "rule" : "(hdd_used/hdd_total)*100>80" , "interval" : 1800, "callback" : "https://yourSMSurl" } ] }