2 年前くらいに作っていたけどどこにも書いてなかったのでちょっと整備してブログに書いておく。CRE になって数ヶ月した頃に「そういえば仕組みは理解してるけど自分で Mackerel のチェックプラグインを作ったことがなかったな」と思い立ち作ってみたもの。
go-check-css-selector は指定された URL にアクセスし、HTML 内に指定した CSS セレクタにマッチする要素が存在するかをチェックするシンプルなプラグイン。セレクタで指定した要素が見つかれば OK、見つからなければ CRITICAL、URL へのアクセスや HTML のパースでエラーが発生したら UNKNOWN を返す。
使い方は以下のような感じ。
[plugin.checks.check-css-selector-sample] command = ["go-check-css-selector", "-U", "https://example.com", "-S", "div.content"]
実装としては素朴で GET した HTML をパースして要素を探しているだけ。もうちょっと高度なことをやろうとするとヘッドレスブラウザを使う必要が出てきそう。というのはすでにチームメンバーの
id:kmuto が Playwright と mkr wrap の組み合わせでやっていた。
Go のアプリケーションとしてチェックプラグインを書く場合は checkers パッケージを使うと本当に簡単に書ける。チェック結果のステータスやメッセージの生成、標準出力への出力も全部やってくれるので、実装はチェックロジックに集中できる。
年末にリポジトリの棚卸しをしていてこのプラグインの存在を思い出したので記事を書いてみている。久しぶりに見返してみたらコードに TODO コメントが残っていたり、GitHub のリリース周りの設定もそういえばしたことがなかったのでついでに整備した。goreleaser はドキュメントを見つつ設定したら特に詰まるところもなかった。今回は tag は手で打ったけど、リリースワークフローをもうちょっと整備すればさらに楽になりそう。Immutable Releases ってやつを有効にするといいと見たのでついでに有効にしてみた。