【UiPath】Log Parser Studioを利用してIISログを分析する方法

## 概要
Log Parser Studioを利用してIISログを分析する方法についてご説明します。
## はじめに
今回はオンプレミス版Orchestratorにログインしたクライアントを確認する方法を例にご説明します。

## IISログとは？
IISログは、サーバー上で発生したさまざまなイベントやアクティビティに関する情報を記録したログです。サーバーの監視、トラブルシューティングなど、さまざまな目的で使用されます。
具体的には以下の情報が記録されております。

::: note
- サーバーにアクセスしたクライアントのIPアドレス
- クライアントのリクエストの日時
- クライアントが使用したHTTPメソッド（GET、POST）
- サーバーのHTTPレスポンスステータスコード（200：成功、404：ページが存在しない）等
:::
## 事前準備：IISログの取得
- デフォルトではOrchestrator端末の以下の場所にあるログになります。
>C:\inetpub\logs\LogFiles\W3SVC2
- u_ex〇〇〇〇〇〇.logがIISログとなります。〇〇〇〇〇〇にはYYMMDD形式で日付が入りますので、確認したい日付のログを選択ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/dfa664b2-36b4-8686-e8bc-6a700128eab4.png)
## Log Parser StudioによるIISログの確認方法
### Step1.Log Parser Studioのインストール
- Log Parser Studioは以下のMicrosoft社のURLよりインストール可能です。
https://techcommunity.microsoft.com/t5/exchange-team-blog/introducing-log-parser-studio/ba-p/601131
※上記URLの添付資料LPSV2.D2.zipを解凍してご利用ください。
### Step2.IISログファイルを開く 
- Logボタンを押下し、Add FilesでIISログ(ここではu_ex230413.log)を追加し、チェックを入れ、OKを押下ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/f2960557-2afe-5d56-3be6-55322e9044ad.png)
### Step3.新しいクエリを作成
- Create a New Queryをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/80b5798d-0f89-15d1-39a8-9d39d3a5cb98.png)
- Log TypeでIISW3CLOGを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/b9bcdc20-6404-f3cb-4f26-baa8c12dc6ff.png)
- ツールの下部がクエリエディタ部分です。こちらに以下のクエリを入力します。
```
SELECT * FROM '[LOGFILEPATH]'
WHERE
 cs-uri-stem LIKE '/identity/api/Account/Login'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/099331ad-ddb2-ec79-696f-a9fed555e358.png)

::: note
* こちらのクエリは、指定された[LOGFILEPATH]というログファイルパスの中から、cs-uri-stemフィールドが'/identity/api/Account/Login'に部分一致しているエントリを抽出するためのSQLクエリです。
* WHERE句：検索条件の指定。
* cs-uri-stemフィールド：クライアントがリクエストしたURI。
* '/identity/api/Account/Login'：クライアントがオンプレミス版Orchestratorにログインする際のURI。
:::

### Step4.クエリの実行
* クエリを実行した結果がツール上部のテーブルに表示されます。
* c-ip列に表示されているipアドレスがOrchestratorにアクセスしたクライアントのipアドレスとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/7baecaca-05a5-81ed-429e-ff66266aff8a.png)

## その他サンプルクエリ
### 1.特定のクライアントを絞り込むクエリ
特定のクライアントのみ絞り込みたい場合は上記Step3で以下のクエリを入力ください。
```
SELECT * FROM '[LOGFILEPATH]'
WHERE
 cs-uri-stem LIKE '/identity/api/Account/Login'
 AND c-ip = 'xxx.xxx.xxx.xxx'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/e112ac54-635c-476d-4c0b-682848443df7.png)

::: note
* 'xxx.xxx.xxx.xxx'に抽出したいクライアントのIPアドレスを入力することで絞りこみが可能です。
* sc-statusフィールド：HTTP レスポンスステータスコードと同義です。
:::

### 2.日付を絞り込むクエリ
```
SELECT
TOP 5 *
FROM 
  '[LOGFILEPATH]' 
WHERE
  TO_TIMESTAMP(date, time) 
  BETWEEN TIMESTAMP('2023-05-19 00:00:00','yyyy-MM-dd hh:mm:ss') 
  AND TIMESTAMP('2023-05-19 01:00:00','yyyy-MM-dd hh:mm:ss')
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/46a2b24d-d3ac-fed2-d651-8edd3fdecba1.png)

::: note
* 上記クエリで特定の日付（この例では2023-05-19 00:00:00~01:00:00）を絞り込むことが可能です。
:::

### 3.HTTPレスポンスステータスコードを絞り込むクエリ
HTTPレスポンスステータスコードの絞り込みは以下のクエリで可能です。
#### 200(成功)以外の全てを表示するクエリ
```
SELECT TOP 10 * FROM '[LOGFILEPATH]'
WHERE sc-status <> 200
ORDER By sc-status DESC
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/29f5d532-722b-b148-f73a-1d2aa08b9249.png)

::: note
* TOP句を使用し、TOP 10と記載することで10行のみの表示が可能です。
* sc-status <> 200では、レスポンスコード：200以外を全て表示します。
* ORDER By sc-status DESCでは、レスポンスコードを降順で表示します。
:::
##### ご参考：HTTPレスポンスステータスコード
| レスポンスステータスコード | 内容 |
| ---- | ---- |
| 1XX台 | 情報 |
| 2XX台 | 成功 |
| 3XX台 | リダイレクト |
| 4XX台 | クライアント側のエラー |
| 5XX台 | サーバー側のエラー |

#### 4XX台を全て表示するクエリ
```
SELECT TOP 10 * FROM '[LOGFILEPATH]'
WHERE sc-status >= 400
AND sc-status < 500
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/531fe7ff-7bce-1608-9628-ce6c2b48a752.png)

::: note
* WHERE句でANDを利用することでレスポンスコードの絞り込みが可能です。
* 上記クエリでクライアントエラーを全て表示できます。
:::

#### 5XX台を全て表示するクエリ
5xx台の絞り込みもサーバー側のエラーが表示されていることトラブルシューティング時に重要です。
```
SELECT TOP 10 * FROM '[LOGFILEPATH]'
WHERE sc-status >= 500
AND sc-status < 600
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/e2f7fd30-065b-ab2e-8a71-c37dc58212bb.png)

::: note warn
* 当方の環境ではサーバー側のエラーがないため、このような場合はクエリ実行後も上記の通りテーブルは表示されません。
:::

### 4.処理に時間を要したリクエストを絞り込むクエリ
```
SELECT TOP 10 * FROM '[LOGFILEPATH]'
WHERE time-taken >= 1000
Order BY
time-taken DESC
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/bded42e1-02dd-2c8e-59cc-7d68c746e42c.png)

::: note
* time-takenフィールド：処理に要した時間
* リクエストのtime-takenが大きい場合（例：1000ms = 1秒）、処理に時間がかかっておりパフォーマンスの観点で問題があることがございます。
:::

::: note warn
* なお、cs-uri-stemフィールドに記載されているsignalrにつきましては、time-takenの値が大きくなることがございますが、こちらはロボットとOrchestrator間でリアルタイム通信を行う機能で特に問題ございません。
:::


### 5.件数を確認するクエリ

```
SELECT
  COUNT(*)
FROM
  '[LOGFILEPATH]' 
WHERE 
  cs-uri-stem LIKE '/identity/api/Account/Login'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334078/b9f660e6-5314-a815-4108-e228833fab3f.png)

::: note
* COUNT(*)で件数を確認することが可能です。
* 上記クエリでOrchestratorにアクセスしたリクエストの件数を取得できます。
:::

## 参考：ExcelでIISログを分析する方法
- 以下のOrchestartorトラブルシューティングガイド記載の4.IISログをExcelで分析する方法でもOrchestratorにログインしたクライアントの確認が可能です。
- ※c-ip列に表示されているipアドレスをご確認ください。
https://www.uipath.com/ja/community-blog/knowledge-base/uipath-orchestrator-trouble-shooting-guide

## 環境
- オンプレミス版Orchestrator