yumenomatayume's blog

やる気を出す必要はない

GitHubだけでウェブサイトの死活監視ができる【Upptime】を使ってみました

Upptimeとは、OSSの死活監視ソフトウェアです。

upptime.js.org

GitHubのサービス(GitHub Actions,GitHub Pages,GitHub Issues)のみを使って、サービスごとに以下のような死活監視を行うことができます。

使用するGitHubのサービス 機能
GitHub Actions 5分毎に特定のWebサイト監視
GitHub Pages 監視ステータスを表示するWebサイト
GitHub Issues サイトがDownした時の報告

その他にも、監視するHTTPステータスコード、Slackやメール、SMS通知などを設定することができます。

私は、サイト監視に「UptimeRobot」と言うSaaSの無料プランを使っていますが、

  • 「自身が運営しているサイトの監視をソースコード管理したい」
  • OSSで完全無料で使える監視サイトを自分で構築したい」

と言う人には「Upptime」が向いているかなと思います。

(ちなみに、UptimeRobotはこちら)

uptimerobot.com

それでは自身のリポジトリを作成して、Upptimeを構築してみます。

Upptimeを構築する

公式サイトGetting startedに沿って進めていきます。
簡単に構築することが出来て、10分あればデフォルトの状態を作成することができます。

リポジトリ作成

github.com

上記のリポジトリに移動して、「Use this template」をクリックします。

Upptime formal repotitory
Upptime formal repotitory

画面が遷移したら、以下の設定をします。

  • Repository name: 任意でOK
  • Include all branches: チェック

Create Upptime repository own from template
Create Upptime repository own from template

この状態で「Create repository from template」をクリックすると、
「Repository name」で入力した名前で、自身のリポジトリが作成されます。

作成したリポジトリに移動したら、必要な設定をしていきます。
まずはGitHubのWeb上で行う設定をしていきます。

GitHub Pages設定

UpptimeのWebサイトは、デフォルトでgh-pagesブランチに作成されます。
このブランチをGitHub Pagesで公開する設定をします。

リポジトリの「Settings」にあるGitHub Pagesの設定に移動します。
「Source: gh-pages /(root)」で「Save」をクリックします。

Setting branch of GitHub Pages
Setting branch of GitHub Pages

Secrets設定

Upptimeで使用されるGitHub Actionsでは、監視やWebサイトの作成だけでなく、リポジトリ更新も行います。

つまり、GitHub Actionsの処理中にリポジトリを編集する権限が必要になるので、Actionsで使用するPAT(Personal Access Token)を作成する必要があります。

Personal Access Token の作成

GitHubのサイトから、右上のアイコンをクリックして「Settings」を開きます。

GitHub Personal Settings
GitHub Personal Settings

次に、「Developer settings」 > 「Personal access tokens」に移動して、「Generate new token」をクリックします。

Generate Personal Access Token
Generate Personal Access Token

GitHubのパスワードが求めらるので、入力すると以下の画面になります。

Setting Personal Access Token
Setting Personal Access Token

「Note」には、何のtokenであるか分かるような名前を入力します。
(私は「upptime」とだけ入れました)

「repo」と「workflow」にチェックを入れたら、画面下までスクロールして、「Generate token」をクリックするとtokenが作成されます。

PAT Generated
PAT Generated

このtokenはリポジトリの設定に必要となるので、メモっておきましょう。

また、このtokenがあればリポジトリにアクセスできてしまうので、取り扱いには注意してください。

Repository Secrets

作成したPATをRepository Secretsに登録します。

リポジトリに戻って、「Settings」 > 「Secrets」の順に開きます。

Repository Secrets
Repository Secrets

「New repository secret」をクリックして、

  • Name: GH_PAT
  • Value: 先ほど作成したPAT

を入力し、「Add secret」をクリックします。

Add Secret
Add Secret

以上で、リポジトリに関する設定は完了です。

設定ファイルの修正

Upptimeの設定は、リポジトリ配下にある.upptimerc.ymlの1つのファイルで定義されています。
masterブランチでこのファイルを修正することで、全体の設定をすることが出来ます。

私の.upptimerc.ymlは以下のようになっています。

ここでは、Upptimeを構築する上で必須となる項目を設定していきます。
変更する箇所を抜粋したものは以下になります。

owner: ymmmtym # GitHub username
repo: upptime # GitHub repository名
sites: # 監視するサイトの名前とURLをリスト形式で書く
  - name: Google
    url: https://www.google.com
status-website:
  cname: <カスタムドメイン名> # カスタムドメインを使用しない場合はコメントアウトする
  baseUrl: /<リポジトリ名> # カスタムドメインを使用する場合はコメントアウトする
  name: Upptime # 監視サイトの名前

私の場合は、ymmtym.github.ioドメインymmmtym.comと言うカスタムドメインを使っていますが、
Upptimeには使用していないので、cnameはコメントアウトしてbaseUrlをコメントインしています。

修正する内容をまとめると以下のようになります。

項目 説明
owner GitHubのユーザ名
repo リポジトリ
sites 監視するサイトのリストを name:, url: 形式で追加
(status-website) ここから監視サイトの設定
cname カスタムドメイン
baseUrl /リポジトリ
name 監視サイト名

上記の修正をしてcommitすると、"Setup CI"というworkflowが実行され、完了するとUpptimeが構築されています。

http://<GitHubユーザ名>.github.io/<リポジトリ名>にアクセスすると、Upptimeにアクセスできます。

Upptime Top Page
Upptime Top Page

サイト監視については、Upptimeのwebサイトが更新されるだけでなくREADME.mdも更新されるので、かっこいいREADMEが勝手に作成されるところも、少し気に入っています。

Upptime README
Upptime README

また、サイトがDownするとIssueが作成されます。
HTTPステータスコードと、Response Timeも書いてありますね。

Upptime Opened Issue
Upptime Opened Issue

サイトが復旧すると自動的にIssueがCloseされます。

Upptime Closed Issue
Upptime Closed Issue

さいごに

以上でUpptimeを構築することが出来ました。
デフォルトの状態ではありますが、監視の詳細設定や通知方法なども解説できればと思います。

Reference

gigazine.net