内容简介:对很多公司而言,保证服务可用,在服务不可用时报警到相关服务负责人提醒其及时修复,是非常重要的一件事。在我司,看服务可不可用,是分配给员工们还停留在人眼观察阶段。由行政人员安排轮流值班,每个人负责两周。每人两周的值班表
对很多公司而言,保证服务可用,在服务不可用时报警到相关服务负责人提醒其及时修复,是非常重要的一件事。在我司,看服务可不可用,是分配给员工们还停留在人眼观察阶段。由行政人员安排轮流值班,每个人负责两周。
每人两周的值班表
我觉得这个事情由人来看有三个缺点:
- 浪费了人力,值班的人不能全心全意把心思放到工作上。
- 报警不够及时,值班人员不可能时刻将注意力放在这上面。
- 值班人员只是将异常的服务截图发到群里,有可能不知道通知谁来处理,且真实的责任人看到这个截图又需要一定时间。
这眼看着很快就要轮到我了,我比较 懒 ,于是就找 旁门左道 来替我处理这件事了。
Prometheus
普罗米修斯介绍
Prometheus(普罗米修斯) 是一套开源的 监控/报警/时间序列 数据库的组合,由 SoundCloud 公司开发。
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker。
Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。
普罗米修斯架构图
Alertmanager模块的扩展 Email VS Wechat
普罗米修斯 Alertmanager模块 提供了 Email 通知,但是用户查Email不频繁,而且很容易将用户邮箱塞满,以至于后面被邮箱系统判为垃圾邮件,失去了通知的意义。
和 邮件 形成对比的是 微信 ,微信似乎已经成了大部分人手机里使用最频繁的软件了,而且有桌面客户端,即使不看手机,在电脑上工作也能收到消息。一收到消息,特别是@到自己的消息,好奇心会趋势用户打开,看到了自己的服务出现了错误,在群聊里丢了脸,会尽力尽快修复,这也达到了及时通知的目的。
wechaty
之前美团和饿了么红包在微信里抢大红包,我那时候第一次知道微信有自动分组、回复和对消息的监听的框架。我在GitHub里搜到了一个叫 wechaty 的开源微信SDK,它基于微信公开的API,对接口进行了一系列的封装,提供一系列简单的接口,然后开发者可以在其之上进行微信机器人的开发。
最终促使我使用这个库的原因很简单,是一个墙外用户的评价:**”太好用,好用的想哭”。没想到我后面在墙内部署的时候,真的哭了。
Wechaty.instance() .on('scan', (url, code) => { console.log(url) let loginUrl = url.replace('qrcode', 'l') QrcodeTerminal.generate(loginUrl) }) .on('login',user => {console.log(`User${user}logined`)}) .on('message', async (message) => { const contact = message.from() const content = message.text() const room = message.room() if(room.toString() == "Room<群聊名>"){ heliumMessage = message heliumRoom = room } }).start() server.post('/sendMsg',function(req,res){ if(heliumMessage){ heliumMessage.say(req.body.msg) } }).listen(3000)
配合node.js用起来真挺方便的,如果起在本地,已经可以正常的工作了。虽然有个小瑕疵,就是需要在群聊里先说一句话,才能找到这个群聊,因为群聊跟联系人还不同。
部署在docker端
因为本地机器的IP地址是会发生变化的,因此需要将这个服务部署到docker端,且wechaty宣称支持docker端部署,于是就进行了一番尝试。
部署到docker,首先遇到的问题的是无法将二维码或url实时传出来,除非通过查询log文件。于是就在代码里集成了邮件模块,将二维码的url以邮件的形式发出来。url里有个坑,刚开始发出来的url是经过替换的,需要将/r/换成/qrcode/。
wechaty是需要 红芯浏览器(chromium)内核 的,需要科学的上网方式,整个Image build完之后居然有2G。node的版本也需要v8,v10检查会严格一些,跑不通。
(dockerfile附录于文末)
反响和未来工作
服务投入使用第一天,值班人员觉得没他什么事了,我就觉得我做这项工作是值得的,减轻了所有人值班的压力。
报警样例与值班人员的反响
现在遇到的问题是报警给很多人,后面想实现一个基于订阅的点对点推送应用。
#附录 Dockerfile
FROM ubuntu:18.04 ENV DEBIAN_FRONTEND noninteractive ENV WECHATY_DOCKER 1 ENV LC_ALL C.UTF-8 ENV NODE_ENV $NODE_ENV ENV NPM_CONFIG_LOGLEVEL warn # Installing the 'apt-utils' package gets rid of the 'debconf: delaying package configuration, since apt-utils is not installed' # error message when installing any other package with the apt-get package manager. # https://peteris.rocks/blog/quiet-and-unattended-installation-with-apt-get/ RUN apt-get update && apt-get install -y --no-install-recommends \ apt-utils \ bash \ build-essential \ ca-certificates \ curl \ coreutils \ ffmpeg \ figlet \ git \ gnupg2 \ jq \ libgconf-2-4 \ moreutils \ python-dev \ shellcheck \ sudo \ tzdata \ vim \ wget \ && apt-get purge --auto-remove \ && rm -rf /tmp/* /var/lib/apt/lists/* RUN curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - \ && apt-get update && apt-get install -y --no-install-recommends nodejs \ && apt-get purge --auto-remove \ && rm -rf /tmp/* /var/lib/apt/lists/* # https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md # https://github.com/ebidel/try-puppeteer/blob/master/backend/Dockerfile # Install latest chrome dev package. # Note: this also installs the necessary libs so we don't need the previous RUN command. RUN apt-get update -q RUN sudo apt-get install -y chromium-browser xvfb libpango1.0-0 fonts-liberation libappindicator1 libdbusmenu-glib4 libdbusmenu-gtk4 libindicator7 indicator-application RUN apt-get install -f -y gconf-service gconf2-common libgconf-2-4 gconf-service-backend RUN wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb RUN sudo dpkg -i google-chrome-stable_current_amd64.deb RUN nohup Xvfb :0 -ac -screen 0 1024x768x24 & RUN export DISPLAY=0:0 RUN echo Asia/Shanghai > /etc/timezone && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN apt-get update && apt-get install -y tar WORKDIR /opt RUN mkdir -p /opt/wechat_robot COPY package.json /opt/wechat_robot/ COPY wechat.js /opt/wechat_robot COPY start.sh /opt/wechat_robot RUN mkdir -p /opt/wechat_robot/node_modules COPY node_modules/ /opt/wechat_robot/node_modules/ RUN chmod +x /opt/wechat_robot/start.sh ENTRYPOINT [ "/bin/bash", "/opt/wechat_robot/start.sh" ]
以上所述就是小编给大家介绍的《Prometheus+微信实时报警模块的实现与Docker部署》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Jenkins + Spring Boot + Maven 多模块部署
- TIMO 后台管理系统 v2.0 发布,带来全新的项目结构,支持前后台模块分离部署!
- Yii2基础版程序多模块二级域名部署方案以及urlManager对二级域名绝对地址的改造方法
- Yii2基础版程序多模块二级域名部署方案以及urlManager对二级域名绝对地址的改造方法
- linux 部署golang 项目(直接部署和基于nginx部署)
- 部署策略对比:蓝绿部署、金丝雀发布及其他
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
A Byte of Python
Swaroop C H / Lulu Marketplace / 2008-10-1 / USD 27.98
'A Byte of Python' is a book on programming using the Python language. It serves as a tutorial or guide to the Python language for a beginner audience. If all you know about computers is how to save t......一起来看看 《A Byte of Python》 这本书的介绍吧!