设为首页 收藏本站
查看: 1313|回复: 0

[经验分享] Jenkins与钉钉机器人实现手机端获取当前服务日志

[复制链接]
发表于 2018-9-3 11:58:17 | 显示全部楼层 |阅读模式
  马上要过年了,各位运维们除了因为买不到回家的火车票而嚎嚎大哭之外也开始扩容服务器和提前调整监控值,目的就是为了过一个消停的春节。可是这毕竟十天左右不在公司,要是模块真出了什么意外肯定没法第一找到日志分析问题,毕竟这几天都在串门拜年和醉生梦死中度过,走到哪都要再背一个笔记本实在太不方便了。
  那么这个时候,我就琢磨使用手机端来启动服务器里脚本,让这个脚本可以去获取当前的日志,然后再把结果返回到手机端。这样就不用到哪里都带那个一看就很扫兴的公司笔记本电脑了。
  使用手机端启动服务器里脚本?我又不会开发android和ios,那么肯定就要使用第三方工具,我条件反射的想到了jenkins,因为jenkins是用手机可以登录的,那么在手机端得到结果用什么呢?在微信公众号和钉钉机器人里,我选择了钉钉机器人。

创造钉钉机器人
  我的钉钉版本是4.2.6.37,首先在左上角头像的三角菜单有一个机器人管理,如图:
DSC0000.jpg

  然后选择自定义机器人,给它起个名又换一个图标之后,添加到一个群聊里,如图:
DSC0001.jpg

  添加的时候,这个机器人会生成一个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()
  

  直接执行这个脚本,就会看到我刚新建的钉钉机器人在群聊里说话了。
DSC0002.jpg


机器人搭配nginx
  上面那个脚本已经可以初步实现我们的目的,但是有一个缺点,就是正文内容不能过长。但是我想多打印一点日志,至少50行,怎么办?我想了想,可以把日志放进nginx的一个网页里,然后用钉钉机器人反馈这个网页地址啊,这样内容想写多少就可以写多少了。
  假设我现在获取到的日志的文件写进一个叫chairmanmao.html里,在浏览器打开看是这样的:
DSC0003.jpg

  那么上面那个机器人的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()
  

  执行这个脚本可以看到机器人发送的信息如下:
DSC0004.jpg

  然后打开这个网址,就看到完整的网页信息:
DSC0005.jpg

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

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

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

  在构建那一步,选择Execute Shell,然后里面写上具体的shell命令,如果在上面使用了参数,那么参数就可以在这里使用,我的脚本里是没有ip这个参数的,在图里写$ip就是做一个例子讲解一下用法而已:
DSC0008.jpg

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

  点击这个#1,选择控制台输出,就能看到具体的操作结果了,跟在shell界面里执行的效果差不多的。可见操作成功,目的已经达到了!
DSC00010.jpg

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

参考资料
  https://xu3352.github.io/linux/2017/05/01/jenkins-restart-remote-server-tomcat
  最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!
DSC00011.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-562023-1-1.html 上篇帖子: 设置Jenkins使用Karma和Eslint进行单元测试和Lint检查 下篇帖子: jenkins自动同步配置文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表