DatadogでiPaaS（HULFT Square）の処理ログを可視化したぜ

## はじめに!
本記事では "ゆる～く" ご紹介をします。

:::note warn
以下内容はご参考となりますので、実際にご検証、マニュアルのご参照をお願い致します。
:::
:::note warn
また弊社サポートへお問い合わせいただいても
お答えできない場合がございます🙇
是非コメント欄でご意見いただけますと幸いです。
:::

今日出てくるサービスについては以下公式HPへ
- [Datadog](https://www.datadoghq.com/ja/)
- [HULFT Square](https://www.hulft.com/service/hulft-square)

そもそもiPaaSってという方いらっしゃるのではないでしょうか？？
そんな方は是非[こちら](https://www.hulft.com/column/glossary-05)へ。

<font color="MediumSeaGreen">**細かい話はいいから、結論どんな感じ？**</font>
<font color="MediumSeaGreen">**という方はこちらまで[スキップ！！]()**</font>

## さて今日のお題
私自身はDatadog初学者でして、
お客様から「うちはログ監視をDatadogで統一している」という話をお聞きしました。

<font color="MediumSeaGreen">**「なんかDatadogってどんなログも可視化できそうだし、
HULFT Squareの処理ログもDatadogで見れたら便利じゃね？」**</font>

と思い本日のお題に行きついております。

### **内容はこんな感じ**
![ざっくり概要.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/a6030fcb-9429-0df4-9298-9e45264ccf80.jpeg)

図の通り、まずはBOXからファイルを取得します。
そして**BOXダウンロード時の処理ログをDatadogにて可視化**というものです。

:::note info
今回はやってみたなので、BOXから1ファイルのみ取得する処理としています。
複数ファイル取得する場合でも同様にDatadogで可視化が可能です。

またログの渡し方は汎用的なものなので、
**他サービスとの連携ログやETL処理ログも同様に連携可能です。**
:::

:::note info
ちなみにHULFT Squareは[BOXエコソリューション](https://www.boxsquare.jp/hubfs/resource/book/index.html#target/page_no=62)に登録されているので、
HULFT SquareからのAPIコールは非課金となります。
BOX連携はこちらの記事もご参考までにどうぞ。
⇒[Boxのフル活用法とは](https://qiita.com/sugimon/items/1f0dd244e7ce0b97d729)
:::


## まずはHULFT Squareの処理をご紹介

- **処理内容はこんな感じ**
![スクリプト全体像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/bbe8d569-d4de-6282-1d86-fc806f96a0b4.png)

まず左側　"Start"　の直後に存在する　"try_catch"　では[例外監視](https://www.hulft.com/help/ja-jp/HULFTSquare/Content/Designer/Connector/flow_monitor_exeption.htm)を行っています。

上段の処理が失敗した場合は、下段の処理が実施されるとイメージください。
(例えば、NWエラーやBOXサーバがダウンしている時（あるのか？）とかとか)

- **BOXに関する処理は赤枠部分**
![スクリプト_BOX.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/68917323-0124-5a5c-2d0c-75b9f7c7c9e2.png)

"BOXクエリ指定" にてBOX上のどのファイルを取得してきてくれ～を指定。
"BOX_GET_結果" では "BOX_GET" の実行結果を[スクリプト変数](https://www.hulft.com/help/ja-jp/HULFTSquare/Content/Data_Integration/Detailed/script_variables.htm)に代入しています。

<!--
:::note warn
ちょっと細かい話
（HULFT Squareの細かい仕様に興味がある方向けです。）

【前提】
HULFT SquareのBOXコネクタは1ファイル取得に失敗しても
スクリプトエラー（処理全体の実行失敗）とはなりません。
これは複数ファイルの アップ / ダウンロードを考慮しています。（たぶん）
:::
-->

- EventBridge連携は緑枠部分
![スクリプト_EventBridge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/93b01ab1-1b80-4a3c-83d2-afc03aefe4c8.png)
ログ連携にてBOXダウンロード処理の結果をEventBridgeへ連携しております。

## AWSの設定
構成要素は上図の通り、「EventBridge」、「CloudWatch」、「Lambda」を利用しています。

#### EventBridgeのイベントパターン

```json-doc
{
  "source": ["my.custom.source"],
  "detail-type": ["MyDetailType"],
  "detail": {
    "result": [{
      "exists": true
    }],
    "succeeded_count": [{
      "exists": true
    }],
    "failed_count": [{
      "exists": true
    }],
    "skipped_count": [{
      "exists": true
    }],
    "message_category": [{
      "exists": true
    }],
    "message_code": [{
      "exists": true
    }],
    "message_level": [{
      "exists": true
    }],
    "error_type": [{
      "exists": true
    }],
    "error_message": [{
      "exists": true
    }],
    "error_trace": [{
      "exists": true
    }]
  }
}
```

~~とりあえず~~ 各項目に任意の文字列が入るように "exists"：true としています。

#### EventBridgeのターゲット
CloudWatchのロググループを設定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/828c68c5-abe5-1fe7-dd46-3d863027790f.png)

:::note info
Cloudwatchの設定は省略!!!!
:::

#### Lambdaコード
Datadog公式がCloud Formationにて用意してくれているので、
そのまま使わせていただきました！
- これ⇒[Datadog Forwarder](https://docs.datadoghq.com/ja/logs/guide/forwarder/?tab=cloudformation)

:::note warn
苦戦した点・・・
Datadog Forwarderの設定時にCloud Formationを利用する場合。
パラメータ設定にDbsiteがあるかと思います。
利用しているDatadogのサーバを正しく記載しないと`The API key is not valid.`
というエラーが表示されます。

私の場合は、`ap1.datadoghq.com`と設定しました。
(Datadog Forwarderのサイト下部に記載があるんですけどね)

[参考にしたサイト様](https://gonkunblog.com/datadog-forwarder-settings/1218/)
:::

## Datadogの設定

[こちら](https://docs.datadoghq.com/ja/logs/guide/send-aws-services-logs-with-the-datadog-lambda-function/)に記載の通り、Datadog上のAWSインテグレーションページで
LogCollectionの設定を行います。

そうして今回はこんな感じで可視化しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763794/ecb70d24-6cf2-015e-4857-3155f240aaf9.png)

ログ内のMESSAGEカラムに格納されている値を以下のようなクエリで絞込し、
円グラフで表示させています。

クエリ
`@detail.MESSAGE:(skipped OR SUCCEEDED or Component_Error)`

## 全体説明用の動画（忙しい人向け）

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">HULFT Square ! Datadog !<br>ログ可視化したぜ<br><br>処理実行は1:09~~<a href="https://twitter.com/hashtag/HULFTSquare?src=hash&amp;ref_src=twsrc%5Etfw">#HULFTSquare</a> <a href="https://twitter.com/hashtag/Datadog?src=hash&amp;ref_src=twsrc%5Etfw">#Datadog</a> <a href="https://twitter.com/hashtag/HULFT?src=hash&amp;ref_src=twsrc%5Etfw">#HULFT</a> <a href="https://twitter.com/hashtag/dx?src=hash&amp;ref_src=twsrc%5Etfw">#dx</a> <a href="https://t.co/ANXalJT2x9">pic.twitter.com/ANXalJT2x9</a></p>&mdash; さんまの塩焼き (@sanmashioy4ki) <a href="https://twitter.com/sanmashioy4ki/status/1843124233930748152?ref_src=twsrc%5Etfw">October 7, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以上！