import{_ as i,c as s,o as a,a4 as t}from"./chunks/framework.BmdFiWrL.js";const c=JSON.parse('{"title":"通知设置","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/notifications.md","filePath":"guide/notifications.md","lastUpdated":1719324374000}'),l={name:"guide/notifications.md"},e=t(`
哪吒监控支持对服务器的负载、CPU、内存、硬盘、流量、月流量、进程数、连接数进行监控,并在达到用户设定的阈值时发送告警通知。
#DATETIME#
代表事件发生的时间戳。当通知被触发时,面板会自动将 #DATETIME#
替换为事件的实际时间。#NEZHA#
是面板消息占位符,面板触发通知时会自动用实际消息替换占位符。JSON
格式的:当请求类型为 FORM 时,值为 key:value
的形式,value
里面可放置占位符,通知时会自动替换。当请求类型为 JSON 时 只会简单进行字符串替换后直接提交到 URL
。请参考以下的通知方式示例,也可以根据自己的需求灵活设置推送方式。
名称:Bark
URL 组成: /:key/:body or /:key/:title/:body or /:key/:category/:title/:body
请求方式: GET
请求类型: 默认
Body: 空
名称:Bark
URL 组成: /push
请求方式: POST
请求类型: form
Body: {"title": "#SERVER.NAME#","device_key":"xxxxxxxxx","body":"#NEZHA#","icon":"https://xxxxxxxx/nz.png"}
请提前准备好 Slack 的 Workspace 并为这个 Workspace 创建一个 App。如果你还没有创建,可以在 Slack API 创建一个 App。
创建完成 App 后,需要为这个 App 添加一个 Incoming Webhook。在 App 的设置页面中找到 Incoming Webhooks,将 Activate Incoming Webhooks 勾选为 ON,在页面下方找到并点击 Add New Webhook to Workspace,选择一个 Channel,然后点击允许。完成创建后,你会得到一个 Webhook URL,使用这个 URL 替换下方的示例 URL。
{"text":"#NEZHA#"}
Server 酱进阶
名称:Server 酱
请求方式: POST
请求类型: FORM
Body:
{
"title": "#SERVER.NAME#",
"desp": "**#NEZHA#\\n\\n平均负载: \\"#SERVER.LOAD1#\\",\\"#SERVER.LOAD5#\\",\\"#SERVER.LOAD15#\\"\\n\\n## [点击访问面板](https://你的面板域名)\\n\\n"
}
请提前在 Telegram 中创建一个机器人,获取到机器人的 token 和你的 Telegram 用户 ID。
机器人的 token 和用户 ID 都是数字和字母的组合,可以在 Telegram 中与 @userinfobot 对话获取自己的用户 ID。与 @BotFather 对话,输入命令 /newbot 创建一个机器人,创建完成后可以获得机器人的 token。
得到的 token 和用户 ID 都是字符串,可以直接拼接到 URL 中,如下所示,将其中的 botXXXXXX 替换为你的机器人 token,将 YYYYYY 替换为你的用户 ID。注意,你需要先与机器人对话,否则机器人无法发送消息给你。
需要提前关注你的应用
{"appToken":"你的appToken","topicIds":[],"content":"#NEZHA#","contentType":"1","uids":["你的uid"]}
注意:SendCloud 有每日免费发送邮件限额限制,这里仅作示例,你可以选择付费服务或其他类似的免费服务,使用方法类似。
该示例使用 SendCloud 作为发信服务,需提前在 SendCloud 注册账号,创建发件邮箱,然后在这里获取 APIUSER 和 APIKEY。
替换示例 URL 中的 <替换APIUSER>
和 <替换APIKEY>
为自己的 APIUSER 和 APIKEY,替换 URL 中的 <自定义发件邮箱>
和 <自定义收件邮箱>
为任意的的发件邮箱和收件邮箱。
请提前在钉钉中创建一个机器人,获取到机器人的 token。
机器人 URL 在钉钉群 - 管理机器人 - 创建机器人后获取,安全方式选择自定义关键词,Body 中 content 值内需包含该关键词。
{"Content-Type": "application/json"}
{"msgtype": "text","text": {"content":"哪吒探针:\\n#NEZHA#"}}
支持的占位符一览
{
"content": "#NEZHA#",
"ServerName": "#SERVER.NAME#",
"ServerIP": "#SERVER.IP#",
"ServerIPV4": "#SERVER.IPV4#",
"ServerIPV6": "#SERVER.IPV6#",
"CPU": "#SERVER.CPU#",
"MEM": "#SERVER.MEM#",
"SWAP": "#SERVER.SWAP#",
"DISK": "#SERVER.DISK#",
"NetInSpeed": "#SERVER.NETINSPEED#",
"NetOutSpeed": "#SERVER.NETOUTSPEED#",
"TransferIn": "#SERVER.TRANSFERIN#",
"TranferOut": "#SERVER.TRANSFEROUT#",
"Load1": "#SERVER.LOAD1#",
"Load5": "#SERVER.LOAD5#",
"Load15": "#SERVER.LOAD15#",
"TCP_CONN_COUNT": "#SERVER.TCPCONNCOUNT", # 无效
"UDP_CONN_COUNT": "#SERVER.UDPCONNCOUNT", # 无效
}
{
"msgtype": "markdown",
"markdown": {
"content": "# 哪吒通知消息\\n\\n\\"#NEZHA#\\"\\n\\n> 名称: \\"#SERVER.NAME#\\"\\n> IP: \\"#SERVER.IP#\\"\\n> IPv4: \\"#SERVER.IPV4#\\"\\n> IPv6: \\"#SERVER.IPV6#\\"\\n> CPU: \\"#SERVER.CPU#\\"\\n> 内存: \\"#SERVER.MEM#\\"\\n> 交换分区: \\"#SERVER.SWAP#\\"\\n> 存储: \\"#SERVER.DISK#\\"\\n> 实时上传速度: \\"#SERVER.NETINSPEED#\\"\\n> 实时下载速度: \\"#SERVER.NETOUTSPEED#\\"\\n> 总上传: \\"#SERVER.TRANSFERIN#\\"\\n> 总下载: \\"#SERVER.TRANSFEROUT#\\"\\n> 1分钟内负载: \\"#SERVER.LOAD1#\\"\\n> 5分钟内负载: \\"#SERVER.LOAD5#\\"\\n> 15分钟内负载: \\"#SERVER.LOAD15#\\"\\n> TCP连接数: \\"#SERVER.TCPCONNCOUNT\\"\\n> UDP连接数: \\"#SERVER.UDPCONNCOUNT\\"\\n\\n"
}
}
根据需求删减相关内容信息即可。
机器人 URL 通过飞书群 - 群机器人 - 添加机器人 - 自定义机器人(webhook)创建后获取。
{"content":{"text":"#NEZHA#\\n#DATETIME#"},"msg_type":"text"}
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
: cover
: 0
监控所有服务器,通过 ignore
忽略特定服务器1
忽略所有服务器,通过 ignore
监控特定服务器[{"type":"offline","duration":10, "cover":0, "ignore":{"5": true}}]
ignore
:选择忽略特定服务器,搭配 cover
使用,内容为服务器 ID 和布尔值,例如:{"1": true, "2": false}
完整示例:
添加一个离线告警:
[{"Type":"offline","Duration":10}]
添加一个监控 CPU 持续 10 秒超过 50% 且 内存持续 20 秒占用低于 20% 的告警:
[{"Type":"cpu","Min":0,"Max":50,"Duration":10},{"Type":"memory","Min":20,"Max":0,"Duration":20}]
将特定的服务器通知发送到特定的通知分组:
示例场景:
有 1、2、3、4 四台服务器和 A、B 两个不同的通知组。
1、2 这两台服务器掉线十分钟后给通知组 A 发送通知。
3、4 这两台服务器掉线十分钟后给通知组 B 发送通知。
首先你需要先设置好 A、B 两个通知组,然后添加两条告警规则:
规则一:
[{"type":"offline","duration":600,"cover":1,"ignore":{"1":true,"2":true}}]
规则二:
[{"type":"offline","duration":600,"cover":1,"ignore":{"3":true,"4":true}}]
灵活使用参数可以让你的告警功能被充分使用
可以用作月流量监控
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
参考基本规则配置示例:
ID 为 3 和 4 的服务器(ignore 里面定义),以每月 1 号为统计周期,周期内统计的出站月流量达到 1TB 时告警:
[{"type":"transfer_out_cycle","max":1099511627776,"cycle_start":"2022-01-01T00:00:00+08:00","cycle_interval":1,"cycle_unit":"month","cover":1,"ignore":{"3":true,"4":true}}]
如果需要在发出告警消息的同时执行某项任务,可以设置此项目。