Dr.SumのログをDr.Sumに取り込んでログ情報を分析しよう〜バッチでもDataSpider（Dr.Sum Connect）でも〜

# 製品について
### Dr.Sum とは

https://www.wingarc.com/product/dr_sum/

<details><summary>【詳細はこちら】 Dr.Sum は10億件のデータを1秒台で集計できる超高速データベースツールです。</summary><div>
高速のディスク集計と、ハイブリッドで使える超高速のメモリ集計をつかいながら、最適な運用コストでのパフォーマンスを実現します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/e8924330-f537-38f2-e276-ecdd0d96341d.png)

また、Dr.Sumは集計速度だけでなく、データベース構築経験の少ない方でもGUI操作でDBをつくったり、データを取り込んだりできます。
データベース周りにそこまで強くないぼくのような人間でも、気軽にデータハンドリングができるところが素敵です。

さて、Dr.Sumという製品は単純にデータベースがあるだけではなく、様々なオプション製品を加えることで、多様な使い方が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/12be6f13-7354-f58a-773c-b43934d30666.png)

詳しくは公式ホームページをご参照いただきたいのですが、
✅ データを抜いて
✅ データを加工して
✅ データを貯めて
✅ データを高速集計する
ことが可能となります。

[製品の一覧はこちら](https://www.wingarc.com/product/dr_sum/lineup/index.html)

</div></details>


### Dr.Sum Connect とは

https://www.wingarc.com/product/dr_sum/lineup/connect.html

<details><summary>【詳細はこちら】 Dr.Sum Connectはデータを抽出・加工・取り込みをするETLツールです。</summary><div>


下図のように様々な環境からデータを取得して、加工して、Dr.Sumに投げ込むことのできるツールです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/f7ac2d53-4b95-063c-27af-2fe4a07da4de.png)

エラーになったらログを吐いたり、メールを飛ばしたり、だいたいGUIで操作できるので、プログラムを書かずとも連携の仕組みを作ることができます。

基本的なスクリプトのつくり方についてはこちらの解説記事をお読みください。
[Dr.Sum ConnectをつかったETLのスクリプトのつくり方](https://qiita.com/Ryo---san/items/5c952ed15a6adb576547)

</div></details>

Dr.Sum ConnectはDataSpiderのOEM製品です。

# 最初に
みなさんはログ情報の分析をしていますか？　テキストで出力されるログを眺めたりするかもしれませんが、
・ここ最近のエラー傾向
・特定のエラーが起きる曜日や時間帯
などログ情報を分析するためにはデータベースに取り込んだ方が分析がしやすいです。

今回はDr.SumのログをDr.Sumに取り込んで、テーブルに貯める方法を紹介します。

# 前提
今回はバッチでログをダウンロードして、ダウンロードしたCSVをDataSpiderで取り込んでいます。
バッチでCSVを作った後に後続処理で仮想テーブルからのDr.Sumへの取り込みをすれば、バッチだけで完結することも可能です。

ぼくの場合はDataSpiderで別のログをDr.Sumに取り込む仕組みを作っているので、今回もDataSpiderで統一しました。

https://qiita.com/Ryo---san/items/064d9d3e6504fd772114

## まずはパラメーターファイルをつくる
Dr.Sumのログ出力の方法は簡単につくれます。
下図ですべて説明ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/4767c789-6b71-e5f2-44ae-90d4839d78a9.png)

重要なポイントはログ種別と項目です。
いろんなログをひとつのCSVにしてダウンロードすることができるのですが、ログの量が多くなるので、僕はテーブルを分割して取り込んでいます。
ここではOLAPログを指定しています。

## つぎにバッチファイルをつくる
バッチファイルは先ほどの図の実行例を参考にしたり、マニュアルを参考にしてみましょう。

https://cs.wingarc.com/manual/drsum/5.5/ja/UUID-c758291c-0263-1294-0ba8-11f12bf9bc35.html

```bat
@echo off
rem ##############################################################
rem DS_LogDownLoad_DB.bat
rem DataSpiderから呼び出されるログダウンロードバッチ
rem ##############################################################

set COMMAND_PATH=%DWODS56_TOOLS_PATH%\cmd\JPN

rem OLAPログ
call "%COMMAND_PATH%\dwlog_download" "localhost" 6001 %1 %2 "C:\cmd\bat\parameter\olap.lds" "normal" "C:\data\InputFile\DrSum_Log\OLAP.csv" %3 %4 "100000000"
@echo off
if not %errorlevel% == 0 goto error

goto end

:error
rem ##############################################################
rem エラー処理
rem ##############################################################

rem 異常終了は1を返す
exit /b 1

:end
rem ##############################################################
rem 終了処理
rem ##############################################################

rem 正常終了は0を返す
exit /b 0
```

%1と%2はDataSpiderからパラメーターを渡します。Dr.Sumのログインユーザーとパスワードですね。
%3と%4はログ取得の開始日と終了日です。
DataSpider側の設定は下図のような感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/2e440c8a-d29f-5506-9e5d-07755aef1ade.png)

## DataSpiderのスクリプトをつくる
DataSpiderのスクリプトは下図のような感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/abe2ee98-b664-eef9-c5fc-2c208e4c8d26.png)

ちょっと楽しています。
本来は同じバッチに対して、パラメーターを変えてキックするところですが、１回のバッチでCSVを一括で落とす処理にしています。

またERRORログとOLAPログのところにマッピングを入れています。
マッピングの内容については後述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/6e20cb9f-e7d8-00ec-1c29-223b731b402a.png)
ちょっと特殊なのが、バッチの開始日時、終了日時のフォーマットが hh:mm までなのに対し、データはミリ秒まで入っているので、バッチをキックするスクリプト変数（startDate,endDate）と、テーブルの削除に使うスクリプト変数（DelstartDate,DelendDate）を分ける必要がありました。

バッチ起動の変数の受け渡しはこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/2e440c8a-d29f-5506-9e5d-07755aef1ade.png)

また各テーブルに対し、削除処理が２回入っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/86efe4a7-c18a-3e25-ce11-6f25dd66626a.png)

最初の削除はログを24ヶ月分でキープするためです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/fa3cf131-a041-ed90-89ac-b1cef709ab4c.png)

次の削除で、ログで抽出した分だけ（デフォルトは7日前から今に設定）削除をしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/289ac8be-6938-66c9-feb2-3fe46ffe625e.png)

あとはCSVを読み込んで、テーブルに取り込むだけですね。

ここのテーブル取り込みで１点注意です。
Dr.Sumも文字列型は65,535文字まで入りますが、ログの中にはたまに65,535文字を超える文字列が入るときがあります。このままだと取り込みエラーになってしまうのですね。
さすがに65,535文字以上の文字列は分析に必要ないので、65,535文字を超える可能性のある項目には制限をかけましょう。

こちらでは以下の項目は65,535文字以上は取り込まないようにしています。
・ERRORログ　メッセージ
・OLAPログ　行項目
・OLAPログ　列項目
・OLAPログ　集計項目
・OLAPログ　抽出条件式
・OLAPログ　抽出条件式（ドリルダウン／アップ）

上記の項目には数のように左文字列65,535文字のデータを取り込むようにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/657414/37262654-8d42-b5a0-6507-4485c1479b41.png)



以上でDr.Sumのログデータ取り込みの説明は終了です。


# 最後に
ログデータは適切な管理をして取り込みをすれば、有用な資産になります。
不要不急ですぐに必要ではないと思いますが、いざというときや何かあった時の調査に役立ちますので、ぜひ参考にしてデータを定期的に取り込むようにしてください。

またDataSpiderの開発コスト・運用コストを抑えたスクリプトの作り方について下記の記事で説明をしていますので、あわせてご確認いただけますと幸いです。

https://zenn.dev/ryosanbimania/articles/17c26f39023f74