|
| 1 | +--- |
| 2 | +type: "post" |
| 3 | +title: "俺たちのxQL完全ガイド を読んだ" |
| 4 | +draft: false |
| 5 | +description: "Observabilityに手を動かして軽く入門できる良い本です" |
| 6 | +ogp: 'ogp-big.webp' |
| 7 | +changelog: |
| 8 | + - summary: 記事作成 |
| 9 | + date: "2026-02-08T08:01:55.746+09:00[Asia/Tokyo]" |
| 10 | +--- |
| 11 | + |
| 12 | +<!-- titleは自動で入る --> |
| 13 | +以前2024/6に[技術書典16で購入した](https://blog.uta8a.net/post/2024-06-04-techbookfest)俺たちのxQL完全ガイドという本を読みました。 |
| 14 | +主題としてはメトリクス・ログ・トレースに対応するpromql, logql, traceqlの3つを用意された環境で手を動かして学べるというものです。Observabilityに手を動かして軽く入門できる点で今の僕にはちょうどいい本でした。 |
| 15 | +ただ環境が2024年仕様ということもあるのか、僕の手元では動かなかったので、修正したよという話も載せます。正直修正して動くようにするまでが一番学びになったかもしれん。すんなり動くよりガチャガチャする方が楽しくて学びになることってあるよね。 |
| 16 | + |
| 17 | +[俺たちのxQL完全ガイド - PromQL / LogQL / TraceQL 編 -:〆のラーメンまである倶楽部](https://techbookfest.org/product/vwEgK9fAmzRphNukv4E83P?productVariantID=b6iAh0AVyEs4hCUczPiy89) |
| 18 | + |
| 19 | +# こんな人におすすめ |
| 20 | + |
| 21 | +- Observabilityとはメトリクス・ログ・トレースということは知っているが、まだ具体的によく知らない人 |
| 22 | + - PrometheusとかLokiを触りたいけど...という人にはぴったりだと思います |
| 23 | + |
| 24 | +# 新しく学んだこと |
| 25 | + |
| 26 | +- Prometheus, Loki, Tempoのサンプルアプリとして具体的な例をイメージできるようになった |
| 27 | + - 最小サンプルアプリとして、例えば200とランダムな値をずっと返す `/metrics` を書いてもあまり意味を感じられません(もちろん初手としては有用) |
| 28 | + - 次のステップとして、どういうサンプルアプリを書いたらいいかイメージがつくようになりました |
| 29 | + - 具体的には、k6による継続的な負荷をかける、k6のシナリオでランダムにリクエストを作る、複数サービス用意することでObservabilityが効力を発揮するような構成にする、といった点がイメージにつながりました。 |
| 30 | +- 実際にxQLを実行できた |
| 31 | + - 問題が本書の中に出てくるので、それを解いていくと頭を使いながらxQLを学べてよかったです。 |
| 32 | + |
| 33 | +# ハンズオン環境を復元する |
| 34 | + |
| 35 | +やったことは以下の通り。ただ、これでもdocker composeで立ち上げるとunhealthyがいる(なんで動いてるんだろ) |
| 36 | +修正する時に、元のコードでバージョンが固定されているのは助かりました。`:latest` を使わないのってサンプルコードでは大事だなと思いました。 |
| 37 | + |
| 38 | +ハンズオン環境のリンク: [https://github.com/codex-odyssey/xql-perfect-guide](https://github.com/codex-odyssey/xql-perfect-guide) |
| 39 | +minioに関しては [公式のdocker composeファイル](https://github.com/minio/minio/blob/be7800c8136eadff2ba012412dd6c2e5fdcb548a/docs/orchestration/docker-compose/docker-compose.yaml) が参考になりました。 |
| 40 | + |
| 41 | +- lokiを3台構成にした |
| 42 | + - `loki-read`, `loki-write`, `loki-backend` の3台構成 |
| 43 | + - lokiのexampleを参考にした [grafana/loki](https://github.com/grafana/loki/tree/5102ed059288ccaa0e39538c45ae840ff4424a95/examples/getting-started) |
| 44 | +- loki-readにhealthcheckを追加して、grafanaのdepends_onでloki-readを追加して起動を待つ |
| 45 | +- lokiのバージョンを更新(v3.0.0→v3.6.3) |
| 46 | +- loki.yamlを書き換え |
| 47 | + - lokiのexampleを参考にした [grafana/loki](https://github.com/grafana/loki/tree/5102ed059288ccaa0e39538c45ae840ff4424a95/examples/getting-started) |
| 48 | + - `join_members` をloki-read, loki-write, loki-backendにする |
| 49 | + - `schema_config.configs[].from` を 2023-01-01 に変更 |
| 50 | + - compactorを追加 |
| 51 | +- promtailの`clients[].url`をloki-writeに変更 |
| 52 | +- promtailのバージョンを更新(v2.9.6→latest) |
| 53 | + - ここはよく分からないので最新に上げてみたというのが本音 |
| 54 | +- logcliの `LOKI_ADDR` をloki-readに変更 |
| 55 | +- minioのバージョンを更新(`RELEASE.2024-04-06T05-26-02Z` → `RELEASE.2025-09-07T16-13-09Z`) |
| 56 | +- minioのentrypoint, commandを削除して、新しく `command: 'server /export'` を追加 |
| 57 | +- minioのhealthcheckを追加して、loki-read, loki-writeに `depends_on: minio` を追加して起動を待つ |
| 58 | +- grafanaのdatasource.ymlのlokiのURLをloki-readに変更 |
| 59 | + |
| 60 | +2026/02/08現在、[minioがOSSにおけるDocker版の提供をやめている](https://github.com/minio/minio/issues/21647#issuecomment-3418675115)ことを考えると、minio以外に書き直すのも選択肢としては入ってきそうです。 |
| 61 | +個人的にはこういう環境をベースにして色々実験したいので、xQL完全ガイドで学んだサンプルアプリのコツを元にして自分でゼロから一連のObservabilityツールが試せる環境を書いてみるつもりです。 |
| 62 | + |
| 63 | +# 細かい気づき |
| 64 | + |
| 65 | +p.3にある構成図がとてもよかったです。クエリ投げる時に結構参照しました。今読んでいる[オブザーバビリティ・エンジニアリング](https://www.oreilly.co.jp/books/9784814400126/)で、「昔は経験豊富なエンジニアの直観で障害対応できてたけど、これからは障害の再現性が無くなるからObservabilityツールを駆使する好奇心あふれるエンジニアが障害対応で活躍する」みたいなことが書かれています。僕はそれを読んでもほんまか?という感じだったのですが、この本での体験を踏まえると「ソースコードの中身を全く把握してなくても、p.3くらいの粒度の構成図があればObservabilityツールを用いたクエリが可能だし、その結果の意味も読み取れる」という気持ちになりました。 |
| 66 | + |
| 67 | +また、lokiで [ip関数](https://grafana.com/docs/loki/latest/query/ip/) が使えることを知って関数を調べました。 |
| 68 | +2026/02/08時点での最新の3.6.xのドキュメントを読んでいて、[文字列操作系](https://grafana.com/docs/loki/v3.6.x/query/template_functions/#string-manipulation)が豊富にあるのは面白かったです。 |
| 69 | +ただ、ip関数はかなり特殊っぽい気もしました。 |
| 70 | + |
| 71 | +他には、問題を解いていると案外愚直に書くんだと思った場面がありました。例えば以下のようなクエリを書くのですが、 `sum(count_over_time({service_name="chef-service"}...` の部分を変数化したい気持ちになります。案外愚直に書いている雰囲気を感じたので、実際計算がどうなっているのか(一度行われたクエリは同じ計算式の中ではキャッシュされるとか)気になります。 |
| 72 | + |
| 73 | +```text |
| 74 | +sum(count_over_time({service_name="chef-service"} |= "材料を使用" | json | material="シイタケ" [5m])) / sum(count_over_time({service_name="chef-service"} |= "材料を使用" [5m])) |
| 75 | +``` |
| 76 | + |
| 77 | +# Future work |
| 78 | + |
| 79 | +将来的にやりたいことは以下の2つです。 |
| 80 | + |
| 81 | +- Observabilityツール各種が試せる環境を書いてみる |
| 82 | +- [ISUCONでObservabilityを活用したmazreanさんの記事](https://trap.jp/post/2434/) を読んでから試してみたかったので、今なら試せると思います |
| 83 | +- CNCF Observability whitepaperを読みたい |
| 84 | + |
| 85 | +CNCF Observability whitepaperについて、見に行ったら[2025/12にリポジトリがアーカイブされていた](https://github.com/cncf/tag-observability/blob/main/whitepaper.md)ので驚きました。 |
| 86 | +cncf/tag-observabilityリポジトリには経緯が何も書かれていないので推測になりますが、おそらくObservabilityはOperational Resilience groupで扱われる範囲の一部になったようです。 |
| 87 | + |
| 88 | +- 現在[tag-observability](https://lists.cncf.io/g/cncf-tag-observability)はlockされている |
| 89 | +- [10 Years in Cloud Native: TOC Restructures Technical Groups \| CNCF](https://www.cncf.io/blog/2025/05/07/10-years-in-cloud-native-toc-restructures-technical-groups/) でCNCFの再編が行われたこと、ObservabilityがOperational Resilience groupの一部になったことが確認できる |
| 90 | +- [TAG Operational Resilience \| CNCF Contributors](https://contribute.cncf.io/community/tags/operational-resilience/#initiatives) で2026/02/08現在active initiativesの中に、[\[Initiative\]: Cloud Native Observability Personas · Issue #2037 · cncf/toc](https://github.com/cncf/toc/issues/2037) がある。このissueの中で「Observability Whitepaper v1.1+」への言及がある。 |
| 91 | + |
| 92 | +現在の[アーカイブされている方のCNCF whitepaper](https://github.com/cncf/tag-observability/blob/main/whitepaper.md)は2023年時点の認識だと思っておくのが良さそうです。 |
| 93 | +将来読む時はこのへんの事情も込みで、v1.1+が出てないか確認するところから始めたいですね。 |
0 commit comments