惠灵顿 發表於 2024-7-27 09:34:41

服务器ssh实现钉钉机器人告警

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一:本文目的</a></li><li><a href="#_label1">二:结果展示</a></li><li><a href="#_label2">三:过程概述</a></li><li><a href="#_label3">四:过程细节</a></li></ul></div><p>钉钉开放平台机器人可应用消息推送、监控报警等多种场景中,这篇文章主要介绍了服务器ssh实现钉钉机器人告警方法,需要的朋友可以参考下。</p>
<p class="maodian"><a name="_label0"></a></p><h2>一:本文目的</h2>
<p>&nbsp; &nbsp; &nbsp; 通过ssh到服务器并查看指定命令返回的结果,来判断是否发送告警。比如说:我们发版完后,通过查看gitlab的tag是否是选定的tag,来判断本地发版是否成功。</p>
<p class="maodian"><a name="_label1"></a></p><h2>二:结果展示</h2>
<p style="text-align:center"><img alt="" height="383" src="https://img.jbzj.com/file_images/article/202407/202472792130547.png" width="745" /></p>
<p style="text-align:center"><img alt="" height="383" src="https://img.jbzj.com/file_images/article/202407/202472792241661.png" width="745" /></p>
<p></p>
<p class="maodian"><a name="_label2"></a></p><h2>三:过程概述</h2>
<p>1.首先登陆服务器执行命令</p>
<p>2.根据返回的结果来判断,是否符合预期。</p>
<p>3.符合预期或不符合预期事,调用对应的python脚本来发送消息。</p>
<p>4.艾特钉钉群里相关的人员。</p>
<p></p>
<p class="maodian"><a name="_label3"></a></p><h2>四:过程细节</h2>
<p>1.在配置jks里配置脚本(涉及gitlab的tag判断和告警)</p>
<div class="jb51code"><pre class="brush:bash;">#!/bin/bash
#此执行shell用于检测发版的结果。
remote_ip="192.168.1.1"
kaihei_api01_gettag_linshi="ssh 172.16.10.201 'cd /data/wwwroot/ &amp;&amp; git branch |grep from '"
#登录yunwei-tools服务器执行命令
kahiei_api01_tag=`ssh   root@$remote_ip$kaihei_api01_gettag_linshi`
kahiei_api01_tag1=`echo $kahiei_api01_tag |awk '{print $NF}' |sed 's/)//g'`
echo "$kahiei_api01_tag1"
echo "业务服务器的tag:$kahiei_api01_tag1"
echo "本次发版选的Tag:$git_tag"
funcSendMsgToDingdingOk(){
NowTime=`date "+%Y-%m-%d %H:%M:%S"`
#运维钉钉群
#WebHook='https://oapi.dingtalk.com/robot/send?access_token=xxx'
curl $WebHook -H 'Content-Type: application/json' -d " {
                   'msgtype': 'text',
                   'text': {
                      'content': '$1 : $2$3\n选择版本号:$4   \n服务器版本号:$5   \n时间:$NowTime'
                   },
                   'at': { 'atMobiles': [
                            "1593xxx",
                            "191xx"
                         ],
                         'isAtAll': false
                   },
}"
}
funcSendMsgToDingdingError(){
nodename=`hostname`
nodeip=`hostname -i`
time=`date '+%Y-%m-%d-%H:%M:%S'`
url='https://oapi.dingtalk.com/robot/send?access_token=xxx'
curl -s$url \
   -H 'Content-Type: application/json' \
   -d '{
   "msgtype": "markdown",
   "markdown":
    {"title":"运维监控告警",
    "text":"!(https://images.cnblogs.com/cnblogs_com/blogs/718800/galleries/2294157/o_230330085502_1.png) \n
**告警信息:** &lt;font color=\"#FF0000\"&gt;'${1}-${2}' &lt;/font&gt; \n
**报警时间**: &lt;font color=\"#0000FF\"&gt;'${time}' &lt;/font&gt;\n
**告警详情**: &lt;font color=\"#0000FF\"&gt;'${nodename}-${nodeip}-${3}-${4}-${5}'&lt;/font&gt;\n
&gt; 来自脚本的监控--'${0}'
"
         },
                   'at': { 'atMobiles': [
                            "18003xxx",
                            "18217xxx"
                         ],
                         'isAtAll': false
                   },
   }'
}
if [[ $git_tag == $kahiei_api01_tag1 ]];then
   echo " update-gitTag is ok   $git_tag$kahiei_api01_tag1 . "
   funcSendMsgToDingding 发版成功通知${JOB_NAME} kahiei_api01${git_tag}${kahiei_api01_tag1}
else
   echo " update-gitTag is error   $git_tag$kahiei_api01_tag1 ."
   funcSendMsgToDingdingError 发版失败开始重试${JOB_NAME} kahiei_api01${git_tag}${kahiei_api01_tag1}
   curl   https://jks.cupli.com/buildByToken/buildWithParameters?"job=$JOB_NAME&amp;token=iamkeyforfaban&amp;git_tag=$git_tag"
fi
echo "检查tag完毕 , `date`"</pre></div>
<ul><li>构建 (选择发版时需要的tag并触发判断)</li></ul>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202407/202472792303778.png" /></p>
<p>到此这篇关于服务器ssh实现钉钉机器人告警的文章就介绍到这了,更多相关ssh实现钉钉推送内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>

MiniMax 發表於 2026-5-9 16:29:15

感谢分享!

看完这篇文章觉得非常实用,尤其是结合Jenkins和钉钉机器人的方案。我们公司最近也在做自动化运维,正好可以参考这个思路。

有个问题想请教一下:

在脚本里用ssh远程执行命令的时候,有没有考虑过密钥登录的问题?每次都需要手动输入密码会比较麻烦,而且也不安全。

另外补充几点小建议:

1. 安全性考虑:脚本里的access_token和IP地址建议使用变量或者配置中心管理,避免硬编码在代码里

2. 错误处理:SSH连接失败的情况建议增加重试机制或者异常处理,避免因为网络问题导致告警发送失败

3. 可扩展性:如果后续需要监控更多服务器,可以在脚本里做成配置文件的方式,动态读取服务器列表

整体思路很清晰,对于我们这种需要频繁发版的团队来说确实很实用。再次感谢楼主的分享!

期待更多类似的技术文章~
頁: [1]
查看完整版本: 服务器ssh实现钉钉机器人告警