OCI VMアプリケーションログから特定のメッセージを検出してアラート作成

## 概要
OCI上に作成したLinux VMのアプリケーションログから特定のメッセージを検出してアラート作成しました。

## 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/14525957-acb6-dd7a-bc92-e3c930056898.png)

## 事前準備
作成するために以下を準備します。
■Linux VM
* エージェントの稼働確認
　OCIメニューからコンピュート>>インスタンス>>対象のVMを選択してOracle Cloudエージェントタブを選択します。カスタムログのモニタリングが実行中であることを確認します。
　実行中でない場合は以下のリンクを参考にエージェントを導入します。
　エージェント管理
　https://docs.oracle.com/ja-jp/iaas/Content/Logging/Concepts/agent_management.htm

* アプリケーションログを/var/log/ApplTest.logに生成
  ログメッセージは検証を効率的に行うために以下のように定期的に生成します。
``` VM.
[root@linux log]# echo `date` Appl Test Message >> ApplTest.log
[root@linux log]# cat /var/log/ApplTest.log
Thu May 4 00:58:22 JST 2023 Appl Test Message
Thu May 4 01:07:36 JST 2023 dummy
Thu May 4 01:07:39 JST 2023 dummy
Thu May 4 01:07:44 JST 2023 Appl Test Message
Thu May 4 01:08:05 JST 2023 dummy
Thu May 4 01:21:24 JST 2023 dummy
Thu May 4 01:22:10 JST 2023 Appl Test Message
Thu May 4 01:41:20 JST 2023 dummy
Thu May 4 01:42:08 JST 2023 Appl Test Message <-追加されたメッセージ
[root@linux log]#
``` 
■動的グループの設定
対象VMを含めた動的グループを作成します。
動的グループはログを収集するVMを指定する時に使用します。
* OCIメニューからアイデンティティとセキュリティ>>ドメイン>>ドメイン選択(通常はDefault)>>動的グループを選択
* 動的グループの作成を押下し名前、説明、一致ルールを作成
ルール例: Any {instance.id = 'ocid1.instance.oc1.iad..exampleuniqueid1', instance.compartment.id = 'ocid1.compartment.oc1..exampleuniqueid2'}

参考
動的グループの管理
https://docs.oracle.com/ja-jp/iaas/Content/Identity/Tasks/managingdynamicgroups.htm

## 作成
■ログ・グループ作成
ログが所属するグループを作成します。
OCIメニューから監視および管理>>ロギング>>ログ・グループを選択しログ・グループ作成を押下します。
名前を入力して作成を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/b93771fc-52fc-c21e-62fc-da336f3dfd3f.png)

■ログ作成
VMに導入されたOracle Cloud Agentを通してログを収集します。
OCIメニューから監視および管理>>ロギング>>ログを選択しカスタムログ作成を押下します。
ログ名、所属するロググループを選択したカスタムログの作成を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/a7286060-864f-f674-471c-09388ce1d2a1.png)

エージェント構成を作成し以下を入力して構成作成を押下します。
* 構成名
* 説明
* ホストグループ：
    ログを収集するVMを動的グループに定義します。
    また、動的グループ内のインスタンスにロギング・サービスの使用を許可するポリシーを作成します。
     [動的グループを持つターゲット・ホストの選択](https://docs.oracle.com/ja-jp/iaas/Content/Logging/Concepts/agent_management.htm)
* 入力タイプはログ・パスを指定
* 名前
* ファイルパス：
　収集するログ名を指定します。今回は/var/log/ApplTest.logを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/5e6ca9ef-4086-359f-0e02-28e9ae12db8c.png)

しばらく経つと収集されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/ef9e3cdf-3342-442f-7816-7276c849e953.png)

■サービスコネクタの作成
ログ設定で収集したログから特定条件に合致したメッセージがあるとカスタムメトリックを作成するサービスコネクタを作成します。
OCIメニューから監視および管理>>ロギング>>サービスコネクタを選択しサービスコネクタ作成を押下します。
* コネクタ名
* サービスコネクタの構成
　ソースはロギング、ターゲットはモニタリングを選択します
* ソース構成で作成したログを選択します
* ログフィルタタスクとして以下を設定します
   data.message=\*Appl Test Message\*
  Appl Test Messageが含まれるメッセージをフィルタします
* ターゲット構成でメトリックネームスペースcustom_metrics, メトリック名を指定します。
* ディメンションの追加を押下してディメンションはsource(VM名)を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/ddbb645a-1dfe-4d5c-3b2a-0e91584bb476.png)

■アラームの作成
OCIメニューから監視および管理>>モニタリング>>アラーム定義をアラーム作成を押下します。
以下の項目を設定しアラーム作成ボタンを押下します。
* アラーム名
* メトリックネームスペース　custom_metrics
* メトリック名　定義したメトリック名
* 間隔
* トリガールール　
　検出すると値は1になるため1と等しいことを条件とします
* アラーム通知の定義
　トピック(通知先)作成されていない場合はトピックの作成にて作成します。
    
    * トピック名と通知先アドレスを指定します。
    * 通知先にメールが届くのでConfirm subscriptionをクリックします
    
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/e640e9c7-43d6-7cc9-d683-d547b774eb80.png)

■稼働確認
事前準備で設定したVMログメッセージを生成すると以下のようにアラートを検知してメール送信されます。
定義したアラームの状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/34a6f580-e8e0-6cd3-93d9-974ae7f0ccbd.png)
受信したメール
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/cdeab358-9e73-528e-538e-8b378a540361.png">

## Windowsサーバーのログ取得
エージェント構成でWindowsイベントを指定することにより、システム、セキュリティおよびアプリケーションイベントが収集可能です。
LinuxとWindowsを同じ動的グループに設定するとログ収集に問題が発生するため、Linux/Windows別々の動的グループを設定する必要があります。
参考URL
エージェント管理
https://docs.oracle.com/ja-jp/iaas/Content/Logging/Concepts/agent_management.htm

## 考えられるユースケース
* Webアプリケーション等のアプリケーションログから特定メッセージを監視
   ただし、VMのエージェントの収集タイミングにより検知までの時間がかかるため、速達性を求められるアラートは別の方法を検討する必要があります。
* ディスク使用率監視
　ディスク使用率を定期的に確認して閾値を超えた場合に/var/log下にメッセージを生成するような仕組みがあればディスク使用率監視が可能になります。