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

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

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

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

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

查看所有标签

猜你喜欢:

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

Advanced Web Metrics with Google Analytics, 2nd Edition

Advanced Web Metrics with Google Analytics, 2nd Edition

Brian Clifton / Sybex / 2010-3-15 / USD 39.99

Valuable tips and tricks for using the latest version of Google Analytics Packed with insider tips and tricks, this how-to guide is fully revised to cover the latest version of Google Analytics and sh......一起来看看 《Advanced Web Metrics with Google Analytics, 2nd Edition》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具