Prometheus+微信实时报警模块的实现与Docker部署

栏目: 数据库 · 发布时间: 6年前

内容简介:对很多公司而言,保证服务可用,在服务不可用时报警到相关服务负责人提醒其及时修复,是非常重要的一件事。在我司,看服务可不可用,是分配给员工们还停留在人眼观察阶段。由行政人员安排轮流值班,每个人负责两周。每人两周的值班表

对很多公司而言,保证服务可用,在服务不可用时报警到相关服务负责人提醒其及时修复,是非常重要的一件事。在我司,看服务可不可用,是分配给员工们还停留在人眼观察阶段。由行政人员安排轮流值班,每个人负责两周。

Prometheus+微信实时报警模块的实现与 <a href='https://www.codercto.com/topics/20577.html'>Docker</a> 部署

每人两周的值班表

我觉得这个事情由人来看有三个缺点:

  1. 浪费了人力,值班的人不能全心全意把心思放到工作上。
  2. 报警不够及时,值班人员不可能时刻将注意力放在这上面。
  3. 值班人员只是将异常的服务截图发到群里,有可能不知道通知谁来处理,且真实的责任人看到这个截图又需要一定时间。

这眼看着很快就要轮到我了,我比较 ,于是就找 旁门左道 来替我处理这件事了。

Prometheus

普罗米修斯介绍

Prometheus(普罗米修斯) 是一套开源的 监控/报警/时间序列 数据库的组合,由 SoundCloud 公司开发。

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker。

Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。

Prometheus+微信实时报警模块的实现与Docker部署

普罗米修斯架构图

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附录于文末)

反响和未来工作

服务投入使用第一天,值班人员觉得没他什么事了,我就觉得我做这项工作是值得的,减轻了所有人值班的压力。

Prometheus+微信实时报警模块的实现与Docker部署

报警样例与值班人员的反响

现在遇到的问题是报警给很多人,后面想实现一个基于订阅的点对点推送应用。

#附录 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部署》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

A Byte of Python

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》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具