告别手动告警监控:基于手机闹钟的自动化服务器告警提醒(另类电话提醒)

基于手机闹钟的自动化服务器告警提醒

简介与优势

传统的电话提醒方式在企业应用中常需进行备案等繁琐操作,而使用智能手机电话提醒作为替代方案,虽然可行,但需额外手机和SIM卡。

解决这一痛点本文介绍了一种利用HTTP请求和智能手机闹钟实现自动化告警通知的方法,避免了以上问题。

现状与挑战

当前的运维工作面临着诸多挑战:运维人员经常需要在晚上加班到深夜12点,而且每天早上7点半还需花费大量时间来检查各种告警系统(如Zabbix、Prometheus和自定义告警),确保系统稳定运行。这种高强度的工作节奏不仅增加了运维人员的工作负担,也容易导致工作效率下降和人为误操作的风险。

在这里插入图片描述
在这里插入图片描述

前置条件手机需要root权限才能设闹钟

手机基于nc启动的web服务器

为实现即时响应,我们使用nc(netcat)在手机上启动一个简单的HTTP服务器,实现设置下一分钟的闹钟:

while true; do
  # 使用nc监听端口,接收请求
  { echo -e "HTTP/1.1 200 OK\r\n\r\nok"; } | nc -l -p 8081 -q 1
  # 执行设置闹钟的命令
  am start -a android.intent.action.SET_ALARM --ei android.intent.extra.alarm.HOUR $(( (10#$(date +%H) + (10#$(date +%M) + 1) / 60) % 24 )) --ei android.intent.extra.alarm.MINUTES $(( (10#$(date +%M) + 1) % 60 )) --ez android.intent.extra.alarm.SKIP_UI true
done

服务启动后,我们可以通过手机浏览器访问,http://127.0.0.1:8081,发现已经能够实现自动设置下一分钟闹钟了。

Nethunter上的nginx配置示例(可不做)

由于nc监听的服务不像正常的HTTP服务器,不方便自定义一些东西,只要访问到端口就会被激活,我们需要更灵活的处理请求。因此,我在手机上使用Nethunter搭建了nginx,将/setclock/路径的请求转发到8081端口上。

server {
    listen 8080;
    server_name localhost;

    location /setclock/ {
        proxy_pass http://127.0.0.1:8081;
    }
}

通过以上配置,我们可以更安全、更灵活地处理来自外部的请求,确保只有特定请求才会触发设置闹钟操作,避免误操作带来的不便。

提示

经过一星期的测试发现,手机内部可能有程序会扫描并请求手机端口,导致误设闹钟。后面我通过在Nethunter跑python flask监听某端口某路径,通过adb调用本机设置闹钟,这样效果最实用,同时frp跑在这里面也比较稳定。

frp的作用与配置

frp是一种用于内网穿透的工具,它能够将内网服务暴露到公网,从而实现外部访问内网服务的功能。在本文中,我们将使用frp来实现将手机上的8080端口(通过nginx代理的设置闹钟接口)映射到服务器的8080端口,以便外部系统可以访问设置闹钟的功能。
https://github.com/fatedier/frp

frp服务器端配置示例

[common]
bind_port = 12345
token = password
#log_level = debug

通过./frps -c frps.ini运行服务端

frp安卓客户端配置示例

安卓手机均为arm64架构,只需下载arm64版运行即可。
通过以下配置就能将手机的8080端口转发到服务器的8080,从而进行下一步操作。

[common]
server_addr = wofuwuqi.com
server_port = 12345
token=password

[naozhong]
type = tcp
local_ip = 127.0.0.1
local_port = 8080
remote_port = 8080

由于手机在你移动的过程中,切换了网络就会导致frp断开连接,所以我们这边使用while true无限循环运行,保证断掉后能重新连上。

while true
do
    ./frpc -c frpc.ini
    sleep 5
done

服务器nginx配置

接下来基本配置为了使外部能访问我们的系统,我们在服务器上配置nginx来反向代理,为了安全再加上密码认证

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        auth_basic "req";
        auth_basic_user_file /etc/nginx/password; #认证文件

    }
}

至此访问 http://wofuwuqi.com/ 将会访问到前面手机搭的,因没有设置默认页面的默认nginx页面,访问 http://wofuwuqi.com/setclock/ 则会设置闹钟。

告警程序与手机通知对接

最后,我们通过Python代码实现告警程序与手机通知的对接:

if '异常' in result_msg:
    if duty_user == '运维用户名': #设置只有某人才会收到闹钟提醒
        print('检测请求到手机是否通畅')
        if send_request('http://user:user@wofuwuqi.com/'): 
            print('检测并设置闹钟,返回接口是否正常')
            if send_request('http://user:user@wofuwuqi.com/setclock/') == 'ok\n':
                send_ding('AI:已联系运维手动处理!')  # 发送到钉钉群
else:
    send_ding(f'{duty_user}:无紧急告警无需运维处理!')

当调用接口后 自动设置闹钟 实现及时告警

在这里插入图片描述

原创内容未经允许禁止转载!!!!!
原创内容未经允许禁止转载!!!!!
原创内容未经允许禁止转载!!!!!

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值