利用GitHub Actions 监控网站- Upptime
前阵子在网络上看到一个很酷的开源项目: Upptime
每隔一段时间用GitHub Actions 看网站能否访问,若不能访问就用GitHub Issues 回报异常事件,使用GitHub Pages 产生服务状态的页面.
GitHub Actions 简介
GitHub Actions是GitHub上的一个自动化服务,你可以把脚本放到上面,当特定事件发生时,自动执行你的脚本。
以Upptime来说,预设是每隔五分钟访问你的网站一次(实际上由于GitHub的限制,间隔可能会更长),同时也会记录每次的response time,让你在页面上看历史纪录等等。
这些动作都写在Actions的脚本中,机器都会自己执行,完全不用动到一根指头。
介绍完之后,就来开始部署Upptime吧。
创建GitHub Repo
- 进入Upptime的repo
- 点击 Use this template
- 创建repo
* 输入repo name
* 勾选 Include all branches
* 点击 Create repository from temple
等一阵子后,就会复制一样的repo到你的帐号下
设置GitHub Pages
- 到你的repo,点击 Settings
- 往下找到GitHub Pages 的Source
- Branch 设为 gh-pages
- 点击 Save
设置Repository Secret
为了让Upptime有commit和publish网页的权限,需要设定Personal Access Token
- 点击自己的Profile picture > Settings
- 点击左侧的Developer settings > Personal access tokens > Generate new token
- 新增token
- Note: upptime
- Select scopes:勾选repo和workflow
- 点击 Generate token
- 复制token
- 返回repo >Settings
点击左侧Secrets> Add a new secret > New repository secret
- 设定repo 的token
- Name: GH_PAT
- Value: 贴上刚刚复制的 token
- 点击 Add secret
更新YAML文件
Upptime使用.yml来做“集中式设置”,只要更改这个文件的设置,所有相关代码就会一起修改。
- 到你的repo,点击Code > .upptimerc.yml
- 点击铅笔按钮编辑文件
- 按照以下模版修改此文件:(方括号内是需要修改的内容,修改完之后请删除方括号)
#你的GitHub username
owner: 【GitHub username】
#你的GitHub repo name
repo: 【repo name】
#加入要监控的网站名称与URL ,可以添加多个网站
sites:
- name: 【网站名称】
url: 【URL】
#没有域名的按照以下模版填写
status-website:
#cname: demo.upptime.js.org (移除)
baseUrl: /upptime
#有域名的按照以下模版填写
status-website:
cname: 【你的域名】
#自定义状态页面的navbar名称与链接
navbar:
- title: 【名称】
href: 【链接】
查看GitHub Actions
设定好.upptimerc.yml后,Actions就会自动开始运行(黄圈在转)。运行成功会显示绿色的勾,运行失败会显示红色的叉。
如果发现Actions没运行,或是想要让它马上执行,就点击左侧的Setup CI> Run workflow > Run workflow
查看Status Website
你的状态页面URL是:https://【user_name】.github.io/【repo_name】/
或是可以到repo > Settings > GitHub Pages查看URL
点击URL后,我们来到了状态页面,页面分成三个区块。
Active Incidents 显示目前的异常事件,Past Incidents 显示过去的异常事件,Live Status 可以切换五种response time 图形。
进阶操作
自定义运行时间
Upptime有七个Workflows,只要把下面这段粘贴到.upptimerc.yml,就可以自定义Workflow的时间点
workflowSchedule:
graphs: "0 0 * * *"
responseTime: "0 23 * * *"
staticSite: "0 1 * * *"
summary: "0 0 * * *"
updateTemplate: "0 0 * * *"
updates: " 0 3 * * *"
uptime: "*/5 * * * *"
自定义状态页面
Status Website预设是英文的,如果你想要改成其他语言,可以把要修改的部分粘贴到.upptimerc.yml
例如:
i18n:
activeIncidents: 活动事件
allSystemsOperational: 所有系统都可以正常运行
incidentReport: "事件 #$NUMBER 报告 →"
activeIncidentSummary: 在 $DATE 打开,有 $POSTS 个帖子
incidentTitle: 事件 $NUMBER 的详细信息
incidentDetails: 事件详细信息
incidentFixed: 已修复
incidentOngoing: 正在进行
incidentOpenedAt: 开始于
incidentClosedAt: 结束于
incidentSubscribe: 订阅更新
incidentViewOnGitHub: 在 GitHub 上查看
incidentCommentSummary: 由 $AUTHOR 在 $DATE 发布
incidentBack: ← 返回所有事件
pastIncidents: 过去的事件
pastIncidentsResolved: $POSTS 个问题在 $MINUTES 分钟内得到解决
liveStatus: 实时状态
overallUptime: "总体正常运行时间: $UPTIME"
overallUptimeTitle: 总体正常运行时间
averageResponseTime: "平均响应时间: $TIMEms"
averageResponseTimeTitle: 平均响应时间
sevelDayResponseTime: 7 天响应时间
responseTimeMs: 响应时间(毫秒)
ms: 毫秒
loading: 加载中
navGitHub: GitHub
footer: gd1214b保留所有权利。 Copyright © 2021 gd1214b. All Rights Reserved.
rateLimitExceededTitle: 超出速率限制
rateLimitExceededIntro: 您已超过一小时内可以执行的请求数,因此您必须等待才能再次访问此网站。或者,您可以添加 GitHub 个人访问令牌以继续使用本网站。
rateLimitExceededWhatDoesErrorMean: 这个错误是什么意思?本网站使用 GitHub API 访问有关我们网站状态的实时数据。默认情况下,GitHub 允许每个 IP 地址每小时 60 个请求,您已经消耗了这些请求。
rateLimitExceededErrorHowCanFix: 我该如何解决?
rateLimitExceededErrorFix: 您可以再等一个小时,您的 IP 地址限制将恢复。或者,您可以添加您的 GitHub 个人访问令牌,这将为您提供每小时额外 5,000 个请求。
rateLimitExceededGeneratePAT: 了解如何生成个人访问令牌
rateLimitExceededHasSet: 您有一个个人访问令牌集。
rateLimitExceededRemoveToken: 删除令牌
rateLimitExceededGitHubPAT: GitHub 个人访问令牌
rateLimitExceededCopyPastePAT: 复制并粘贴您的令牌
rateLimitExceededSaveToken: 保存令牌
errorTitle: 发生错误
errorIntro: 尝试获取最新状态详细信息时出错。
errorText: 您可以稍后再试。
errorHome: 转到主页
pastScheduledMaintenance: 过去的预定维护
scheduledMaintenance: 定期维护
scheduledMaintenanceSummaryStarted: 从 $DATE 开始,持续 $DURATION 分钟
scheduledMaintenanceSummaryStarts: 从 $DATE 开始,持续 $DURATION 分钟
startedAt: 开始在
startsAt: 开始于
duration: 持续时间
durationMin: $DURATION 分钟
incidentCompleted: 已完成
incidentScheduled: 已预定
url: "链接"
status: "状态"
history: "历史"
responseTime: "响应时间"
uptime: "正常运行时间"
up: "🟩 正常运行"
degraded: "🟨 运行缓慢"
down: "🟥 停机"
responseTimeGraphAlt: "响应时间图像"
responseTimeDay: "24 小时响应时间"
responseTimeWeek: "7 天正常运行时间"
responseTimeMonth: "30天的正常运行时间"
responseTimeYear: "1年的正常运行时间"
uptimeDay: "24 小时正常运行时间"
uptimeWeek: "7 天正常运行时间"
uptimeMonth: "30天的正常运行时间"
uptimeYear: "1年的正常运行时间"
liveStatusHtmlComment: "<! -实时状态- >"
degradedPerformance: "🟨 性能降低"
completeOutage: "🟥 全部停机"
partialOutage: "🟧 部分停机"