网页状态监控系统 Upptime 的一些高阶用法

浏览: 337 次浏览 作者: 去年夏天 分类: 佳软推荐,技术文章 发布时间: 2022-09-20 15:32

前言

最近有构建网页集群状态监视系统的需求,经过在网上的一通翻找,找到了这个十分有创意的开源项目: Upptime

利用 GitHub Actions 每隔一段时间检查网站访问情况,若不能访问就创建 Issues 来回报异常事件,通过 GitHub Pages 生成服务状态的页面。

上一篇文章《用GitHub Actions 搭建网页状态监控系统 Upptime》介绍了最基础的部署步骤,下边补充一点更高阶的用法吧


更多监视类型

upptime不仅仅可以监视普通站点http状态,还有更多类型监控项目
只需要按格式修改增加sites部分代码即可

一般HTTP状态监视(GET请求)

sites:
  - name: Google
    url: https://www.google.com
  - name: DuckDuckGo
    url: https://duckduckgo.com

一般HTTP状态监视(其他请求)

正常的请求方式都支持,比如POST,PUT,DELETE

sites:
  - name: POST to Google
    url: https://www.google.com
    method: POST
  - name: DELETE Example
    url: https://example.com
    method: DELETE
  - name: PUT Example
    url: https://example.com
    method: PUT

TCP ping 状态监视

sites:
  - name: Google DNS 1
    check: "tcp-ping"
    url: 8.8.4.4
    port: 53
  - name: Google DNS 2
    check: "tcp-ping"
    url: 8.8.8.8
    port: 53

自定义Request headers

比如一些需要cookies认证的后台页面

sites:
 - name: API endpoint
   url: https://example.com/get-user/3
   headers:
     - "Authorization: Bearer $SECRET_SITE_2"
     - "Content-Type: application/json"

自定义Request body

比如一些需要登录的后台页面

sites:
 - name: API endpoint with data
   method: POST
   url: https://example.com/login
   headers:
     - "Content-Type: application/json"
   body: '{ "password": "hello" }'

自定义站点图标

监控状态页面内站点的图标,只需要给对应项增加icon参数即可

sites:
  - name: Google
    url: https://www.google.com
    icon: https://www.google.com/favicon.ico

自定义状态代码

默认配置下,Upptim会将除了20X和30X以外的状态代码都视为站点异常,但如果你需要将40X,50X等状态代码视为正常状态,可以指定状态代码,只需要给对应项增加expectedStatusCodes参数即可

sites:
  - name: Google
    url: https://www.google.com
    expectedStatusCodes:
      - 200
      - 201
      - 404

自定义站点超时时间

默认配置下,站点响应时间超过30秒才会会视为超时,你可以自行指定超时时间,以监视网站的异常卡顿,只需要给对应项增加maxResponseTime参数即可

sites:
 - name: Slow endpoint
   url: https://example.com
   maxResponseTime: 5000

自定义返回内容监测

这个主要是用在某些会在网站异常时并不会抛出异常代码,而是通过其他措施返回200状态的定义提示网页。比如使用了某些奇怪的自定义404,502页面,前端会在后端异常时,返回正常自定义提示网页。
(这种设计其实违背了网页开发标准,自定义异常页应该正确回报状态代码+提示信息,而不是回报200代码+提示信息)
或者监测参数,key,是否过期(比如某个页面,已登录和未登录返回的内容不同,你想监控你的状态还在不在)只需要给对应项增加__dangerous__body_down参数即可

sites:
  - name: Custom down
    url: https://example.com
    __dangerous__body_down: "请登录或注册后查看"

隐藏监控站点地址,请求参数

github是个开源代码平台,这个仓库也是Public的,任何人都可以从yml文件内看到你的监控配置
但有些时候,可能你想同时监控CDN后的状态和原站点状态,但又不想暴露源站的IP,或则一些需要监控的页面需要携带认证信息才可以正常访问,你不想把认证信息公开。比如上边自定义Request headers自定义Request body中的一些请求参数

  1. 在你repo的Upptime项目中,点击 【Settings】,展开左侧的【Secrets】,点击【Actions 】 点击【 New repository secret】

  2. 增加需要隐藏的内容

– Name: 基本上可以随便写,比如site_main,key01
– Value: 写域名或者需要隐藏的请求参数
– 点击 【Add secret】

比如我想隐藏域名的情况下监视谷歌的网页
– Name: site_baidu
– Value: https://www.google.com
– 点击 【Add secret】

比如我想隐藏GET请求中需要的key
– Name: MY_API_KEY
– Value: aabbccddeeff11ppooiiuu2233
– 点击 【Add secret】

  1. 在yml文件中需要提及隐藏内容时,使用$刚才设置的Name替代。

比如我想隐藏域名的情况下监视谷歌的网页

sites:
  - name: 我说这是百度
    url: $site_baidu

比如我隐藏GET请求中需要的key

sites:
  - name: API endpoint
    url: https://example.com/get-user/3?api_key=$MY_API_KEY

这样其他人就无法看到你监视的到底是什么站点或者API的权限key了。

设置通知渠道

upptime可以在监控项目无法访问或性能降级时给你发送通知
在本文写作时支持,邮件(多种方式),短信(多种方式),Slack,telegram,Discord,Microsoft Teams

这里就以SMTP邮件和telegram为例(我默认你知道什么是SMTP邮件和telegram bot的设置)表格中汉字请替换为实际所指的内容。

telegram

  1. 在你repo的Upptime项目中,点击 【Settings】,展开左侧的【Secrets】,点击【Actions 】 点击【 New repository secret】

  2. 添加以下secret

Name Secret 备注
NOTIFICATION_TELEGRAM true 开启开关
NOTIFICATION_TELEGRAM_BOT_KEY bot的API Token 可在 @BotFather 查询
NOTIFICATION_TELEGRAM_CHAT_ID 你的user ID 可在 @userinfobot 查询

Email

  1. 在你repo的Upptime项目中,点击 【Settings】,展开左侧的【Secrets】,点击【Actions 】 点击【 New repository secret】

  2. 添加以下secret

Name Secret 备注
NOTIFICATION_EMAIL true 开启开关
NOTIFICATION_EMAIL_FROM 发信邮箱地址
NOTIFICATION_EMAIL_TO 收信邮箱地址
  1. 添加以下secret
Name Secret 备注
NOTIFICATION_EMAIL_SMTP true SMTP发信渠道开关
NOTIFICATION_EMAIL_SMTP_PORT SMTP服务器端口
NOTIFICATION_EMAIL_SMTP_HOST SMTP服务器地址
NOTIFICATION_EMAIL_SMTP_USERNAME SMTP登录用户名
NOTIFICATION_EMAIL_SMTP_PASSWORD SMTP登录密码
一条评论
  • Et

    2023-06-18 01:36

    多谢大佬的这两篇教程!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据