Node 服务监控及通过钉钉推送告警提醒

背景:需要监控某个服务是否在线,运行是否正常;

实现步骤:

1、需要在项目中内置一个可以监控的健康状态接口,详情可参考之前的文章:使用 PM2 启动node服务,并添加监控接口_node pm2-CSDN博客

2、再添加另外一个进程来监控这个接口是否正常在线,然后通过钉钉推送异常消息。

上代码:

安装依赖 axios 和 crypto

npm install axios crypto

项目结构

project/
├── dingtalkNotifier.js    # 钉钉推送模块
├── monitor.js             # 主监控逻辑(定时探测)
├── package.json

1、 编写钉钉推送模块(dingtalkNotifier.js

// dingtalkNotifier.js
const axios = require('axios');
const crypto = require('crypto');

const accessToken = '你的access_token'; // 来自钉钉机器人安全设置
const secret = '你的加签密钥(Secret)'; // 来自钉钉机器人安全设置

function getSign(secret) {
 
### 配置Grafana与钉钉集成实现告警通知 #### 1. 准备工作 在开始配置之前,需要确保以下组件已正确安装和运行: - **Prometheus**: 作为核心监控组件收集指标数据[^1]。 - **Alertmanager**: 处理来自 Prometheus 的告警,并转发给指定的通知渠道[^3]。 - **Grafana**: 提供可视化的仪表盘展示监控数据,并支持多种告警通道[^4]。 此外,还需要准备好钉钉机器人 Webhook 地址。如果尚未创建钉钉机器人,请按照钉钉官方文档操作,生成一个自定义 Webhook URL[^2]。 --- #### 2. 配置 Alertmanager 支持钉叮告警 为了使 Grafana 和钉钉能够协同工作,首先需要配置 Alertmanager 使用钉钉作为告警通知方式。 ##### 编辑 `alertmanager.yml` 文件 以下是典型的 `alertmanager.yml` 配置示例: ```yaml global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'dingtalk' receivers: - name: 'dingtalk' webhook_configs: - url: 'https://oapi.dingtalk.com/robot/send?access_token=your_access_token_here' # 替换为实际的钉钉机器人Webhook地址 send_resolved: true ``` 在此配置中,`webhook_configs.url` 字段指定了钉钉机器人的 Webhook 地址。保存该文件后重启 Alertmanager 生效。 --- #### 3. 在 Grafana 中启用告警功能 Grafana 自身并不直接处理告警逻辑,而是依赖外部系统(如 Prometheus 和 Alertmanager)。因此,只需确保 Grafana 已经连接到 Prometheus 数据源即可触发告警。 ##### 步骤 1. 登录 Grafana 并导航到 **Configuration -> Data Sources** 页面。 2. 添加一个新的 Prometheus 数据源,填写其 API 访问地址(例如:`http://localhost:9090` 或者远程服务器地址)[^4]。 3. 测试连接以确认数据源可用。 --- #### 4. 创建告警规则并关联钉叮通知模板 当一切就绪后,可以在 Grafana 上创建具体的告警规则并与钉叮通知绑定。 ##### 创建告警规则 1. 导航到任意面板或新建一个查询窗口。 2. 点击右上角的红色钟形图标进入告警编辑模式。 3. 设置条件表达式(Condition),例如检测 CPU 利用率超过阈值: ```plaintext rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100 < 20 ``` 4. 将告警发送到 Alertmanager,这一步通常默认勾选。 ##### 定义钉叮消息模板 根据引用内容[^2],可以使用 Go 模板语法编写钉叮消息格式化规则。将以下代码复制到 Alertmanager 的模板部分: ```go {{/* 定义消息体片段 */}} {{ define "my_text_alert_list" }} {{ range . }} 告警名称: {{ index .Labels.alertname }} 告警机器: {{ index .Labels.instance }} 告警级别: {{ index .Annotations.severity }} 告警详情: {{ index .Annotations.summary }} 触发阀值: {{ index .Annotations.description }} 发生时间: {{ .StartsAt }} {{ if eq .Status "resolved" }} 恢复时间: {{ .EndsAt }} {{ end }} {{ end }} {{ end }} {{/* 定义最终消息体 */}} {{ define "my.message" }} {{ if gt (len .Alerts.Firing) 0 }} **--------发生告警---------** {{ template "my_text_alert_list" .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} **-------恢复告警------** {{ template "my_text_alert_list" .Alerts.Resolved }} {{ end }} {{ end }} ``` 保存模板后重新加载 Alertmanager。 --- #### 5. 验证配置有效性 最后验证整个流程是否正常运作: 1. 故意制造一些异常情况(比如停止某个服务进程),观察是否会触发告警。 2. 查看钉叮群聊是否有对应的告警推送信息到达。 --- ### 总结 通过以上步骤完成了从 Prometheus 数据采集、Alertmanager 告警管理再到 Grafana 可视化展示的一整套链路构建,并实现了基于钉叮的消息通知机制。这样可以帮助运维人员第一时间掌握系统的健康状态变化趋势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小破孩呦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值