业务场景:应用发布监听服务是否正常启动,因为服务器资源不够上不了prometheus、grafana,所以写的shell脚本监听。此脚本适用于初创公司及小微企业使用。

准备工作

除了shell脚本这里还使用到了expect脚本,expect类似有telnet你的服务端口返回相应的值判断应用端口是否正常开启。

yum install -y expect
vim script.exp #!/usr/bin/expect
set timeout 2
set host [lindex $argv 0]
set port [lindex $argv 1]
spawn telnet $host $port
expect "*Escape character*"
send "\1D\r quit\r"

然后是主体脚本main.sh

#!/bin/bash
ip=$1 #从参数中获取目的IP
port=$2 #从参数中获取目的端口
AppName=$3 #从参数中获取服务名称
Fail=0 #失败标记
FailCount=0 #连续失败次数
Dmail=xxxxxxxxxx@qq.com #通知邮箱 while true
do
date=`date`
expect -f script.exp $ip $port | grep "Escape character" > $ip-$port.log
#截取script.exp脚本中返回的包含Escape character的行,重定向到日志文件中,如果telnet失败,则文件为空。注意第一次启动该脚本会自动创建日志文件,邮件也会异常提醒,重新运行后会就正常。
if [[ -s $ip-$port.log ]]
then
#若文件存在且不为空,则端口连通
if [[ $Fail -eq 1 ]]
#若端口连通且上一次为失败状态,则执行
then
echo -e "$ip $port $AppName 已恢复正常\n$date" >> success.txt | mailx -s "【xxxx环境】$AppName已恢复正常!" $Dmail < success.txt
#发送邮件到XXXX@qq.com
Fail=0
#重置失败标记
FailCount=0
#重置失败次数
cat /dev/null > success.txt
#邮件发送后清空日志文件,防止日志堆积发送。
fi
else
FailCount=$(( $FailCount+1 ))
#记录连续失败次数
if [[ $Fail -eq 0 ]]
then
#若端口不通且上一次为连通状态,则执行
echo -e "$ip $port $AppName 监听端口异常\n$date" >> fail.txt | mailx -s "【XXXX环境】$AppName异常请查看检查服务!!!" $Dmail < fail.txt
Fail=1
#点亮失败标记
cat /dev/null > fail.txt
fi if [[ $FailCount -eq 180 ]]
then
#若连续失败次数大于180次,重置失败标记及最大连续失败次数,若仍失败则再次发送邮件提醒。
FailCount=0
Fail=0
fi
fi
sleep 2
done

邮箱通知设置

#邮箱配置教程:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
yum -y install mailx
vim /etc/mail.rc set from=xxxxxxxxx@qq.com
# 这里必须和set smtp-auth-user的邮箱一样
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxxxxxxxx@qq.com
set smtp-auth-password=邮箱授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/root/.certs

邮箱证书配置,避免不必要的异常。

mkdir -p /root/.certs/

echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs


cd /root/.certs
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt


#返回如下提示即可:
Notice: Trust flag u is set automatically if the private key is
present.

测试

#测试
mailx -s “邮箱测试” xxxx@qq.com < "hello world"

最后批量监控服务shell

#创建日志文件
touch fail.txt
touch success.txt vim start.sh

#!/bin/bash
#目的ip 端口 服务名称
./main.sh ip prot XXXX &
./main.sh ip prot XXXX &
./main.sh ip prot XXXX &
./main.sh ip prot XXXX &

转载请备注原文链接!

shell端口监听异常邮箱告警的更多相关文章

  1. netty同端口监听tcp和websocket协议

    前言: 软件通信七层结构(osi模型)中由协议套协议最终组成最高级应用层协议(http等等),下三层结构偏向与数据通信,上三层更偏向于数据处理,中间的传输层则是连接上三层与下三层之间的桥梁,每一层都做 ...

  2. ZooKeeper(二):多个端口监听的建立逻辑解析

    ZooKeeper 作为优秀的分布系统协调组件,值得一探究竟.它的启动类主要为: 1. 单机版的zk 使用 ZooKeeperServerMain 2. 集群版的zk 使用 QuorumPeerMai ...

  3. nodejs 80端口监听失败及NODE_PATH不起作用的问题

    nodejs做web服务器,打开80时报错:Error: listen EACCES 0.0.0.0:80 80端口监听失败,是因为1024以下的端口需要root权限,需要sudo或su之后执行.但这 ...

  4. Oracle 监听器日志文件过大导致监听异常

    Oracle 监听器日志文件过大导致监听异常 db版本:11.2.0.1 os版本:windows2008 现象: 应用异常,无法连接数据库.登陆数据库服务器,查看监听已经断掉.尝试重启监听,重启失败 ...

  5. asp.net core 多端口监听&日志服务

    1 配置多个端口监听 HostingAbstractionsWebHostBuilderExtensions. public static IWebHostBuilder UseUrls(this I ...

  6. swoole多端口监听

    今天测试swoole写webserver实现多端口监听.记录下爬过的坑:关于tcp协议监听触发不到receive!!!!! 首先上服务端代码 class Http { /** * 服务实例 * @va ...

  7. 获取运行端口监听的用户身份auth-owner

    获取运行端口监听的用户身份auth-owner   Windows系统提供工作在TCP 113端口的授权服务(Authentication Service),用来判断TCP连接的用户.Nmap的aut ...

  8. 利用 netsh 给 mysql 开启多端口监听

    利用 netsh 给 mysql 开启多端口监听 标题党,实际并不是真的多端口监听,只是端口转发而已. 由于某种特殊原因需要 mysql 服务器多个端口监听. mysql 服务器本身是不支持的,但可以 ...

  9. 多进程端口监听 How nginx processes a request Server names

    网络编程( 六):端口那些事儿 - 知乎专栏  https://zhuanlan.zhihu.com/p/20365900 不停服务reload.restart 多进程端口监听 我们都有一个计算机网络 ...

  10. Nginx配置IPv6端口监听及务器设置IPV6及Https支持并通过AppStore审核

    一.监听端口 从Nginx 1.3的某个版本起,默认ipv6only是打开的,所以,我们只需要在监听中加入ipv6监听即可,不过推荐都手动加上比较好,代码如下: listen [::]: ipv6on ...

随机推荐

  1. 前端枚举enum的应用(Element)封装

    什么是枚举Enum 枚举 Enum是在众多语言中都有的一种数据类型,JavaScript中还没有(TypeScript有).用来表示一些特定类别的常量数据,如性别.学历.方向.账户状态等,项目开发中是 ...

  2. Java注解(3):一个真实Elasticsearch案例

    学会了技术就要使用,否则很容易忘记,因为自然界压根就不存在什么代码.变量之类的玩意,这都是一些和生活常识格格不入的东西.只能多用多练,形成肌肉记忆才行. 在一次实际的产品开发中,由于业务需求的缘故,需 ...

  3. NVIDIA Isaac Gym安装与使用

    NVIDIA做的Isaac Gym,个人理解就是一个类似于openai的Gym,不过把环境的模拟这个部分扔到了GPU上进行,这样可以提升RL训练的速度. 官网:https://developer.nv ...

  4. RE语法

    RE,英文为Regular Expression,中文译作正则表达式.用于文本过滤的工具.RE语法由一些元字符.其它任意字符串作为基本单元,匹配次数.分组匹配.锚定符等为操作单元组成.进行逐行扫描,满 ...

  5. Vue学习之--------深入理解Vuex之模块化编码(2022/9/4)

    在以下文章的基础上 1.深入理解Vuex.原理详解.实战应用:https://blog.csdn.net/weixin_43304253/article/details/126651368 2.深入理 ...

  6. Kafka 架构和原理机制 (图文全面详解)

    目录 一:Kafka 简介 二:Kafka 基本架构 三:Kafka 基本原理 四:Zookeeper 在 kafka 的作用 五:Kafka 的特性 六:Kafka 的应用场景 一:Kafka 简介 ...

  7. DTSE Tech Talk | 第10期:云会议带你入门音视频世界

    摘要:本期直播主题是<云会议带你入门音视频世界>,华为云媒体服务产品部资深专家金云飞,与开发者们交流华为云会议在实时音视频行业中的集成应用,帮助开发者更好的理解华为云会议及其开放能力. 本 ...

  8. 定制ASP.NET Core的身份认证

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 在本章,我们将学习如何定制ASP.NET Core认证机制.微软把安全认证当做AS ...

  9. Redis集群研究和实践(基于redis 3.2.5)(一)

    前言 Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到广泛的使 用. Redis在2015年发布了3.0.0,官方支持了redis cluster.至此结束了redis ...

  10. nydusd 源码理解(一)

    " 尝试通过 nydus[1] 源码理解工作流程.可能由于代码变动导致和本文记录的内容有出入. 1. 环境准备 git clone https://github.com/dragonflyo ...