社内でオリジナルのNew Relicハンズオン勉強会をやってみた！

# はじめに
Qiita で初投稿になります。
New Relic Trailblazer やっております、CTC システムマネジメントの 「すぎぴー」こと杉浦です。

ここ1年くらいで様々なシステム環境におけるマイクロサービス化のスピードが増してきているように感じており、それに伴いオブザーバビリティの重要性が増し、導入に向けた波が来ているような気がしています。

これは自分自身もオブザーバビリティを学びながらも、オブザーバビリティを社内外に広めたいという思いで今回は社内でオリジナルの New Relic ハンズオン付き勉強会を色々と試行錯誤しながら開催してみましたので参考にしてみてもらえればと思います。

なお、こちらの記事は [Qiita Advent Calendar 2024](https://qiita.com/advent-calendar/2024/newrelic) に初参加のものとなります。

https://qiita.com/advent-calendar/2024/newrelic

:::note alert
（注意）本記事は、技術要素は少なめです。
:::

# 「 New Relic を使える　オブザーバビリティエンジニアを育成してよ」
こんなこと上司からよく言われませんか？

私は12年ほど前に AWS をやり始めた際にも同じようなことを言われた記憶がよみがえりました。

当時、AWS は一部の方から一つの製品のように認識されていたため、勉強会などをすれば、AWS の全てを触れるようになるのだろうと勘違いされており、なかなか人を増やしてもらえなかったりし、体制強化や人材育成に苦労した記憶があります。

当社は大手 SIer 系のインフラ運用に特化した会社であるため、当時よくあるアプリ、DB、サーバ、NW と昔ながらのサイロ型文化が根付いており、各分野においては強いのですが、一人のエンジニアが柔軟に幅広くできるといったフルスタック人材は少ないのが現状です。

オブザーバビリティ実現も対象となるサービスやシステムに対する深い知識が必要になるのですが、今回も New Relic 自体の導入方法や操作を覚えれば、フルスタックなオブザーバビリティが実現できると思われてそうです。

とはいえ、育成にチャレンジしないことには案件獲得のための体制強化ができないため、真剣に考えてみました。

# 勉強会開催までの道のり
まず、以下個人的な思いから一人では勉強会の開催が難しいため、オブザーバビリティ愛を持っている身近な人たちに声をかけまくることから開始しました。

* 勉強会といっても学ぶべき要素が多いため、複数回にわけて開催が必要
* 参加者の熱量を落としたくないので可能な限り各勉強会の間を空けずに開催したい
* どこに逸材が眠っているのか分からないため、組織を跨いで多くの人に受けてもらいたい

集まったメンバーで出来ることを考えながら、勉強会開催に向けた以下タスクをこなす。
意外と準備が面倒だが、オブザーバビリティ愛があれば何でもできる(笑)

:::note info
タスク一覧
* 組織跨ぎで勉強会を行うための企画書作成
* 企画書を通して、各本部レベルで承諾を得る
* 詳細な育成ジャーニーの策定
* 勉強会ハンズオン環境の検討と概算費用算出
* 勉強会資料とハンズオン環境の作成
* 受講者向けアンケート作成
* 受講者募集
* リハーサル実施
* 本番開催
:::

# オブザーバビリティを実現するために必要となるスキルセットとは
まず、自身が New Relic を触っていて、単純な導入（インテグレーション）および操作（ダッシュボード作成やアラート作成）するには、最低限、以下のようなスキルセットがあればよいと考えます。

:::note warn
※もちろん、導入先の要素や使う機能によっては異なるスキルセットが必要となるケースがございます。あくまでインフラ運用エンジニアの観点で必要だと考える項目となりますのでご留意ください。
:::

| カテゴリ | 概要 |
|:-----------|:------------|
| ネットワーク知識　 | ICMP、SNMP、SNMP-Trap、Syslog、ネットワーク機器の基礎知識<br>（MIB 情報含む） |
| Node.js 知識 | 外形監視などでシナリオ監視を組み立てる際に Selenium で JavaScript を利用する |
| コンテナ知識 | ネットワーク性能監視（NPM）等で Docker コンテナ起動させることもあるため |
| ログ知識 | ログをパースする際に正規表現（Grok パターン）の知識が必要 |
| SQL 知識 | SQL に似ている独自の New Relic Query Language（略称：NRQL）を使い、データをクエリし、カスタムダッシュボードやアラートを作成するため |

なお、上記スキルセットがあれば、New Relic を導入し、可視化することはできますが、収集したデータが何を意味し、どうしたらサービスやシステムをよりよく改善できるのかはわかりません。

導入先のシステムの要素、提供サービス、ビジネスの KPI などが分かっていないことには、状態を分析することは困難ですし、分析できなければ、システムの改善/改修や障害時の根本原因特定はできないものになります。

可観測性を高め、要は SRE のようなことをやろうとした場合、以下のようなフルスタックなスキルセットが必要となってきます。※あくまで一例です。

| カテゴリ | 概要 |
|:-----------|:------------|
| ネットワーク | 一般的な基礎知識<br>（OSI 参照モデル、プロトコル、L3 スイッチやルータ等） | 
| サーバ | 一般的な基礎知識<br>（Windows、Linux、Ubuntu、RedHat 等） |
| データベース | 一般的な基礎知識<br>（Oracle、MySQL、PostgreSQL 等） | 
| 開発言語 | システムで使用される言語の基礎知識<br>（HTML、CSS、JavaScript、Python、Java、C 等） |
| ミドルウェア  | Apache、Nginx、Tomcat、Unicornなどの構築/運用知識 |
| クラウド | パブリッククラウド（AWS、Azure、GCP 等）の構築/運用知識 |
| コンテナ | Docker、Kubernetes 等の構築/管理知識 |
| フロントエンド | HTML/CSS、JavaScript、UI/UX デザイン 等 |
| バックエンド | Python、Java、API 設計/開発等 |
| セキュリティ | OS や各種コンポーネントの脆弱性に対する知識 |
| ログ | ログ収集設計およびログ解析/分析知識 |
| モニタリング | インフラ等の障害検知やキャパシティプランニング知識 |
|自動化 | CICD / オーケストレーション知識 |

もちろん、一人で全てというわけでなく、組織やチームとしてそろっていれば何とかなりますが、それでいてもスキルの幅が広いため、ある程度、自社が向かっていくビジネスに合わせて、スコープを絞っていく必要があると考えます。

# オブザーバビリティエンジニア育成ジャーニー
実は勉強会を考えていく中で、ちょうどタイムリーに New Relic さんが投稿している「[スキルアップを目指せ！ New Relic のラーニングパス活用術](https://qiita.com/ume67026265/items/dba99105e27c4200cf3b)」の記事に以下ラーニングパスの記述がありました。 
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F313446%2F228cafb5-6477-b581-3eb6-ad5a85aa29de.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=d04450797d1324282a177adcb0bdf93e)

本ラーニングパスを参考にさせていただきながら、インフラ運用をやっている当社として以下の3つに要素を絞って独自の勉強会の流れ（ジャーニー）を作成してみました。

:::note info
インフラ中心に従来の監視をしつつも。。。
* アプリケーション層の異常も把握できるように足を延ばしたい
* 疑似的にでもユーザ体験の情報を収集し、状態を把握したい
* マイクロサービス化が進んできているため、コンテナ領域の運用も検討したい
:::

こんな感じ↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/0adeaab1-918d-8531-89c1-5b5b4289b882.png)


APM の部分については New Relic さんのラーニングパスにある Progate さんとのコラボで、学習タスク内で以下のような構成を構築し、疑似的にアプリケーションのエラーを特定/修正、およびパフォーマンスの改善までを体験できる内容になっています。<br>
***めちゃくちゃ便利だ！***

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/3fb3d3b3-31c9-0631-41f4-60d5114f47a0.png)

https://qiita.com/nr-mito/items/6ec377dc32eb9487f563




とは思いましたが、当社のような企業では外部サイトに登録し、利用するのにハードルがあったります。

みなさんの会社でもそんなことありませんか？
なので、オリジナルでハンズオン環境は考えることにしました。


# ハンズオン付き勉強会の環境と実際の流れについて
第1回目の勉強会では、ジャーニーの Step1 の概念や基礎知識の座学と一緒に Step2 の Infrastructure と APM のエージェント導入およびどういったものが見られるのかといったオブザーバビリティ初級編。

今回、座学は置いておいて、実際やったハンズオンの流れを説明します。
ハンズオンは、途中解説を挟みながら流して ***1 時間半ほど***の内容となっています。
体制としてはメイン講師 1 名、サポート講師 2 名といった 3 名体制で 20 名ほどの受講者に対して勉強会を開催しました。

ハンズオンなので、途中つまずいてしまう箇所があった場合、全体の流れを止めないために Zoom のブレイクアウトルームを使って、以下のように手が止まってしまった参加者を個別にサポート講師が高速でフォローし、本流に戻すといった形をとりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/e3bbc8e4-8f82-eef9-8774-192526bc6c1c.png)


### ハンズオン勉強会の流れ
[0. New Relic フリーアカウントの作成（参加者全員）](#0new-relic-フリーアカウントの作成参加者全員)
[1. 環境準備（Cloud9 や EC2 の初期セットアップから接続まで）](#1環境準備)
[2. New Relic Guided Install にて EC2（WordPress）へ以下インストール/設定](#2new-relic-guided-install-にて-ec2wordpressへ以下インストール設定)
　・Infrastructure Agent
　・Apache Integration
　・PHP Agent
　・Logs Integration
　・Golden Signal Alerts
[3. New Relic コンソール UI にて APM や Infrastructure 画面を確認](#3new-relic-コンソール-ui-にて-apm-や-infrastructure-画面を確認)
[4. EC2（WordPress）へ負荷をかけてみる](#4ec2wordpressへ負荷をかけてみる)
[5. ドリルダウン！システム状態やログ、Service Level 等を確認してみる](#5ドリルダウンシステム状態やログservice-level等を確認してみる)

### 各フェーズの詳細
#### 0．New Relic フリーアカウントの作成（参加者全員）
もちろん、New Relic のハンズオン勉強会をやるわけなので、以下リンク先を参考にして、事前にフリーアカウントを全参加者に作成いただいています。

https://newrelic.com/jp/blog/how-to-relic/create-new-account

#### 1．環境準備
用意した環境は以下の通り、あまり作り込みしなくとも構築できるよう既に WordPress がインストールされたAMIをAWS Marketplace から起動させ、少しハンズオン用にいじったものを Golden Image としてデプロイしています。

当該 EC2（WordPress）へアクセスするのには、オフィスや自宅（テレワーク）環境より AWS Cloud9 を経由して操作する構成としています。

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/68c5733c-903d-3ae1-03d9-4e85b0d5097b.png)


Cloud9 を返す理由として、自社のセキュリティ面で SSH や RDP 接続が安易には許可されていないため、AWS のCloud9 を通じて、設定やウェブ画面を返すような構成としました。

この辺に厳しい会社さんも結構まだあるではないかと思います。
あとは単純に今後のハンズオンや自己学習で Cloud IDE を使ってコード記述/実行/管理等を使っていけるからCloud9 を採用しています。

:::note warn 
***※※※注意※※※***
AWS Cloud9 はサービス終了予定のため、既に新しい Cloud9 が作成できないものかと思いますので、上記構成を今後組むことはできず、別の方法として、Windows Server を起動させ、セッションマネージャからのログインする形でも同様のことができるかと思います。
（個人的には Cloud9 のほうが便利あるため、AWS さんには残してほしいと願っています）
:::

上記環境は、AWS や WordPress に触れたことのない参加者も多数いるため、ハンズオン環境自体の構築は Terraform を用いて、受講人数分を勉強会開始直前に一気にデプロイしています。
`※ Terraform にて準備した流れは諸事情により省きます。`

本環境は管理を簡素化するために1つのVPC内に全受講者の Cloud9 や EC2 をデプロイしており、受講者の IAM は Cloud9 や EC2 への最低限のアクセスに制限し、MFA 設定を必須とした形で提供しています。

ちなみに用意された Cloud9 をリバースプロキシのように使うには以下のように Nginx をインストールし、server.conf にて WordPress 用 EC2 の IP アドレスを挿入することで対応可能です。

```title:nginx インストール
$ sudo yum install nginx -y
```

```server.conf
server {
    listen 8080;
    server_name localhost;
 
    location / {
        proxy_pass http://ご自身のEC2のIPアドレス;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

その後、設定を反映させてください。

```
$ sudo cp server.conf /etc/nginx/conf.d/
$ sudo systemctl restart nginx
```

上記設定後に以下のように Cloud9 の画面から Preview > Preview Running Application とクリックいただくと、対象 WordPress の画面を表示することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/3d4d741b-09bb-fec7-0eba-cc7143edb034.png)

 
無理やり画面を引っ張ってきているため、CSS ファイルなどは持ってこられておらず、以下のように所々画面落ちしていますが、勉強会の内容としては問題ないのであまり気にせず進みます。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/ffc0eccc-2f09-4207-5f8b-cd0e0b3978e9.png)


#### 2．New Relic Guided Install にて EC2（WordPress）へ以下インストール/設定
ここまで来たら以下を参考に対象 EC2（WordPress）へ Guided Install を実施。

https://qiita.com/nr-mito/items/b11c4645cfc3f5ad6d8a

```title:Guided Install
curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh | bash && sudo NEW_RELIC_API_KEY=NRAKから始まるライセンス番号 NEW_RELIC_ACCOUNT_ID=アカウントID /usr/local/bin/newrelic install –y
```
以下のようにインストールされたことを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/8561dba8-ed2b-9a53-beba-ef19739ae1ca.png)



#### 3．New Relic コンソール UI にて APM や Infrastructure 画面を確認
インストールした New Relic のエージェントにより以下のようにデータが流れてきていることを画面上で参加者に見てもらいながら、従来の監視ツールとの見た目や操作感などを体験してもらう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/32f4e17d-8b9b-9147-6245-c4e3a412a4f4.png)


#### 4．EC2（WordPress）へ負荷をかけてみる
参加者に以下のようなコマンドで CPU やメモリに負荷をかけたり、定期疑似アクセスを発生させてもらう。

```title:CPU負荷
$ stress -c 1 
stress: info: [11889] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
```

```title:メモリ負荷
$ stress -m 1 --vm-bytes 512M --vm-hang 0 –v
stress: info: [11889] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
```

```title:疑似アクセス
$ while true; do
    curl -s -I localhost | grep 200 > /dev/null && echo OK || echo NG
    sleep 1
done
```

本環境では EC2 インスタンスを t2.micro で作成しており、1vCPU / Memory 1GB となるため、New Relic 側にて負荷状況等が確認できたら、***Ctrl + C*** にて負荷を止めるようにしてください。

参加者が多かったりする場合は、AWS FIS を利用し、CPU 負荷などのアクションを設定し、タグでターゲットを絞って一括で実行してもよいと思います。

#### 5．ドリルダウン！システム状態やログ、Service Level等を確認してみる
ここまで来たら、***ドリルダウン！***
New Relic 上にて状態を見ながら、以下のように***サービスレベル ＞ トランザクション ＞ インフラ ＞ ログ***といった流れで深堀体験をしてもらいましょう！！！
（ここでやっとオブザーバビリティ的なところに触れるｗ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/64434c3c-d6e5-50e1-1376-00723dfda659.png)


# 参考情報
ちなみに本ハンズオン環境と同等の環境を構築される場合、コンピューティングリソースの目安として参加者 1 名あたり以下 AWS 側の従量課金が発生しますのでご参考まで。

***前提***
リージョン：東京リージョン
EC2：稼働時間月あたり20h程度の場合
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/49b68032-99a9-da7f-8cc7-48b393ad39ee.png)




# まとめ
今回は勉強会開催までの流れと初回のハンズオンの環境について軽く触れました。
実際、準備や計画にはそれなりに時間を要しており、勉強会をやる際に重要となるポイントは以下だと感じました。

:::note info
***重要ポイント***
* その領域に愛や熱をもった人に積極的に声をかけて絡めていく
* 全部は無理でも特定の条件や方針に特化してスコープを絞る
* いかに楽しくコミュニケーションしながら学べる環境を用意できるか
:::

自社でのハンズオン勉強会をやってみたメリットとしては以下となります。

:::note info
***メリット***
* 教えることで自分自信もアウトプットでき、知識の強化につなげることができた
* 講師含め内製で対応することで、質疑応答等のコミュニケーションが活発だった
* 説明を現場レベルや実業務に合わせた形で組み立てたため、わかりやすかったという意見も多かった
:::

実際に参加者からのアンケート結果は以下のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/e00dcb3e-3d84-829c-a84d-20b220356417.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/14aeab10-cdf0-77fa-089f-feb4c6afeda4.png)

 
コメントのインサイトとしては以下のようになっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3930209/982a9be2-3251-689c-3c2f-b7f2c18e133b.png)


***理解度はいい感じでした！内製で勉強会をやるメリットはありますね。***

この度は、New Relic の社内ハンズオンをやってみたお話でしたが、技術面は AWS 要素多めの内容なってしまってますね。とはいえ、想いとしてはどんどん New Relic 触れる方が増えて市場が盛り上がるといいなと思っていますので、ぜひ参考にしてみてください。


# おまけ
当社は実際の導入における技術支援/作業代行や社内での啓蒙活動の支援等も提供しています。ご興味をお持ちの方は以下リンク先よりお問合せください。

https://www.ctcs.co.jp/service/category/detail/31/