技術部の染矢です。研修中にドット絵を作っていたと思えば、いつの間にか技術研修をする側になっていました。なんとまあ、時の流れというのは恐ろしいものでしょうか。
ペパボでは今年から新卒技術研修の一環として「オブザーバビリティ研修」を実施することにしました。ペパボの中では新しい取り組みであるため、オブザーバビリティ研修のみの内容で一記事を執筆することにしました。他の研修内容も含めたまとめ記事も近いうちに公開されることでしょう。
この記事では、オブザーバビリティ研修を新卒技術研修に組み込んだ意図と、研修内容、また研修設計時に考えていたことを紹介します。
オブザーバビリティ研修を取り入れた背景
ペパボの新卒技術研修では複数の技術を学びます。WebアプリケーションフレームワークからWebフロントエンド、インフラ、機械学習など幅広い技術を、実際に手を動かしながら習得します。
昨年までの研修で、次の課題が挙がっていました。
- 実際に業務で使うにもかかわらず、オブザーバビリティツールの使い方を習得する機会がなかった
- トレースの収集など、オブザーバビリティを高める必要性を理解する機会がなかった
- CTO協会による合同ISUCON研修で何をしたらいいかわからなかった
そこで、「オブザーバビリティ」をテーマにした研修を新卒技術研修の中に追加することにしました。
当初はDatadogなど特定のツールの使用方法に特化する案もありました。しかし、ペパボでは複数のツールを使用していることもあるため、オブザーバビリティ一般について習得する研修にしました。
研修内容
研修内容は、2つのセクションで構成しました。
まず、オリエンテーションとして講義形式でWebサービスにおけるオブザーバビリティの概要を説明しました。その後に、演習として実際に手を動かしながらシステムのオブザーバビリティを高める時間をとりました。
オリエンテーション時に使用したスライドは次のものです。社外公開用に一部を変更、あるいはマスクしています。
演習では、用意されたk8sクラスタを用いて、システムのオブザーバビリティを高める実践を行うことにしました。
このオブザーバビリティ研修の直前まで「コンテナ研修」と題してk8sの基本的な操作を習得するための研修を行なっていました。オブザーバビリティ研修では、コンテナ研修で使っていた研修用k8sクラスタをそのまま流用しました。
受講者はコンテナ研修の際に、自分でアプリケーションをk8sクラスタにデプロイしています。また、PrometheusやGrafanaなど、オブザーバビリティ研修に必要なコンポーネントは研修担当者が事前にインストールしています。
次の内容を演習として実施しました。研修時間は2.5営業日と限られていたため、「総合演習」の完成を必須とした上で、他の内容は各自で取捨選択する方式としました。
- メトリクス
- Prometheusによって収集されているメトリクスをGrafanaで可視化しよう
- カスタムメトリクスを発行し、収集しよう
- ログ
- アプリケーションにログを出力させよう
- Lokiによって収集されたログをGrafanaで可視化しよう
- ログを構造化しよう
- トレース
- OpenTelemetryのSDKを使ってトレースを計装しよう
- OpenTelemetry Collectorによって収集されたトレースをGrafanaで可視化しよう
- 親子関係のあるトレースを計装しよう
- サービス間の分散トレースを収集しよう
- 監視
- メトリクスを監視しよう
- ログを監視しよう
- ユーザーの体験に直結する指標を定め、監視しよう
- 総合演習
- 次のすべての要素を含むデモを完成させよう
- 自分のサービスを壊す
- 壊れたことが監視システムによって検知される
- 向上させたオブザーバビリティを用い、壊れた原因を特定する
- 原因を修正し、サービスを復旧させる
- 次のすべての要素を含むデモを完成させよう
研修設計時に考えていたこと
ペパボの新卒技術研修ではコンセプトとして「サービスを作るための技術要素や観点について現時点で良いやり方を一通り学ぶ」を掲げています。オブザーバビリティ研修も、現時点でのベストプラクティスを学べるような内容にしようと考えました。また、背景にある課題を解決するために、ペパボで実際に使っている技術要素を扱うようにしようとも考えました。 そのため、OpenTelemetryなど現代的な技術スタックを取り入れつつ、ペパボで実際に使っているGrafanaやPrometheusなどのプロダクトを扱うことにしました。
総合演習の意図
研修全体は、総合演習から着想して設計しました。
総合演習は次の要素で成り立っています。
- 壊す
- 実践する
- アウトプットする
まず、私の学習スタイルの好みから、「壊す」を要素として取り入れました。エンジニアはモノの仕組みを理解することで価値を生む職業です。壊すという行為は、モノの内部を変更することによって、成立していたことを破綻させる行為です。壊れたモノを直すには、モノ内部の仕組みを考察しながら仮説検証を繰り返す必要があります。そのため、壊して直すという営みはエンジニアリングの学習を捗らせると考えています。
また、研修の中では実践する期間を多くとりました。座学はオリエンテーションの30分間のみとして、あとは手を動かす時間です。目的に向かって自分で手を動かすことで、学習効果を高めることができると考えたためです。
さらに、研修最後のデモ発表を必須としました。ペパボでは「アウトプットすること」を大切にしています。そんなペパボの研修としては、アウトプットすることに重きを置きたいと考えたからです。他者に伝えるアウトプットを作成するためには、言語化のために出力対象について十分に理解する必要があります。また、自分のアウトプットに対して他者からフィードバックを得られると大きな学びにもなります。そのため、自分の成果を発表することを要素に取り入れました。
他の演習内容は、総合演習を完成させるための材料として設置しました。
オリエンテーションの意図
オリエンテーションタイムは、次の課題を一気に解決することを目的として設計しました。
- 受講者と講師の顔合わせタイムがほしい
- 研修の進め方を説明する時間がほしい
- いきなり演習に着手すると、オブザーバビリティ自体の概念理解が不足しそう
- この研修で扱わないプロダクトについても知ってほしい
- 説明を文章で書いて読ませるだけの方式だと飽きが来そう
最後の課題を解消するために、オリエンテーションは講師がスライドを使って説明するという形式にしました。演習を違和感なく進められるように、オブザーバビリティ一般についての解説と、演習で使用するプロダクトの説明を行いました。顔を合わせながらの説明であったため、その場で出た疑問を会話しながら解決することもできました。
さらに、演習を進めながら概念を深く理解するために参照する先として、オリエンテーションで説明した内容を文書としてもまとめておきました。
おわりに
以上、ペパボ技術研修の一部として「オブザーバビリティ研修」を紹介しました。 ペパボでは初の試みであったため、研修内容作成のとっかかりを掴むのに苦労しました。そのため、設計意図も含めて記事にしてみました。技術研修を設計している誰かの参考になれば嬉しいです。