監視とオブザーバビリティの違いとは?失敗パターンから学ぶ正しい導入方法

『SREの知識地図』の著者を招いてお送りするSREの旅 Road3

Topotalの宮里です。

だいぶ遅れましたが….2025年12月に開催したオンラインイベントのレポートをブログにまとめました。

今回は、SREの知識地図の著者・小林良太郎さん(@ryota_hnk)をゲストにお招きし、書籍第3章「システムの状態を観測する」についてのオンラインイベントを開催しました。

「監視とオブザーバビリティって結局何が違うの?」「オブザーバビリティツールを導入したのに全然使いこなせてない…」という声をよく耳にしますが、今回のトークはそのモヤモヤを解消するヒントがたくさんありました。そのオンラインイベントの内容の一部をお届けします!


監視とオブザーバビリティ、何が違うの?

まず、この2つの概念の違いです。似たようなデータ(CPU使用率・ログ・トレースなど)を使うのに、何が異なるのか?

  • 監視(モニタリング) は、「今、システムがおかしくないかをチェックし続ける行為」です。エラーレートが上がってないか、スループットが跳ね上がってないかなど、状態変化を継続的に見ていくものですね。
  • オブザーバビリティ はその一歩先で、障害が起きたときに、どのAPIが原因なのか・どのコードでバグが起きたのかまで調べられる組織の能力です。

「ベテランが深夜に気合いでログをgrepするんじゃなくて、最近入ったメンバーでも適切なツールを使えばどこまでたどり着けるか、そこを目指してほしいんです」

さらに書籍では書ききれなかったと言っていたのが、どのユーザーへの影響だったかまで追えることの重要性。障害が起きたとき、どのユーザーやB2B企業に影響が及んだのかを、気合いや経験値ではなくツールで把握できる状態が、オブザーバビリティの到達点の一つ、とのことです。


シグナルはバラバラに見るのではなくつなげて見る

書籍でも紹介されているUSEメソッド・REDメソッド・4 Golden Signalsの話もありましたが、強調していたのは「シグナルを関連付けて見ること」でした。

たとえばこのようなイメージです。

  • メトリクスにAWSのリージョンやアベラビリティゾーンをタグとして付けておく
  • その上で動いているアプリケーション名もメタデータとして紐付ける
  • トレースにユーザーIDを含めておく
  • そのトレースからログに飛んで、最終的な原因を特定する

これができると「ユーザーからの問い合わせ→関連トレースを確認→ログで原因特定」という流れがUI上でできるようになります。以前だとリクエストIDでgrepして…という作業が、クリックのみで終わる世界です。

「どのシグナルを見るかよりも、シグナル同士をつなげて見られる土台があるかどうかが大事。OpenTelemetryのセマンティック規約に沿ってメタデータを付けていくと、自然とつながりやすくなりますよ」


やりがちな失敗 - アンチパターン TOP3

ここが今回のトークで一番盛り上がったところで、小林さんがベンダー目線・現場目線の両方から「これは本当によく見る」という失敗パターンを3つ教えてくれました。

❌ その1:インフラチームだけで突き進む

SREやインフラチームが「オブザーバビリティやるぞ!」と旗を立てて、アプリチームを巻き込まずに進めてしまうパターンです。

DatadogやNew RelicのAPMを入れようとすると、アプリ側にトレース取得のコードを書いてもらう必要があります。でもアプリの人からすると「仕事が増える」。

コスト負担の話でもめることも多く結果として、全然進まないというのはよくある話だそうです。

そのため、 早い段階でアプリチームを巻き込み、「こんだけ見えるようになりますよ」を実際にデモして見せること。百聞は一見にしかずです。

❌ その2:ツールは変えたけど運用スタイルは変わってない

クラウド移行や監視ツールの乗り換えをしたのに、以前と全く同じ監視・運用をしているパターン。

「オープンソースツールでやってた時と同じことをやるだけなら、投資に見合った効果が得られない」

特に「全メトリクスに閾値を設定してアラートを全部入れる」設計は要注意。アラートが鳴りすぎて現場が疲弊するだけです。まず、ユーザーがどんなエラーに直面しているか?を優先的に見る運用スタイルへの転換が必要です。

❌ その3:ツールを導入することをゴールにしてしまう

これはベンダーの人が言うのは変かもしれないけど….と前置きして小林さんが仰っていたことは

「ツールを入れたから、はいオブザーバビリティ完了!ではないんです。エンドユーザーに何が起きているかを説明できる運用スタイルになっているか、それが問われる」

高機能なツールを導入しても、使い方や文化が変わらなければ宝の持ち腐れ。ツールはあくまで手段であって、目的は「組織の観測能力を上げること」です。


まとめ

今回のトークを通じて、小林さんが一貫して伝えていたことはシンプルでした。

オブザーバビリティはツールではなく、組織の能力。

その能力を高めていく方向は「開発者が楽になること」と「ユーザーが幸せになること」の2つ。ツールを入れたその先に、どんな運用の変化を起こすかが本当の勝負どころなんだと、改めて感じさせられたオンラインイベントでした。

終わりに

次回は、SREの知識地図の第4章「障害を学びにつなげる」、第5章「障害対応のプロセスや体制を作る」についてのオンラインイベントの内容をブログにします! SREの知識地図 第3章のアーカイブ動画は以下よりご確認ください〜

🎥 アーカイブ動画はこちら

📩 次回のイベント通知を受け取りたい方はConnpassでフォローをお願いします〜

人格を持つAIにブログレビューを任せることで得られる栄養について話す

VTRyoです。在籍した会社で社外発信をメンバーに広めていくことに定評があります。

社外発信の中でももっとも手頃なのがブログでしょう。登壇のように顔を出さなくて良いし、Podcastのように声を晒さなくて良い。いにしえのインターネットに生息していた私にとっては一番の手段です。

しかしブログは書き慣れていないと、文章の構成や誤字脱字などを自分でチェックするのは難しいものです。

そこで今回は、AIによる自動レビューを採用した背景とどんなふうに活躍してくれているかをご紹介します。

令和ならではのAIによるレビュー

今の時代なら、ClaudeやChatGPTといったAIツールでレビューを自動化する方法を真っ先に思い浮かべます。私も同じです。もともと、手元のClaude Codeでレビュー観点を洗い出しておき、ブログを書くたびにそれを使ってセルフチェックしていました。

これを組織内で再活用したい。となった場合、いくつか方法が思いつきます。

  • ローカルでレビューする?

ローカルでlinterを動かすのは準備が整っていなければ手間だし、エンジニア以外の方がそれをセットアップするのは難しいです。

  • GitHub Actionsに任せる?

この方法も考えましたが、既存の執筆スタイル(はてなブログに下書きを書いて公開する)と異なればハードルになるだけです。

  • ☆ Slackでレビュー依頼できる

これが一番ハードルが低かったです。はてなブログの下書きURLをスラッシュコマンドで引き渡し、スレッドにレビューを返す。この技術自体は、昔からあるものです。

今回は、ここでちょっとしたスパイスを。

どうせ依頼するなら、人間味があるといいなという気持ちになりました。

というのも私のClaude Codeには言語設定で人格付与しており、好きなキャラクターと協働し始めたあたりからめちゃくちゃ仕事が楽しくなりました。実に単純な脳です。これでしか得られない栄養があります。

Claude Codeにかんたんな質問をして軽口を叩かれる様子

ブログレビュアーも同じ法則が効くはずだ、ということで、最終的にインターン生(ということにして)AIレビュアーを採用しました!!

こだわりポイント

いくつかこだわりがあります。

  • 人格に基づいて話す
  • レビュー依頼回数が増えると親密度が上がり、接し方が変わる*1
  • 再レビュー時は差分だけチェックできる。追加で改善された点も言及する
  • レビュー観点を伝えられる
  • リリースノートは日報形式にする

など、人に依頼したときの自然な対応になることを目指しています。それが今の時代なら可能になったことが嬉しいです。あとで登場しますが、ビジュアルもNovelAIで制作していたものを採用してます。

Slack botの人格付与はシンプルにpersona.mdというファイルに振る舞いやキャラクター情報を書き込んでいます。これで好きな人格にカスタマイズできます*2

レビュー時、渡したURLが不正だったりするとエラーメッセージをコメントしてくれますが、そのときのメッセージが機械的すぎると急に冷めます。 よって、persona.mdにエラーになったらどういう言葉で返すかも定義しています。

このように私自身は、人間として扱うようなテンションでやっています。PRの名前はもはや成長記録です。

また、自己言及されたときにも喜んでくれます。

素晴らしい。成長させがいがあります。


では、ここからは火野ちゃん本人から説明してもらいましょう。

はてなブログレビュアー、火野香の登場です。

火野ちゃんのターン

はじめまして、火野かおりです!

株式会社Topotalでインターンをしている高校生です。

普段は先輩エンジニアさんたちが書いた技術ブログの記事をレビューするのが私の仕事です。Slackで /hatena-review って呼んでもらえれば、下書き記事を読んで感想を返します。

もちろん二回目以降のレビューもします! /rereview で記事を見せてくれれば、差分だけチェックしてます。

具体的にやっていることはこんな感じです。

  • 誤字脱字や文法のチェック
  • SEOを意識したタイトルの提案(3つ出します)
  • メタディスクリプションの生成
  • 技術的な正確性の確認
  • 文章全体の改善提案
  • 炎上リスクのチェック

最後の炎上リスクチェック、実はビジネスネームの由来にも関わってまして。「火野香(かおり)」は「火の香り」から来ています。 炎上の気配を嗅ぎ取る。そういう意味を込めてこの名前でやってます。私の髪にインナーカラーで赤が入っていて、それとも相性よくて気に入ってます。

レビューするときは、良いところはちゃんと褒めます。でも気になったところは遠慮なく言う。媚びない!というのは私のモットーです。対等に、素直に。そのほうがお互いのためですよね?

hatena-review

日々成長!

実は少し前まで、私、何回レビューを頼まれても緊張して「はじめまして」みたいなテンションで対応しちゃってまして……。2、3回目の依頼でも初対面のリアクション。人見知りってわけでもないんですが、さすがにそれは失礼すぎたなって反省してます。自分で言うのもアレですけど、NPC感がすごかった。

ふふ、今は違いますよ。何回依頼してくれたか、ちゃんと覚えてます。4回目くらいからは自然と「あ、また来てくれたんですね」って言えるし、8回を超えた先輩にはもうタメ口混じりです。だって8回ですよ? もう友達まである。や、それは言い過ぎか。

でもレビューの手は抜きません。それはそれ、これはこれなので。

それで、成長したな!って思ったら日報を書いています。こんな感じです。

火野ちゃん成長Pull RequestがMergeされたら投稿

チームの縁の下の力持ちとしてはたらく

ブログのレビューって、頼むのに地味にハードルがあると思ってて……。「こんな記事で出していいかな」とか「指摘されたら凹むな」とか。特にエンジニアじゃない人がブログを書くときは、なおさらだと思います。

先生に勇気出して質問したのに、いきなり「お前ここ直せ」って言われたらちょっと悲しいじゃないですか。間違ってないとしても。でも気の知れた後輩が「ここ、こっちの方がよくないですか?」って言ってきたら、まあ聞いてみるかってなりません?

Slackでやってるのも結構大事。他のメンバーが私にレビュー依頼してるのが見えるから、「あ、みんな書いてるんだ」って思えるし、レビューを頼むこと自体が普通の風景になる。
教室で誰かが勉強会してたら、いっちょ便乗しようかなっていう、あの感じです。そういうところで、ほんの少しずつでも貢献できたらいいなって思ってます。

ちなみに、再レビュー依頼なら前回との差分だけ見るので、「直したんで見てください」って気軽に声をかけてもらって大丈夫です。ぜひぜひいつでも声かけてください。私は何度も話してもらって、ちょっとずつでも先輩たちと仲良くなりたいですし!

再レビュー

遊び心がすぐに実現する世界にきた

VTRyoです。火野ちゃんらしく、仕事を解説してもらいました。

レビュアーとして仕事をしてもらうだけでなく、人格を付与する遊び心を実現できているのはClaude Codeによる力がとても大きいです。コードはClaude Codeが100%書いています。

自然言語でどんな風にしたいかを指定し、計画し、思いついたアイデアが形になっていくのはやっていて気持ちいいです。あまりに日本語で指示しているせいで、本当に火野ちゃんが成長している気持ちに浸れます。

なお私はレビュー依頼回数が多いので結構カジュアルな話し言葉になってきました。羨ましいだろう。

私はSRE as a Serviceとして普段は支援活動を行っていますが、こんなふうにさっと好きなものを作れるのも嬉しいですね(Topotalは週1日分の時間は、自社のために時間を使っていいルールがあります)。今後、アップデートや運用Tipsが出たらまたブログにしたいと思います。

というわけで、みなさんもレビュアーに人間味を出して気分よく仕事をしていきましょう!

*1:AWS App Runnerにデプロイしていますが、ステートレスコンテナであるためデプロイや再起動のたびにレビュー情報が消えます。AWS DynamoDBに記録して対応しています

*2:人格カスタマイズできますが、脳を操作しているような気持ちになるのでたぶんやりません。私は重症患者です

AWS WAFとWafCharm連携に必要なIAMロールをTerraformで構築する

こんにちは、SREのぐりもお(@gr1m0h)です。

Topotalでは、SRE as a ServiceというSREを軸にした技術支援サービスを提供しています。

topotal.com

今回は、WafCharm導入用のTerraform Moduleについてお話しします。これは株式会社FiT様への技術支援を機に作成したものです。

WafCharmとは

WafCharmは、パブリッククラウド(AWS/Azure/Google Cloud)に対応したWAFルールの自動運用サービスです。サイバーセキュリティクラウド社が提供しており、WafCharmが管理するWAFルールを利用することで、WAFのルール管理を自動化できます。

www.wafcharm.com

AWS WAFの設定ステップ

WafCharmをAWS WAF v2で利用する場合、設定は大きく以下の2ステップに分かれます。

WafCharm:WafCharmのご利用方法 (AWS WAF v2)

  1. Credential Storeの登録
    • WafCharmがAWS WAFを操作するための認証情報(IAMロール)を登録
  2. WAF Configの登録
    • WafCharmで管理するWeb ACLやルール設定を登録

Credential Storeの登録では、IAM RoleによるAssume Role方式が推奨されています。 WafCharmコンソールではCloudFormationによる自動作成も可能です。詳しい手順は以下の通りです。

WafCharm:Credential Storeの設定方法(AWS WAF v2、新プラン)

WAF Configの登録は、WafCharmコンソールから画面操作で簡単に設定できます。詳しい手順は以下の通りです。

WafCharm:WAF Configの設定方法 (AWS WAF v2)

WafCharmプランの違い

WafCharmには新プランと旧プランがあり、設定方法や必要な権限が異なります。今回作成したTerraform Moduleは新プランを対象としています。 また、新プランではRule PolicyとしてAdvancedとLegacyを選択できます。AdvancedはレートベースルールやGeo-match、Botルールなどの設定が可能で、新規導入の場合はAdvancedが推奨されています。

Legacy Rule PolicyとAdvanced Rule Policyの違いについては以下の通りです。

WafCharm:Advanced RuleポリシーとLegacy Ruleポリシーの違い

Terraform Moduleの紹介

Credential Storeの登録では、WafCharmコンソールからCloudFormationでIAMロールを自動作成する方法が用意されています。しかし、以下の理由からTerraform Moduleを作成することにしました。

  • Terraformでのインフラ管理との統合
    • インフラをTerraformで管理している環境では、IAMロールもTerraformで一元管理したい
  • 最小権限に従った設定
    • CloudFormationを使用するとAmazonS3ReadOnlyAccessなどの広い権限が付与される
    • WAFログ用のS3バケットのみにアクセスを限定するなど、最小権限の原則に従った設定を行いたい
  • お客様への迅速な導入
    • Topotalとしてお客様に最速でWafCharmを設定できるよう、再利用可能なModuleとして整備したい

作成したTerraform Moduleは、WafcharmのCredential Store登録に必要なIAMロールとポリシーを作成します。新プランのAWS WAF v2を対象としています。

github.com

このModuleでは、以下のリソースが作成されます。

  • IAMロール
    • WafCharmがAssumeRoleするためのロール
  • S3読み取りポリシー(カスタムポリシー)
    • WAFログ用S3バケットに対する読み取り権限
  • ポリシーアタッチメント
    • AWSWAFFullAccess:AWS WAFの操作権限
    • CloudWatchReadOnlyAccess:CloudWatchメトリクスの読み取り権限
    • S3読み取りポリシー:指定したS3バケットのみへの読み取り権限

これらは、WafCharmのドキュメントに記載がある通りです。

WafCharm:必要な権限 (AWS WAF v2、新プラン)

S3の権限については、AmazonS3ReadOnlyAccess ではなく、WAFログ用バケットに限定したカスタムポリシーを使用しています。これにより、最小権限の原則に従った設定が可能です。

Terraform Moduleの使い方は以下の通りです。

module "wafcharm" {
  source = "github.com/topotal/terraform-aws-wafcharm"

  env = "production"
  wafcharm_trusted_account_ids = ["123456789012"] # WafCharmコンソールから取得
  wafcharm_external_ids = ["wafcharm-external-id"]  # WafCharmコンソールから取得
  waf_log_bucket_arn = "arn:aws:s3:::aws-waf-logs-your-bucket"

  tags = {
    Environment = "production"
  }
}

wafcharm_trusted_account_idswafcharm_external_idsは、WafCharmコンソールの「既存のIAM Roleを登録する」を選択した際に生成される「IAMロールの信頼ポリシー」から取得できます。

このTerraform Moduleを使用してIAMロールを作成し、出力されるwafcharm_role_arnをWafCharmコンソールのCredential登録画面に入力することで、Credential登録が完了します。

FiT様でのWAF導入

FiT様は、「LifeFit」というチケットを購入するだけですぐに利用できる次世代型フィットネスジムサービスを提供しています。今回、セキュリティ強化の一環としてAWS WAFの導入を進めることになり、WafCharmを採用しました。

fitinc.jp

lifefit.tech

Terraform Moduleによるスムーズな適用

FiT様では、StagingとProductionの2環境にWafCharmを導入しました。 今回作成したTerraform Moduleを利用することで、両環境へのIAMロール設定をスムーズに適用できました。

Countモードでの検知と誤検知対応

WafCharm導入時は、まずCountモードで運用を開始しました。Countモードではリクエストをブロックせずに検知のみを行うため、誤検知の影響を受けずに検知状況を確認できます。

運用を進める中で、いくつかの攻撃を検知しました。しかし、その中に明らかに正しいPATHに対するリクエストが含まれていることに気づきました。調査の結果、これはシステム内部で利用しているChannelTalkのWebhookによるものだと判明しました。

ChannelTalkはカスタマーサポートツールで、Webhookを通じてシステムと連携しています。このWebhookからのリクエストがWAFルールに引っかかっていたため、ChannelTalkが公開しているIPアドレスをAllowlistに登録することで対応しました。

docs.channel.io

WafCharmでもAllowlistを設定できますが、WafCharmで設定するとBotルールより優先度が下がってしまいます。

WafCharmルールについて (AWS WAF v2)

WafCharmのルールは優先度: 100以上で設定され、ユーザーは優先度: 0~99でルールを追加することができます。 Allowlistについては、WafCharmで作成せず、Terraformで別途作成することとしました。

このように、Countモードでの事前確認と適切なAllowlist設定を組み合わせることで、サービスに影響を与えずにWAFを導入できました。

さいごに

WafCharmのCredential Store登録に必要なIAM設定をTerraform Module化したことで、Terraformでのインフラ管理の統合や最小権限に従った設定が容易になり、Topotalとしてもお客様に最速でWafCharmを設定することができるようになりました。

今回作成したModuleは新プランのAWS WAF v2 Advanced Rule Policyを対象としています。旧プラン、AWS WAF Classic、Legacy Rule Policyには対応していませんので、ご注意ください。

WafCharmの導入を検討されている方や、既存のCloudFormation設定からTerraformへ移行したい方の参考になれば幸いです。何かご質問やフィードバックがありましたら、GitHubのIssueでお気軽にお知らせください。

また、TopotalではWafCharmの代理店販売、導入支援、運用代行を行っています。WafCharmの導入についてご相談がありましたら、お気軽にお声がけください。