<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>CloudLogging on LIFELOG</title>
    <link>/tags/cloudlogging/</link>
    <description>Recent content in CloudLogging on LIFELOG</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <copyright>© 2026 0222-nnn</copyright>
    <lastBuildDate>Thu, 24 Sep 2026 00:00:00 +0900</lastBuildDate><atom:link href="/tags/cloudlogging/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Cloud Monitoring ダッシュボード実践｜既存ダッシュボードの活用からCustom Dashboard・Terraform管理まで</title>
      <link>/blog/20260924_terraform_gcp_advanced_cloud_monitoring_dashboard/</link>
      <pubDate>Thu, 24 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260924_terraform_gcp_advanced_cloud_monitoring_dashboard/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;障害の連絡を受けて Cloud Monitoring を開くと、ダッシュボードが何十も並んでいます。Google Cloud が自動で用意したもの、テンプレートから入れたもの、誰かが作ったもの。&lt;strong&gt;どれを開けばよいのか、足りないときに自分で作るべきなのかが分かりません。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;作ると決めても迷います。コンソールで作ったダッシュボードも JSON で取り出せます。ただ、作っただけでは Git などのソース管理に載りません。Terraform で管理しようとすると、今度はコンソールで触ってよいのかが分からなくなります。&lt;/p&gt;
&lt;p&gt;この記事では、次の順で進めます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Google Cloud が用意したダッシュボードとテンプレートで足りるかを見る&lt;/li&gt;
&lt;li&gt;足りない分を Custom Dashboard にまとめる&lt;/li&gt;
&lt;li&gt;フィルタと変数で、対象を切り替えられるようにする&lt;/li&gt;
&lt;li&gt;共有・権限・履歴など、運用に要るものを押さえる&lt;/li&gt;
&lt;li&gt;JSON を取り出し、gcloud と Terraform で管理する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ステップ2では、メトリクスに加えてログ・Incident・変更イベントも同じ画面に置きます。&lt;/p&gt;
&lt;p&gt;Metrics Explorer を開いたことがある人向けです。Terraform の基本操作（&lt;code&gt;init&lt;/code&gt; / &lt;code&gt;plan&lt;/code&gt; / &lt;code&gt;apply&lt;/code&gt;）は前提とします。&lt;/p&gt;
&lt;p&gt;扱わないものもあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;メトリクスの意味と集計の選び方。&lt;a href=&#34;/blog/2026_09_11_cloud_monitoring_metrics_reference/&#34;&gt;メトリクスの解説編&lt;/a&gt;に任せます&lt;/li&gt;
&lt;li&gt;アラートポリシー・通知チャネル・SLO の設計&lt;/li&gt;
&lt;li&gt;Cloud Logging のクエリの書き方。&lt;a href=&#34;/blog/2026_09_10_cloud_logging_query_reference/&#34;&gt;クエリ集&lt;/a&gt;に任せます&lt;/li&gt;
&lt;li&gt;サードパーティ製ダッシュボード、Grafana からの取り込み、Managed Service for Prometheus の構築&lt;/li&gt;
&lt;li&gt;すべてのウィジェットとサービスを網羅すること&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform v1.14.3、&lt;code&gt;hashicorp/google&lt;/code&gt; v7.46.1&lt;/li&gt;
&lt;li&gt;Google Cloud SDK 562.0.0、kubectl v1.35.2（GKE v1.35.8-gke.1036000）&lt;/li&gt;
&lt;li&gt;リージョン &lt;code&gt;asia-northeast1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;サンプルコードは次にあります。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Cloud Logging クエリ チートシート｜障害調査でよく使う検索例まとめ</title>
      <link>/blog/2026_09_23_cloud_logging_query_cheatsheet/</link>
      <pubDate>Wed, 23 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/2026_09_23_cloud_logging_query_cheatsheet/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;このチートシートの使い方 
    &lt;div id=&#34;このチートシートの使い方&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e3%81%93%e3%81%ae%e3%83%81%e3%83%bc%e3%83%88%e3%82%b7%e3%83%bc%e3%83%88%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;障害調査では「この Pod のログだけ見たい」「誰がこのリソースを消したか知りたい」といったクエリを何度も書きます。書くたびにフィールド名を調べ直すと、そこで手が止まります。&lt;/p&gt;
&lt;p&gt;このページは、やりたいことから貼り付けられるクエリへすぐ着くための早見表です。&lt;strong&gt;急いでいるときは、&lt;a href=&#34;#by-purpose&#34;&gt;目的から探す&lt;/a&gt;へ直接進んでください。&lt;/strong&gt; そこから&lt;a href=&#34;#by-service&#34;&gt;サービスから探す&lt;/a&gt;のクエリへ飛べます。&lt;/p&gt;
&lt;p&gt;前提と基本形は、あとから読めば足ります。&lt;/p&gt;
&lt;p&gt;Logs Explorer を使ったことがあり、検索式を素早く引きたい人向けです。Cloud Logging の入門やログ収集の設定、Log Router・シンク・ログベースの指標は扱いません。&lt;/p&gt;
&lt;p&gt;件数や割合がいつから増えたかは、メトリクスで見るほうが速く分かります。そのためのクエリは&lt;a href=&#34;/blog/2026_09_24_cloud_monitoring_promql_cheatsheet/&#34;&gt;Cloud Monitoring メトリクス チートシート&lt;/a&gt;にあります。&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;書き方の前提 
    &lt;div id=&#34;書き方の前提&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%9b%b8%e3%81%8d%e6%96%b9%e3%81%ae%e5%89%8d%e6%8f%90&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h3&gt;
&lt;p&gt;クエリは &lt;strong&gt;Logs Explorer のクエリエディタにそのまま貼れる形&lt;/strong&gt;で書きます。同じ構文は Logging API と &lt;code&gt;gcloud logging read&lt;/code&gt; でも使えます（&lt;a href=&#34;https://docs.cloud.google.com/logging/docs/view/logging-query-language&#34; target=&#34;_blank&#34;&gt;Logging query language&lt;/a&gt;）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gcloud logging read&lt;/code&gt; のオプションや、0件だったときの切り分けは&lt;a href=&#34;/blog/2026_09_10_cloud_logging_query_reference/&#34;&gt;解説編&lt;/a&gt;にあります。ここでは繰り返しません。&lt;/p&gt;
&lt;p&gt;次の表にある語はプレースホルダーで、自分の環境の値に置き換えます。&lt;code&gt;AND&lt;/code&gt;・&lt;code&gt;OR&lt;/code&gt;・&lt;code&gt;NOT&lt;/code&gt; や &lt;code&gt;ERROR&lt;/code&gt; などの演算子・定数は、そのまま使います。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;プレースホルダー&lt;/th&gt;
          &lt;th&gt;置き換えるもの&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;PROJECT_ID&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;プロジェクト ID&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;CLUSTER_NAME&lt;/code&gt; / &lt;code&gt;NAMESPACE&lt;/code&gt; / &lt;code&gt;POD_NAME&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;GKE のクラスタ名・Namespace・Pod 名&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;INSTANCE_ID&lt;/code&gt; / &lt;code&gt;INSTANCE_NAME&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Compute Engine の VM の ID・名前&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;SERVICE_NAME&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Cloud Run のサービス名&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;APP_LABEL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Pod に付けた &lt;code&gt;app&lt;/code&gt; ラベルの値&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;RESOURCE_NAME&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;監査ログで探すリソース名の一部&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;TRACE_ID&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;トレース ID&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;USER_EMAIL&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;操作したユーザーやサービスアカウントのメールアドレス&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;SUBNET_CIDR&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;10.0.0.0/24&lt;/code&gt; のような CIDR 表記の範囲&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 class=&#34;relative group&#34;&gt;確認環境とクエリの区分 
    &lt;div id=&#34;確認環境とクエリの区分&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e7%a2%ba%e8%aa%8d%e7%92%b0%e5%a2%83%e3%81%a8%e3%82%af%e3%82%a8%e3%83%aa%e3%81%ae%e5%8c%ba%e5%88%86&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h3&gt;
&lt;p&gt;Logs Explorer は SaaS なので、読者が照合できる版番号がありません。代わりに、公式ドキュメントを確認した日付を書きます。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Cookieに backend-a と書いても backend-a2 へ届く。ALBのセッションアフィニティを実測した</title>
      <link>/blog/20260913_terraform_gcp_advanced_regional_alb_session_affinity/</link>
      <pubDate>Sun, 13 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260913_terraform_gcp_advanced_regional_alb_session_affinity/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;ログイン状態をサーバ側のメモリに置いている。ロードバランサが毎回違うバックエンドへ振ると、数リクエストごとにログアウトする。同じクライアントを同じバックエンドへ送りたい。&lt;/p&gt;
&lt;p&gt;Google Cloud のロードバランサには &lt;code&gt;session_affinity&lt;/code&gt; があります。リージョン外部ALBで選べるのは&lt;a href=&#34;https://docs.cloud.google.com/load-balancing/docs/https/request-distribution&#34; target=&#34;_blank&#34;&gt;6種類&lt;/a&gt;です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NONE / CLIENT_IP / GENERATED_COOKIE / HEADER_FIELD / HTTP_COOKIE / STRONG_COOKIE_AFFINITY
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この記事で比べるのは Cookie を使う2つです。違いは「誰が発行するか」ではありません。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GENERATED_COOKIE&lt;/code&gt; はLBが発行した Cookie を使います。一方 &lt;code&gt;HTTP_COOKIE&lt;/code&gt; が使うのは、&lt;strong&gt;名前を指定した Cookie の値&lt;/strong&gt;です。その名前の Cookie が無ければLBが生成します。&lt;/p&gt;
&lt;p&gt;後者を使うとき、こう書きたくなります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;send_header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Set-Cookie&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ROUTE=backend-a; Path=/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;これはバックエンドの指定になりません。&lt;/strong&gt; 固定はされますが、&lt;code&gt;backend-a&lt;/code&gt; という綴りがバックエンド &lt;code&gt;backend-a&lt;/code&gt; を指すわけではありません。実測では、&lt;code&gt;ROUTE=backend-a&lt;/code&gt; を送ったリクエストが10回とも &lt;strong&gt;&lt;code&gt;backend-a2&lt;/code&gt;&lt;/strong&gt; に届きました。&lt;/p&gt;
&lt;p&gt;あわせて、固定が外れる条件と、効いていることをどこで確かめられるかも測ります。後者は予想と違いました。&lt;/p&gt;
&lt;p&gt;Google Cloud のロードバランサを触ったことがある人向けです。構成の作り方は&lt;a href=&#34;/blog/20260911_terraform_gcp_advanced_regional_alb_proxy_subnet/&#34;&gt;リージョンALBの回&lt;/a&gt;で扱っており、ここではアフィニティの差分だけを見ます。gRPC やステートフルなセッション管理の設計は扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform v1.14.3、&lt;code&gt;hashicorp/google&lt;/code&gt; v7.44.0&lt;/li&gt;
&lt;li&gt;Google Cloud SDK 562.0.0、curl 7.81.0&lt;/li&gt;
&lt;li&gt;初回検証は2026年9月13日、再検証は2026年9月19日、いずれも &lt;code&gt;asia-northeast1&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;初回・再検証は別デプロイです。&lt;code&gt;AFFLOG&lt;/code&gt; の Cookie 関連の記録（6件のログなど）は9月13日、&lt;code&gt;request_count&lt;/code&gt;・&lt;code&gt;backend_request_count&lt;/code&gt; の94件／30件を含む指標系の集計は9月19日の再検証結果です。断りのない数値は、それぞれの取得時点のデプロイでの集計としてください。Cookie の対応だけは、作り直す前と後の2回ぶんを並べています。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>IAP経由のSSHはどこまで監査できるのか。OS LoginとVMログを実測した</title>
      <link>/blog/20260912_terraform_gcp_advanced_iap_ssh_port_forwarding/</link>
      <pubDate>Sat, 12 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260912_terraform_gcp_advanced_iap_ssh_port_forwarding/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;外部IPを付けず、tcp/80 も開けずに、VM 上の HTTP を見たい。IAP の SSH ポートフォワードでできます。許可するのは IAP の範囲からの tcp/22 だけです。&lt;/p&gt;
&lt;p&gt;ただ、そのあとに困ることが2つあります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;誰に何の権限を渡せばいいのか。&lt;/strong&gt; 公式の手順どおりに書いたつもりで、自分では繋がるのに他の人が繋がらない、ということが起きます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;誰が何をしたか、どこまで残るのか。&lt;/strong&gt; 踏み台を置かない構成なので、監査の材料がどこにあるのか分かりにくくなります。&lt;/p&gt;
&lt;p&gt;この2つを実測します。接続手順そのものは&lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/07-iap-ssh-port-forwarding&#34; target=&#34;_blank&#34;&gt;サンプルの README&lt;/a&gt; にあるので、ここでは扱いません。&lt;/p&gt;
&lt;p&gt;Google Cloud の Compute Engine を触ったことがある人向けです。外部IPなしの VM への接続経路を決めようとしている場面を想定しています。IAP の Web アプリ向け機能と、Organization Policy による追加要件は扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform v1.14.3、&lt;code&gt;hashicorp/google&lt;/code&gt; v7.46.0&lt;/li&gt;
&lt;li&gt;Google Cloud SDK 562.0.0&lt;/li&gt;
&lt;li&gt;Ops Agent 2.70.0、Debian 12&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用するコードは &lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/07-iap-ssh-port-forwarding&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/07-iap-ssh-port-forwarding&lt;/a&gt; です。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Cloud Armorで送信元IPを拒否したら、リクエストはバックエンドに届かなかった</title>
      <link>/blog/20260911_terraform_gcp_advanced_regional_alb_cloud_armor/</link>
      <pubDate>Fri, 11 Sep 2026 00:00:03 +0900</pubDate>
      
      <guid>/blog/20260911_terraform_gcp_advanced_regional_alb_cloud_armor/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;Cloud Armor で送信元を絞ったとき、&lt;strong&gt;拒否されたリクエストはどこまで来ているのか。&lt;/strong&gt; バックエンドのログに出ないのは「届いていないから」なのか、「出していないだけ」なのか。&lt;/p&gt;
&lt;p&gt;見えないものを「無い」と決めるのは危ないので、クエリ文字列に識別子を入れたリクエストを送って確かめます。同じ1回のリクエストを、クライアント・LBのログ・バックエンドのログの3か所で追えます。&lt;/p&gt;
&lt;p&gt;あわせて、プレビューの動作も確かめます。ルールを有効にする前に「もし有効だったら何が止まるか」を見る仕組みです。&lt;/p&gt;
&lt;p&gt;プレビューにしたルールは判定するだけで、実際には止めません。判定はログと専用メトリクスに残ります。&lt;/p&gt;
&lt;p&gt;3つの状態で、応答・ログ・メトリクスの見え方を並べます。&lt;/p&gt;
&lt;p&gt;Google Cloud のロードバランサを触ったことがある人向けです。構成の作り方は&lt;a href=&#34;/blog/20260911_terraform_gcp_advanced_regional_alb_proxy_subnet/&#34;&gt;前々回&lt;/a&gt;で扱っており、ここでは Armor の差分だけを見ます。WAF ルールやレート制限は扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform v1.14.3、&lt;code&gt;hashicorp/google&lt;/code&gt; v7.46.0&lt;/li&gt;
&lt;li&gt;Google Cloud SDK 562.0.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用するコードは &lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/09-regional-alb-cloud-armor&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/09-regional-alb-cloud-armor&lt;/a&gt; です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; Advanced-Examples/09-regional-alb-cloud-armor
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp terraform.tfvars.example terraform.tfvars
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# project_id / allowed_src_ips（自分のグローバルIPを /32 で）/ iap_member を書く&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform init
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform apply
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform apply   &lt;span class=&#34;c1&#34;&gt;# 2回目。理由は後述&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;create_deny_client = true&lt;/code&gt; にすると、&lt;strong&gt;許可リストに載っていない送信元&lt;/strong&gt;として使える検証用 VM も作られます。&lt;code&gt;access_config {}&lt;/code&gt; でエフェメラルな外部IPが付くので、そのIPで出ていきます。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>proxy-onlyサブネットを塞ぐと、リージョンALBはHEALTHYのまま504を返した</title>
      <link>/blog/20260911_terraform_gcp_advanced_regional_alb_proxy_subnet/</link>
      <pubDate>Fri, 11 Sep 2026 00:00:01 +0900</pubDate>
      
      <guid>/blog/20260911_terraform_gcp_advanced_regional_alb_proxy_subnet/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;ロードバランサのトラブルは「ヘルスチェックが赤い」から入ることが多く、そこを直せば通ります。リージョン外部 Application Load Balancer には、&lt;strong&gt;緑のまま通らない&lt;/strong&gt;入り方があります。&lt;/p&gt;
&lt;p&gt;バックエンドから見ると、同じロードバランサからの通信が&lt;strong&gt;ヘルスチェックと実トラフィックの2つ&lt;/strong&gt;に分かれています。片方だけを塞ぐと、こうなります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;今回測ったのは、IPv4のVMを &lt;code&gt;GCE_VM_IP_PORT&lt;/code&gt; 型のゾーンNEGに登録した構成&lt;/strong&gt;です。ハイブリッドNEGやバックエンドバケットでは経路が変わるので、そのまま当てはめられません。&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;何が来るか&lt;/th&gt;
          &lt;th&gt;送信元&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;ヘルスチェック&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;35.191.0.0/16&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;実トラフィック&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;proxy-only サブネットの範囲&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ファイアウォールを片方しか開けていないと、片方だけ通ります。ヘルスチェックだけ開けていれば、&lt;strong&gt;バックエンドは HEALTHY のまま、クライアントには 504 が返ります。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ファイアウォールを1本だけ外す対照実験で、これを実際に起こします。&lt;/p&gt;
&lt;p&gt;Google Cloud のロードバランサを触ったことがある人向けです。ALB の種類の選び方や、Cloud Armor・セッションアフィニティは扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Terraform v1.14.3、&lt;code&gt;hashicorp/google&lt;/code&gt; v7.46.0&lt;/li&gt;
&lt;li&gt;Google Cloud SDK 562.0.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用するコードは &lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/08-regional-external-alb-neg&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/08-regional-external-alb-neg&lt;/a&gt; です。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; Advanced-Examples/08-regional-external-alb-neg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp terraform.tfvars.example terraform.tfvars   &lt;span class=&#34;c1&#34;&gt;# project_id と iap_member を書き換える&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform init
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;terraform apply
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Apply complete! Resources: 33 added, 0 changed, 0 destroyed.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Outputs:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vip = &amp;#34;34.146.203.171&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;バックエンドVMに外部IPはありません。インターネットからの入口はロードバランサだけです。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>よく使うCloud Loggingクエリまとめ（絞り込みから「出ない」ときの確認まで）</title>
      <link>/blog/2026_09_10_cloud_logging_query_reference/</link>
      <pubDate>Thu, 10 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/2026_09_10_cloud_logging_query_reference/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;Cloud Loggingは、書き方さえ合っていれば目的のログにすぐ着きます。困るのは&lt;strong&gt;0件が返ったとき&lt;/strong&gt;です。ログが無いのか、クエリが違うのか、そもそも収集していないのか、返ってきた空行からは区別がつきません。&lt;/p&gt;
&lt;p&gt;しかも綴りを間違えても&lt;strong&gt;エラーになりません。&lt;/strong&gt; &lt;code&gt;resource.type=&amp;quot;k8s_containers&amp;quot;&lt;/code&gt; と複数形で書けば、静かに0件が返ります。&lt;/p&gt;
&lt;p&gt;自分が検証で実際に打ったクエリを、実行結果とセットでまとめます。忘れたときに引けることと、&lt;strong&gt;0件の理由をたどれること&lt;/strong&gt;を目的にします。&lt;/p&gt;
&lt;p&gt;Google Cloudのコンソールかgcloudを触ったことがある人向けです。Cloud Loggingをこれから使い始める人の入門ではありません。ログ設計そのものや、Cloud Logging以外への転送は扱いません。&lt;/p&gt;
&lt;p&gt;やりたいことから Logs Explorer に貼れるクエリだけを引きたいときは、&lt;a href=&#34;/blog/2026_09_23_cloud_logging_query_cheatsheet/&#34;&gt;チートシート&lt;/a&gt;を使います。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証環境 
    &lt;div id=&#34;検証環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud SDK 562.0.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;出力例は、このブログのTerraform/Google Cloudシリーズで作った検証環境のログを実際に読んだ結果です。&lt;/p&gt;
&lt;p&gt;リソースはすべて削除済みですが、ログは残っています。保持期間は保存先のバケットで決まります。この環境では &lt;code&gt;_Default&lt;/code&gt; が30日、&lt;code&gt;_Required&lt;/code&gt; が400日でした。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-console&#34; data-lang=&#34;console&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gp&#34;&gt;$&lt;/span&gt; gcloud logging buckets list --location&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;global &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;&lt;span class=&#34;go&#34;&gt;    --format=&amp;#39;table(name.basename():label=BUCKET_ID,retentionDays,description)&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;BUCKET_ID  RETENTION_DAYS  DESCRIPTION
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;_Default   30              Default bucket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;_Required  400             Audit bucket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;リソースを消しても、しばらくは調べ直せます。検証の片付けを終えたあとに「あれはどうだったか」となったとき、この30日が効きます。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>GKEでPodの退避を起こしたら、監視に必要なメトリクスがCloud Monitoringに来なかった</title>
      <link>/blog/20260906_terraform_gcp_advanced_gke_pod_eviction/</link>
      <pubDate>Sun, 06 Sep 2026 00:00:01 +0900</pubDate>
      
      <guid>/blog/20260906_terraform_gcp_advanced_gke_pod_eviction/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;ノードのメモリやディスクが逼迫すると、kubelet が Pod を退避（Eviction）します。退避された Pod は &lt;code&gt;Failed&lt;/code&gt; として API 上に残り、PodGC が片付けるまで一覧に並び続けます。&lt;/p&gt;
&lt;p&gt;監視していなければ、原因の分からない &lt;code&gt;Failed&lt;/code&gt; Pod が増えていくだけです。&lt;/p&gt;
&lt;p&gt;そこで退避を監視しようとして、最初につまずきました。&lt;code&gt;kube_pod_status_reason{reason=&amp;quot;Evicted&amp;quot;}&lt;/code&gt; を Cloud Monitoring で引いても、何も返ってきません。&lt;/p&gt;
&lt;p&gt;これは kube-state-metrics が出すメトリクスで、Pod の &lt;code&gt;status.reason&lt;/code&gt; をそのままラベルにしたものです。退避された Pod には &lt;code&gt;reason=&amp;quot;Evicted&amp;quot;&lt;/code&gt; のラベルが付きます。&lt;/p&gt;
&lt;p&gt;Gauge なので、&lt;code&gt;sum()&lt;/code&gt; で分かるのは&lt;strong&gt;現在 API 上に残っている &lt;code&gt;Evicted&lt;/code&gt; の Pod 数&lt;/strong&gt;です。累積の退避回数ではありませんが、退避を検知するアラートなら、まず候補に挙がります。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-promql&#34; data-lang=&#34;promql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;kube_pod_status_reason&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;reason&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Evicted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;#34;}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;収集そのものは動いていました。Managed Service for Prometheus（GMP）は有効で、&lt;code&gt;up{job=&amp;quot;kube-state-metrics&amp;quot;}&lt;/code&gt; は 1 を返します。それでも、退避を数えるためのメトリクスだけが Cloud Monitoring に入っていません。&lt;/p&gt;
&lt;p&gt;この状態でどこを見れば退避に気づけるのか。GKE で実際に退避を起こして確かめました。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;対象読者 
    &lt;div id=&#34;対象読者&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%af%be%e8%b1%a1%e8%aa%ad%e8%80%85&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GKE でワークロードを動かしたことがある&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kubectl describe&lt;/code&gt; で Pod の状態を読める&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;扱わないもの 
    &lt;div id=&#34;扱わないもの&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%89%b1%e3%82%8f%e3%81%aa%e3%81%84%e3%82%82%e3%81%ae&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes と GKE の入門&lt;/li&gt;
&lt;li&gt;Pod Disruption Budget、&lt;code&gt;kubectl drain&lt;/code&gt; による退去（今回はノード逼迫による退避）&lt;/li&gt;
&lt;li&gt;HorizontalPodAutoscaler、Cluster Autoscaler&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;退避が起きたときに、何をどこで観測できるかに絞ります。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>terraform applyが成功してもVMの中は設定されていなかった話</title>
      <link>/blog/20260905_terraform_gcp_advanced_terraform_ansible_boundary/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:04 +0900</pubDate>
      
      <guid>/blog/20260905_terraform_gcp_advanced_terraform_ansible_boundary/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;「Terraformはマシンを作る、中で動くものはAnsible」という分担はよく聞きます。ところがその受け渡しは自動では繋がりません。&lt;/p&gt;
&lt;p&gt;実際に、&lt;code&gt;terraform apply&lt;/code&gt;が&lt;code&gt;35 added&lt;/code&gt;と出た一方で、VMの中ではAnsibleが失敗していました。&lt;code&gt;terraform plan&lt;/code&gt;も差分なしのままです。Terraformから見ると、この失敗はどこにも現れません。&lt;/p&gt;
&lt;p&gt;GCEにOps AgentとNginxを入れる最小構成で、この境界を実測します。&lt;/p&gt;
&lt;p&gt;対象読者は、TerraformでGCEを作ったことがあり、Ansibleを書いたことがある人です。それぞれの入門は扱いません。&lt;/p&gt;
&lt;p&gt;Ansible制御ノードからのpush型実行、Ansible Vaultは扱いません。今回はVM上でのlocal実行です。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証すること 
    &lt;div id=&#34;検証すること&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;startup scriptはいつ走るのか&lt;/strong&gt;（初回だけか、毎回か）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terraformの「成功」は中身を保証するか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;playbookを更新したとき、既存のVMにどう反映するか&lt;/li&gt;
&lt;li&gt;サービスが「正しく」動いているとどう確認するか&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;前提環境 
    &lt;div id=&#34;前提環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud CLI、Terraform&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GCE、GCS、IAPを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;VM内で&lt;code&gt;sudo&lt;/code&gt;を実行できること。掲載した手動再実行やログ確認に要る。&lt;code&gt;roles/compute.osLogin&lt;/code&gt;だけでは足りず、&lt;code&gt;roles/compute.osAdminLogin&lt;/code&gt;が要る&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.5、google 7.46.0、Debian 12、nginx 1.22、Ansible 2.14（Debian 12 の &lt;code&gt;apt&lt;/code&gt; が入れる版）、Ops Agent 2.x&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ansible と Ops Agent の細かい版は記録していません。挙動が変わりうるので、再現するなら &lt;code&gt;ansible --version&lt;/code&gt; と &lt;code&gt;google_cloud_ops_agent_engine --version&lt;/code&gt; を控えておきます。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>標準出力に1行JSONを書くだけなら、GKEではFluentdサイドカーが要らなかった</title>
      <link>/blog/20260905_terraform_gcp_advanced_gke_cloud_logging_format/</link>
      <pubDate>Sat, 05 Sep 2026 00:00:03 +0900</pubDate>
      
      <guid>/blog/20260905_terraform_gcp_advanced_gke_cloud_logging_format/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;構造化ログをCloud Loggingに送りたいとき、Fluentdをサイドカーに置く構成があります。GKEでそれが要るのかを確かめました。&lt;/p&gt;
&lt;p&gt;さらに、&lt;code&gt;fluent.conf&lt;/code&gt;に書いた&lt;code&gt;tag&lt;/code&gt;や&lt;code&gt;record_transformer&lt;/code&gt;が、Cloud Logging上のどのフィールドになるのかも対応が分かりません。サイドカーを入れたのに期待したキーで検索できない、という状態になりがちです。&lt;/p&gt;
&lt;p&gt;実際に測ってみると、&lt;strong&gt;GKEの収集エージェントが既にJSONを解釈していました。&lt;/strong&gt; アプリが&lt;strong&gt;標準出力に1行JSONを書く&lt;/strong&gt;なら、サイドカーは要りません。しかも挟み方を誤ると、逆に構造を失います。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ファイルに書く場合は別です。&lt;/strong&gt; GKEの標準収集が拾うのはコンテナの標準出力と標準エラーなので、ファイル出力を届けるには何かが要ります。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEでPodを動かしたことがあり、Cloud Loggingでログを見たことがある人です。Kubernetesの入門は扱いません。&lt;/p&gt;
&lt;p&gt;Log Routerによる転送、Log-based metrics、Autopilotクラスタは扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証すること 
    &lt;div id=&#34;検証すること&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;素のテキストとJSONで、入るフィールドが変わるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;構造化ログにFluentdサイドカーは必要か&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fluent.conf&lt;/code&gt;の設定がCloud Loggingのどのフィールドになるか&lt;/li&gt;
&lt;li&gt;スタックトレースが1エントリにまとまるか&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;前提環境 
    &lt;div id=&#34;前提環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud CLI、Terraform&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、Compute Engineを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.5、google 7.46.0、GKE 1.35.7-gke.1027000、fluentd v1.16-debian-1&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;使用するTerraformコード 
    &lt;div id=&#34;使用するterraformコード&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8bterraform%e3%82%b3%e3%83%bc%e3%83%89&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/24-gke-fluentd-log-format&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/24-gke-fluentd-log-format&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;READMEの手順でTerraformを適用し、&lt;code&gt;k8s/&lt;/code&gt;配下の4つのマニフェストを当てます。&lt;strong&gt;クラスタはプライベートエンドポイント構成なので、以下の&lt;code&gt;kubectl&lt;/code&gt;は踏み台VMから実行します。&lt;/strong&gt;&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
