Jenkins与钉钉机器人实现手机端获取当前服务日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

马上要过年了,各位运维们除了因为买不到回家的火车票而嚎嚎大哭之外也开始扩容服务器和提前调整监控值,目的就是为了过一个消停的春节。可是这毕竟十天左右不在公司,要是模块真出了什么意外肯定没法第一找到日志分析问题,毕竟这几天都在串门拜年和醉生梦死中度过,走到哪都要再背一个笔记本实在太不方便了。

那么这个时候,我就琢磨使用手机端来启动服务器里脚本,让这个脚本可以去获取当前的日志,然后再把结果返回到手机端。这样就不用到哪里都带那个一看就很扫兴的公司笔记本电脑了。

使用手机端启动服务器里脚本?我又不会开发android和ios,那么肯定就要使用第三方工具,我条件反射的想到了jenkins,因为jenkins是用手机可以登录的,那么在手机端得到结果用什么呢?在微信公众号和钉钉机器人里,我选择了钉钉机器人。

创造钉钉机器人

我的钉钉版本是4.2.6.37,首先在左上角头像的三角菜单有一个机器人管理,如图:
Jenkins与钉钉机器人实现手机端获取当前服务日志

然后选择自定义机器人,给它起个名又换一个图标之后,添加到一个群聊里,如图:
Jenkins与钉钉机器人实现手机端获取当前服务日志

添加的时候,这个机器人会生成一个webhook,它的结构应该是:https://oapi.dingtalk.com/robot/send?access_token=XXX,后面的XXX是标识符,不同的标识符代表不同的机器人,这个标识符如果丢了,可以在机器人头像点击一下然后选择机器人设置重新看到。

编写机器人脚本

机器人的官方说明网址就是https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.zZIvnt&treeId=257&articleId=105735&docType=1,这里面已经把使用方法写的够清楚了。我这里的这个python脚本是用json的格式,如下:

    #!/bin/python
    #coding: utf-8
    import json,urllib2

    #这里是机器人对应的Webhook地址
    url = "https://oapi.dingtalk.com/robot/send?access_token=这里输入你机器人的标识符

    #这里是头,原样复制就好
    header = {
        "Content-Type": "application/json",
        "charset": "utf-8"
        }

    #这里是传送的消息
    data = {
         "msgtype": "text",
            "text": {
                "content": "这里是消息正文!"
            },
         "at": {
             "atMobiles": [
            "A的手机号",
            "B的手机号"
            ], 
             "isAtAll":False   #这里True代表要发给所有人,False的话,要代表消息只发给A和B这两个人
          }
     }

    sendData = json.dumps(data)
    request = urllib2.Request(url,data = sendData,headers = header)
    urlopen = urllib2.urlopen(request)
    print urlopen.read()

直接执行这个脚本,就会看到我刚新建的钉钉机器人在群聊里说话了。
Jenkins与钉钉机器人实现手机端获取当前服务日志

机器人搭配nginx

上面那个脚本已经可以初步实现我们的目的,但是有一个缺点,就是正文内容不能过长。但是我想多打印一点日志,至少50行,怎么办?我想了想,可以把日志放进nginx的一个网页里,然后用钉钉机器人反馈这个网页地址啊,这样内容想写多少就可以写多少了。

假设我现在获取到的日志的文件写进一个叫chairmanmao.html里,在浏览器打开看是这样的:
Jenkins与钉钉机器人实现手机端获取当前服务日志

那么上面那个机器人的python脚本就要改成这样:

    #!/bin/python
    #coding: utf-8
    import json,urllib2,commands

    commands.getstatusoutput('echo -e "THIS IS TEST MESSAGE! \n" > /路径/chairmantail.html')  #这里可以给网页加一个标题
    commands.getstatusoutput('cat /路径/chairmanmao.txt >>  /路径/chairmanmao.html')        #这里就是把诗词写进html文件里

    #这里是机器人的webhook地址
    url = "https://oapi.dingtalk.com/robot/send?access_token=这里输入你机器人的标识符"

    header = {
        "Content-Type": "application/json",
        "charset": "utf-8"
        }

    data = {
         "msgtype": "link",
            "link": {
                    "text": "点击网址就可获取到本次日志查询的结果",
                    "title": "日志查询结果已经生成!",
                    "picUrl": "http://p1x3hd2at.bkt.clouddn.com/nanshen.jpg",   #这里可以加一个缩略图片
                    "messageUrl": "http://服务器外网IP地址/chairmanmao.html"
        },
         "at": {
                "isAtAll":True   # at为非必须
             }
        }

    sendData = json.dumps(data)
    request = urllib2.Request(url,data = sendData,headers = header)
    urlopen = urllib2.urlopen(request)
    print urlopen.read()

执行这个脚本可以看到机器人发送的信息如下:
Jenkins与钉钉机器人实现手机端获取当前服务日志

然后打开这个网址,就看到完整的网页信息:
Jenkins与钉钉机器人实现手机端获取当前服务日志

到时候把毛主席诗词换成实际的日志文件就好了,不用一口气打印所有的日志出来,tail -n 50 日志文件名,50行足够用了。

配置Jenkins

脚本写完了,机器人也写完了,这个时候就要添加“启动端”。安装Jenkins的步骤我这里就不写了,直接可以去看https://rorschachchan.github.io/2018/02/05/Jenkins安装与创建简单任务/。现在去登录Jenkins的网页,去添加一个新的Job,比如我这个Job就叫“获取模块日志”,如图:
Jenkins与钉钉机器人实现手机端获取当前服务日志

如果是要在Jenkins上去读取其他服务器的日志,就可以在构建project的时候选择参数化构建过程,然后配置参数ip,到时候把这些ip传递给目标脚本。如果觉得这样hold不住,可以不用jenkins的这个功能,把ip写到脚本里去,一了百了:
Jenkins与钉钉机器人实现手机端获取当前服务日志

构建那一步,选择Execute Shell,然后里面写上具体的shell命令,如果在上面使用了参数,那么参数就可以在这里使用,我的脚本里是没有ip这个参数的,在图里写$ip就是做一个例子讲解一下用法而已:
Jenkins与钉钉机器人实现手机端获取当前服务日志

构建后操作这一步可以选择E-mail Notification,这样如果失败了会发送邮件通知。如果用不着就什么都不用选。然后就是保存好这个project,点击左侧菜单栏的立即构建,就会看到下面Build History会多一个#1出来,同时钉钉机器人也在群里发消息,这个#1就是构建的记录,这个纪录多了的话,新纪录会覆盖掉老的记录。
Jenkins与钉钉机器人实现手机端获取当前服务日志

点击这个#1,选择控制台输出,就能看到具体的操作结果了,跟在shell界面里执行的效果差不多的。可见操作成功,目的已经达到了!
Jenkins与钉钉机器人实现手机端获取当前服务日志

以后需要调用脚本,就在手机端浏览器里登陆jenkins,然后构建一下这个project,同时就可以看到钉钉里机器人有反馈了。

参考资料

https://xu3352.github.io/linux/2017/05/01/jenkins-restart-remote-server-tomcat

最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!
Jenkins与钉钉机器人实现手机端获取当前服务日志


 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/2069631


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
8月前
|
安全 机器人 API
简单几步,钉钉机器人秒变通义千问对话机器人
通过阿里云计算巢AppFlow平台,无需编码,只需简单几步,即可将钉钉机器人转化为通义千问对话机器人。首先在灵积模型服务平台获取API Key,然后在AppFlow中配置连接器,授权并保存Webhook Url。在钉钉中创建自定义机器人,选择Outgoing功能,填写签名和Webhook地址。最后,@机器人即可开始对话。此外,还提供了通过钉钉开放平台创建机器人的步骤。AppFlow简化了集成过程,加速了企业自动化服务流程。
|
5月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
105 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
8月前
|
开发工具
钉钉新版本sdk中如何获取用户手机id
钉钉新版本sdk中如何获取用户手机id
|
5月前
|
数据采集 机器学习/深度学习 搜索推荐
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析
本文介绍了2023钉钉杯复赛A题的智能手机用户监测数据分析,包括数据预处理、特征提取、推荐模型建立与评价的Python代码实现,旨在通过用户使用记录预测APP使用情况并建立推荐系统。
85 0
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析
|
5月前
|
机器学习/深度学习 算法 数据挖掘
【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题一Python代码分析
本文提供了2023年第二届钉钉杯大学生大数据挑战赛初赛A题"智能手机用户监测数据分析"的Python代码分析,包括数据预处理、特征工程、聚类分析等步骤,以及如何使用不同聚类算法进行用户行为分析。
85 0
【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A:智能手机用户监测数据分析 问题一Python代码分析
|
7月前
|
数据管理 机器人 BI
数据管理DMS产品使用合集之如何让报表自动更新推送到钉钉机器人
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
94 3
|
7月前
|
运维 机器人 开发者
使用阿里云百炼通过appflow模板,组合钉钉机器人搭建个人知识库评测与感想
尝试构建个人助手机制,用阿里云百炼+AppFlow+钉钉机器人,花费两午休时间解决配置问题。百炼appid复制时多出空格致错,文档未提及,耗时排查。应用创建时模型选项限于max, plus, turbo,性价比高的qwen-long未上线。期望尽快修复bug和上线新模型以降低成本。附故障排查截图。
220 1
|
7月前
|
jenkins 机器人 测试技术
jenkins接入钉钉api接口自动化测试报告自动发送
该教程介绍了如何在Jenkins上实现接口自动化测试的持续集成,并将可视化报告发送至钉钉工作群。首先,确保准备好了自动化脚本。接着配置Jenkins:安装Git插件,设置源代码管理(如Git)和触发器(定时或推送)。使用Post build task插件处理构建后的报告,读取Allure的prometheusData.txt文件以获取测试结果。最后,安装Ding Talk插件,配置钉钉机器人,通过 Dingtalkchatbot 库发送测试报告信息到钉钉群。整个流程包括Jenkins的定时构建、Git仓库的监听以及自动化报告发送到钉钉的通知。
|
8月前
|
开发工具 iOS开发
如何导出iPhone手机中app共享文件夹的文件与闪退日志的收集
如何导出iPhone手机中app共享文件夹的文件与闪退日志的收集
109 1
|
8月前
|
Serverless Go API
Serverless 应用引擎产品使用之在阿里云Serverless中,我想在钉钉机器人中使用函数计算的签名认证如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。