Node-RED + Datadog でWEBアプリ制作に挑戦

# こんな使い方する人はたぶん世界で私だけ...
### Datadog でWEBアプリ制作に挑戦した話です
Datadogは本来、サーバーやクラウドを監視・モニタリングしてIT運用するためのオブザーバビリティサービスであり、DatadogでWEBアプリを制作する人はいないと思います。Datadog で何か楽しいことができないかなと新しい使い方を導くためにWEBアプリの制作に挑戦してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/2bb54807-8ceb-8ac0-4888-7c17053c6400.png)


## Datadog: Free 料金プラン
Datadog は最大5台までのサーバーと１日間のメトリックスを保持できるずうっと無料のプランが用意されています。また、サインアップしたら14日間は全ての機能を無制限に試すことができます。この無料プランで挑戦します。

## 完成イメージ
アンケート投稿はスマホ画面、アンケート集計結果はPC画面サイズを想定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/f2625ea2-7949-1629-2b32-42eccae42191.png)

## アプリ構成
アンケート投稿アプリは仮想サーバーのNode-REDで制作し、アンケート集計をDatadogダッシュボードで実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/ab0bd4da-b244-0ded-1c7b-1a964820693d.png)

投票したアンケートの値がログファイルを経由して、Datadogインテークサーバーに送られて監視メトリックとなり、それを集計することでアンケートの投票結果とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/a7506d37-0f2c-06da-b002-e327b42430ec.png)


## （１）アンケート投稿アプリ
IBM Cloud 仮想サーバー（Ubuntu）でNode-REDを稼働させます。Node-REDのダッシュボード機能は、WEBブラウザでボタンやゲージ、グラフなどIoT向けのGUIを表示させることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/90bc2e11-dc4e-0633-3a48-5a934f193538.png)


#### 初期設定
1. 仮想サーバー（Ubuntu）の立ち上げ
3. Datadog Agent のインテグレーション
4. Node-RED のインストール

### 仮想サーバー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/e779de3f-a67c-6de4-91b5-b11b9369ed0e.png)

IBM Cloud 仮想サーバーの最小スペックで安価に実行します。最小スペックは Classic 一時利用で1vCPU, 1GBメモリの時、１日あたり$0.24（円安160円/$）で換算して38円/日で利用可能。月額(744h)換算で1,190円から。ClassicはVPCやサブネット,VLANの初期設定が不要ですぐにインターネットに公開するWEBを立ち上げることができます。
本番用途なら VPC 仮想サーバー 2vCPU, 4GBメモリを月額割引の$80.22で利用可能。可用性は［[自動再始動](https://cloud.ibm.com/docs/vpc?topic=vpc-host-failure-recovery-policies&interface=ui)］を選ぶと、ホストとなる物理サーバーに障害が発生した場合は別の正常な物理サーバーに自動的に移行されて再始動してくれる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/8fb88e49-9b22-2056-2f09-b37313f1a1cf.png)


### Datadog インテグレーション
Docker Agent を起動するとすぐにメトリック取得が始まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/5a3a1718-b2f8-191e-7594-e346b7acced8.png)


### Node-RED
IoTをローコードで開発できるツール。Node.jsが動く環境であれば IBM Cloud じゃなくてもどのクラウドでも動きます。ラズベリーパイでも動きます。Node-REDを起動したらフローを制作します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/e72d7b2c-05ad-20e2-4d27-1d86bfdfdf0f.png)

### ローコード開発
1. Node-RED ダッシュボードに表示するボタンを配置。ボタンが押されたら、ログを出力するシェルスクリプト（sendmtrx.sh）をコーディング。実行権も付与する。
2. WEBアプリは Node-REDダッシュボードで実行。ボタン[AWS]が押されたら[1]を引数にシェルスクリプトを呼び出す。ボタン[Azure]なら[2]を引数に以降、[5]まで続く。
3. シェルスクリプトが呼ばれたら[1～5]の引数に対応するリストの[A]～[E]がログに出力される。Datadogエージェントはログファイルを監視しており、ログを取得したらDatadogインテークサーバーにテキストログを送信する。
4. Datadog管理ポータルで Logs Pipelines を構築する。Logs Pipelines の Grok Parser 機能は、テキストログをパースしてJSON形式の値［例：kanoAnswer］を取得し、Generate Metrics でカスタムメトリック［例：Question.Answer］を生成できる。この時、カスタムメトリックには[A～E]の値が保持される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/819f5666-b22a-0eac-3421-eb388e6c31da.png)


## （２）アンケート集計アプリ
Datadog ダッシュボードにメトリック集計結果を表示します。Metrics Explorer でカスタムメトリックの数を集計しました。この例では、一定時間内のカスタムメトリック［kanoAnswer］=［A］となる数を合計して［3］を表示しています。同様に［B］の合計は［4］個といった集計が続きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/6b03f7a7-022a-d511-a6f8-60001546bc31.png)

## アンケートを実践する
Datadogユーザー会（JDDUG）の参加者30名近くがスマホでアンケートに回答。推しのクラウドを連打して、その場でアンケート集計まで自動実行できました！ 回答数が3,000個近くあってすごい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/1d4cd45a-6559-f667-739f-78043933f721.png)


## まとめ
- IBM Cloud で稼働させた Node-RED でアンケート投稿アプリを作れました
- Datadog でアンケート集計サーバーを作れました
- 会場のみんなが元気玉のようにメトリック送信に協力くださり、ありがとうございました


全部で5,000個近くのメトリックを頂きました。ここではグーグルが一番人気でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/4c5a30c8-1a32-73d1-4c16-5979a9e79eee.png)