Nezha Monitoring
Nezha Monitoring
哪吒监控:开源、轻量、易用的服务器监控、运维工具
提示
结合视频食用更香!油管B站 如果您正在使用TrueNAS,想把哪吒监控安装到APP里面,可以查看我的《TrueNAS Scale终极教程》。 这里只记录我所用到的功能,更多详细内容请查看官方文档
0x01 安装
接入GitHub作为后台管理员账号
- 打开Developer Settings,依次选择
OAuth Apps
-New OAuth App
新建授权应用。 - 填写应用信息
Application name
- 随意填写Homepage URL
- 填写面板的访问域名,如:"https://bigdata.icu/"Authorization callback URL
- 填写回调地址,如:"https://bigdata.icu/oauth2/callback"
Register application
注册应用
运行面板安装脚本
# GitHub 源
curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo ./nezha.sh
# Gitee 源
curl -L https://gitee.com/naibahq/nezha/raw/master/script/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh
填写相关信息
请输入 OAuth2 提供商(github/gitlab/jihulab/gitee,默认 github):
- 直接回车,默认github请输入 Oauth2 应用的 Client ID:
- 输入刚才GitHub创建的授权应用的Client ID
请输入 Oauth2 应用的 Client Secret:
- 点击授权应用中的Generate a new client secret
请输入 GitHub/Gitee 登录名作为管理员,多个以逗号隔开:
- 填写你的用户名,不是你登陆的账号或者自定义的别名,比如我的项目地址是 https://github.com/bihell,后面的bihell
就是用户名。请输入站点标题:
- 随意输入站点访问端口: (默认 8008)
- 服务面板的访问端口请输入用于 Agent 接入的 RPC 端口: (默认 5555)
- 客户端和服务面板的通讯端口
0x02 Docker 部署文件
提示
如果有自己的Docker服务器,不想使用官方的一键脚本。那么直接修改配置文件/data/config.yaml把oauth2
该为自己的,然后部署即可。
如果你正在使用TrueNAS,或者对NAS感兴趣,那么可以参考我《TrueNAS Scale终极教程》来自定义APP安装哪吒监控。
配置文件地址:https://github.com/bihell/nezha-docker
0x03 反代配置
#PROXY-START/
location / {
proxy_pass http://192.168.50.116:8008;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
}
location ~ ^/(ws|terminal/.+)$ {
proxy_pass http://192.168.50.116:8008;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
}
#PROXY-END/
0x04 Agent 设置
设定Agent数据传输域名/IP
Settings
->Dashboard Server Domain/IP without CDN
在 OpenWRT 中安装 Agent
- 下载release的二进制包,解压到
/opt
,运行chmod +x /opt/nezha-agent
赋予执行权限 - 创建
/etc/init.d/nezha-service
:
#!/bin/sh /etc/rc.common
START=99
USE_PROCD=1
start_service() {
procd_open_instance
procd_set_param command /opt/nezha-agent -s 面板通信地址:端口 -p 秘钥 -d
procd_set_param respawn
procd_close_instance
}
stop_service() {
killall nezha-agent
}
restart() {
stop
sleep 2
start
}
- 运行
chmod +x /etc/init.d/nezha-service
赋予执行权限 - 启动服务:
/etc/init.d/nezha-service enable && /etc/init.d/nezha-service start
自定义的网卡和分区
执行/opt/nezha/agent/nezha-agent --edit-agent-config
其他运行参数
编辑/etc/systemd/system/nezha-agent.service
然后在 ExecStart=
这一行的末尾加上参数
参数清单:
--report-delay
控制系统信息上报的间隔,默认为 1 秒,可以设置为 3 来进一步降低 agent 端系统资源占用(配置区间 1-4)--skip-conn
不监控连接数,推荐 机场/连接密集型 服务器或CPU占用较高的服务器设置--skip-procs
不监控进程数,也可以降低 Agent 占用--disable-auto-update
禁止 自动更新 Agent(安全特性)--disable-force-update
禁止 强制更新 Agent(安全特性)--disable-command-execute
禁止在 Agent 上执行定时任务、打开在线终端(安全特性)--tls
启用 SSL/TLS 加密(使用 nginx 反向代理 Agent 的 grpc 连接,并且 nginx 开启 SSL/TLS 时,需要启用该项配置)
重启服务:
# 手动编辑
sudo vim /etc/systemd/system/nezha-agent.service
sudo systemctl daemon-reload
sudo systemctl restart nezha-agent
sudo systemctl status nezha-agent
# 直接修改,禁用Agent自动更新命令
sed -i '/^ExecStart=/ {/"--disable-auto-update"/! s/$/ "--disable-auto-update"/}' /etc/systemd/system/nezha-agent.service && systemctl daemon-reload
0x05 延迟监控
地区 | 电信 | 移动 | 联通 | 教育 |
---|---|---|---|---|
上海 | 202.96.209.133 | 221.183.90.237 | 210.22.97.1 | 202.120.2.119 |
北京 | 49.7.37.74 | 112.34.111.194 | 111.206.209.44 | 166.111.4.100 |
广州 | 183.47.126.35 | 120.233.18.250 | 157.148.58.29 | 202.116.64.8 |
深圳 | 218.17.11.168 | 120.196.165.24 | 58.250.90.114 | |
河北 | 27.185.242.215 | 111.62.229.100 | 61.182.138.156 | |
山西 | 1.71.157.41 | 183.201.244.91 | 60.221.18.41 | |
辽宁 | 123.184.58.41 | 36.131.156.145 | 218.61.211.132 | |
吉林 | 123.172.127.217 | 111.27.127.176 | 122.143.8.41 | |
黑龙江 | 42.101.84.132 | 111.42.190.25 | 113.7.211.140 | |
江苏 | 58.215.210.220 | 36.156.92.132 | 122.96.235.165 | |
浙江 | 115.220.14.91 | 117.147.213.41 | 101.69.194.224 | |
安徽 | 223.247.108.251 | 112.29.198.100 | 112.132.208.41 | |
福建 | 106.126.10.28 | 112.50.96.88 | 36.248.48.139 | |
江西 | 106.227.22.132 | 117.168.150.249 | 116.153.69.224 | |
山东 | 144.123.160.140 | 120.220.145.91 | 112.240.56.143 | |
河南 | 171.15.110.220 | 111.7.99.220 | 123.6.65.101 | |
湖北 | 111.170.8.60 | 111.47.131.101 | 122.189.226.138 | |
湖南 | 113.240.117.108 | 120.226.192.91 | 116.162.28.220 | |
广东 | 183.36.23.111 | 183.240.65.191 | 112.90.211.100 | |
海南 | 124.225.43.220 | 111.29.29.219 | 153.0.226.35 | |
四川 | 118.123.218.220 | 183.220.151.41 | 101.206.163.49 | |
贵州 | 58.42.61.132 | 61.243.18.220 | 117.187.254.132 | |
云南 | 222.221.102.220 | 36.147.44.219 | 14.204.150.41 | |
陕西 | 124.115.14.100 | 111.19.148.100 | 123.139.127.132 | |
甘肃 | 118.182.228.91 | 117.157.16.41 | 59.81.94.53 | |
青海 | 223.221.216.219 | 111.12.152.170 | 116.177.237.137 | |
内蒙古 | 110.76.186.70 | 117.161.76.41 | 116.114.98.41 | |
广西 | 222.217.93.55 | 36.136.112.41 | 171.39.5.51 | |
西藏 | 113.62.176.89 | 117.180.234.41 | 43.242.165.35 | |
宁夏 | 222.75.44.220 | 111.51.155.214 | 116.129.226.28 | |
新疆 | 110.157.243.45 | 36.189.208.164 | 116.178.77.40 | |
天津 | 42.81.98.35 | 111.31.236.35 | 116.78.119.56 | |
重庆 | 119.84.131.101 | 221.178.81.101 | 221.7.92.98 |
0x06 Dashboard 配置
懒人配置生成器: https://nz.sina.us.kg/
调整最大TCPPing值
修改文件:/nezha/data/config.yaml
,调整MaxTCPPingValue
值。
隐藏服务中的状态文字
Settings
->Custom Codes (Style and Script)
<style>
.service-status .delay-today-text{display: none;visibility: hidden;}
</style>
设置页面宽度
<style>
.container {
width: 1540px;
}
</style>
隐藏地区图标
在 console
里面执行以下js语句
document.querySelectorAll("i.fi").forEach(el => el.classList = [])
设置主题默认为分组模式
<script>
localStorage.setItem('showGroup', 'true');
</script>
0x07 服务器监控
基本规则
type
:可选取一个或多个类型,如在一个规则中选择了多个类型,需要同时满足所有选择的类型才会触发通知(可参考后面的示例)cpu
、memory
、swap
、disk
net_in_speed
入站网速、net_out_speed
出站网速、net_all_speed
双向网速、transfer_in
入站流量、transfer_out
出站流量、transfer_all
双向流量offline
离线监控load1
、load5
、load15
负载process_count
进程数 目前取线程数占用资源太多,暂时不支持tcp_conn_count
、udp_conn_count
连接数
duration
:持续数秒,数秒内采样记录 30% 以上触发阈值才会报警(防数据插针)min
或max
:- 流量、网速类数值 为字节(1KB=1024B,1MB = 1024*1024B)
- 内存、硬盘、CPU 以占用百分比计数
- 离线监控无需设置此项
cover
:0
监控所有,通过ignore
忽略特定服务器1
忽略所有,通过ignore
监控特定服务器- 例如:
[{"type":"offline","duration":10, "cover":0, "ignore":{"5": true}}]
ignore
: 选择忽略特定服务器,搭配cover
使用,内容为服务器 id 和布尔值,例如:{"1": true, "2":false}
流量监控
属性:
type
:transfer_in_cycle
周期内的入站流量transfer_out_cycle
周期内的出站流量transfer_all_cycle
周期内双向流量和
cycle_start
: 统计周期开始日期(可以是你机器计费周期的开始日期),时间格式为RFC3339,例如北京时间为2022-01-11T08:00:00.00+08:00
cycle_interval
:每隔多少个周期单位(例如,周期单位为天,该值为 7,则代表每隔 7 天统计一次)cycle_unit
统计周期单位,默认hour
,可选(hour
,day
,week
,month
,year
)min/max
、cover
、ignore
参考基本规则配置
配置:
[{"type":"transfer_all_cycle","max":1649267441408,"cycle_start":"2024-03-08T00:00:00+08:00","cycle_interval":1,"cycle_unit":"month","cover":1,"ignore":{"100":true}}]
报警机器人
Telegram
关注官方机器人@Botfather
,创建机器人
访问地址:https://api.telegram.org/bot这里填写密钥/sendMessage?chat_id=这里填写用户id&text=#NEZHA#
密钥就是机器人创建后
@Botfather
返回的 token id可以通过与机器人@userinfobot
对话获得 创建好机器人之后我们先要与其对话一次才可使用
Notifications
->Add Notification Method
到达额定流量关机
配置关机任务
Tasks
->Add Schedule Task
配置告警
Notifications
->Add Notification Rule
离线报警
[{"Type":"offline","Duration":10}]
网速报警
[{"Type":"net_out_speed","Duration":10,"max":10485760,"cover":1,"ignore":{"18":true}}]
CPU+内存
CPU 持续 10s 超过 50% 且 内存持续 20s 占用低于 20% 的报警
[{"Type":"cpu","Min":0,"Max":50,"Duration":10},{"Type":"memory","Min":20,"Max":0,"Duration":20}]