Vol.042026年5月9日
Logged2 min · SoraEndo
Process

個人サイトの観測 3 点セット(GA4 + Sentry + 軽量ログ)

読まれているか / 壊れていないか / あとから追えるか。それぞれに 1 つずつツールを当てる、過剰でない観測の組み方。

SoSoraEndo2026年5月9日2 min903

個人サイトに観測は要るか

「個人ブログにモニタリングなんて要らない」と思っていた時期があった。1 度本番が 6 時間ダウンしているのに気付かず にいて考えを変えた。

個人サイトでも観測は要る。ただし、3 点セット で十分。これ以上は過剰。

3 点セット

私が運用している組み合わせ:

  1. GA4 — 訪問数 / セッション / 流入元 / 読了率
  2. Sentry — フロント + バック両方の error
  3. 軽量ログ — Rails / Next.js のリクエストログを 7 日 retention で保管

それぞれの役割が違うので、3 つとも要る。

GA4: 「読まれているか」

GA4 で見る指標は 4 つに絞る:

  • アクティブユーザー (週次)
  • セッション数 / 平均エンゲージメント時間
  • 流入元 (Search Console / Twitter / direct)
  • 読了率 (scroll event を仕込んで 90% 到達で計測)

それ以上の数字は最初は見ない。4 つの指標だけで月次レビューが回る

スクロール 90% を計測するコード(Next.js):

useEffect(() => {
  const handler = () => {
    const scrolled = window.scrollY + window.innerHeight
    const total = document.body.scrollHeight
    if (scrolled / total >= 0.9 && !window.__read90) {
      window.__read90 = true
      window.gtag?.('event', 'read_90', { post_slug: slug })
    }
  }
  window.addEventListener('scroll', handler)
  return () => window.removeEventListener('scroll', handler)
}, [slug])

これで「読了率」が GA4 のイベント数として記録される。月次に「最後まで読まれた記事 トップ 5」が見える。

Sentry: 「壊れていないか」

個人サイトは平日昼間に問題が起きると気付かない。Sentry の Slack 通知 が無いと事故が滞る。

# backend/Gemfile
gem 'sentry-rails'
gem 'sentry-sidekiq'
// frontend/sentry.client.config.ts
import * as Sentry from '@sentry/nextjs'

Sentry.init({
  dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
  tracesSampleRate: 0.1,
  environment: process.env.NODE_ENV,
})

無料枠(月 5000 events)で個人サイトには十分。私は 1 ヶ月で 10〜30 events しか出ないので、無料枠を超えたことがない。

設定で大事なのは Slack 通知の閾値:

  • 新規 issue: 即通知
  • regression: 即通知
  • 既存 issue の event 増加: 通知しない(通知疲れ防止)

軽量ログ: 「あとから追えるか」

GA4 と Sentry だけだと「特定 URL に何件アクセスがあったか / どの順序でリクエストが来たか」が追えない。これを補うのが Rails / Next.js のリクエストログ。

# backend/config/environments/production.rb
config.lograge.enabled = true
config.lograge.formatter = Lograge::Formatters::Json.new

JSON で吐かれた log を 7 日 retention で CloudWatch Logs / Vector / journald どれかに流す。EC2 の小型インスタンスなら journald で十分:

journalctl -u rails --since "1 day ago" | grep '"controller":"PostsController"'

ログ量は個人サイト規模なら 1 日 10〜50MB。journald の retention 設定(/etc/systemd/journald.confMaxRetentionSec=7day)で 7 日分で 350MB 程度。EC2 の 8GB ストレージで余裕。

やらないこと

意図的に入れないもの:

  • Datadog / New Relic: 月 $15+ で個人サイトには高すぎ
  • Prometheus / Grafana: 構築工数が観測価値を超える
  • PostHog / Amplitude: GA4 で十分

「自分のサイトに何が起きているか」を見る目的なら、GA4 + Sentry + lograge で必要十分。

月次レビューのテンプレ

毎月 1 日の朝 5 分で見る数字(メモアプリにテンプレ化):

📅 YYYY-MM 月次サイト指標
- アクティブユーザー: ___ (前月比 ___%)
- セッション: ___ / 平均 ___ 秒
- 上位流入元: 1) ___ 2) ___ 3) ___
- 読了率トップ 3: 1) ___ 2) ___ 3) ___
- Sentry: 新規 issue ___ 件 / 既知 ___ 件
- 気付き: ___
- 来月の方針: ___

5 分で書ける形にしておくと、続く。

まとめ

個人サイトの観測 3 点セット:

  1. GA4 — 読まれているか
  2. Sentry — 壊れていないか
  3. 軽量ログ — あとから追えるか

それぞれが別の質問に答える。3 つで質問が出尽くす のがポイント。これ以上の観測は、規模が大きくなったときの宿題。

観測は「気付ける状態を作る」こと。完璧な可視化ではなく、最低限の網。

Tags

Reaction

Share

X (Twitter)