Oracle Cloud Infrastructure(OCI)  Logging Analytics はじめの第一歩 ~ログ収集編~

#■はじめに

Oracle Cloud Infrastructure(OCI)のLogging Analyticsは有名なSplunkと遜色ないような高度なログ分析を行うことができるツールです。
大量のログレコードから瞬時にクラスタ分類したり、特定条件での出力傾向をみたり、直感的にかつ、結構サクサク動作する良いサービスです。

分析の前に、Logging Analyticsのログストレージ内に分析対象のログデータを収集しなければいけません。

収集方法は様々あり、きれいな分析を行うためには重要ですが、たくさんの聞き慣れない用語および設定項目があり、その関係性を把握するまでの少しハードルが高い為、本記事がその近道になれば幸いです。

本記事ではその収集方法のみを記載しています。
収集した後はLogging Analytics直感的に分析してください。高度な分析は問い合わせコマンドを駆使する必要もありますが、分析方法にはここでは一切触れていません。



#■アーキテクチャ図

以下がLogging Analyticsの全容です。
ログストレージ（Log Storage)にログデータを集めることさえできれば、あとはログ・エクスプローラを用いて分析です。
コンポーネントの数だけ、設定する項目があるといえます。
Logging Analyticsのみならず、OCIの各種サービスとの連携が必須といえます。
例えば、Object Storage、Logging、ServiceConnectorHub、ManagementAgent、IAM(ポリシー)などです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266598/61bc182e-2a72-04a5-2b19-73b0564e9a33.png)

#■用語説明

## ロググループ(Log Group)
ログの実態を格納する論理的な器
ロググループはOCIのリソースとして扱われる為、ロググループ毎にコンパートメントを変更することも可能
Logging Analyticsで分析するログは全てロググループに格納しなければいけない
（※Object Storage格納のログを直接分析するとかはできない）

## ストレージ (Log Storage)
Logging Analyticsのストレージの物理的な格納領域
各ロググループの合計容量となり、課金対象の容量が表示される
自動パージを設定する場所はココ

## エンティティ(Entity)
Management AgentがインストールされたOS　
その他、以下が自動でエンティティとして登録される
- Logging AnalyticsからObject Storageの読み取りをIAMポリシーで許可させると、バケット名がエンティティとして追加される 
- ServiceConnectorHub でLogging Analyticsへ連携すると、ソースのLoggingのログ名がエンティティとして追加される
※自動作成されたエンティティを削除してはなりません。

## パーサー(Parser)
非構造化ログ（通常のファイルログ）や、準構造化ログ（JSON,XML)を構造化するために、正規表現で区切りや日付など、カラムを指定していく

## アップロード(Log Upload)
手動でファイルをアップロードする
生データや圧縮されたデータをアップロード可能

## ソース(Log Source) 
2021/07時点で213種類
分析するログファイルに対してどのような定義を行うかを指定する
事前定義済みのものがたくさん存在する（すでにパーサーもセットで定義されている）

### ソースタイプ：
Log Source内で指定する設定項目
- Database: SQL文で取得した結果をログとして記録
- ファイル：一般的なテキスト形式のログ JSONやXMLなどの非構造データもこちら
- SyslogLitener：エンティティを介して物理スイッチからのSyslogなどを受信するような時に利用
- Windows Event System：Windows OSのイベントログを受信する際に利用

他ソース内では以下を指定する
- エンティティ・タイプ（必須）
- パーサーの指定（必須）
- データマスクの可否（Option)、
- 拡張フィールド（Option)：を使用してデータを抽出１フィールド（カラム）内対して、更に正規表現で意味を付与する（例えば、Messageの中特定の文字列があれば所定の形式にする）
- エンリッチメント（Option)： 関数定義を使用してエンリッチメント、IPアドレスに対してジオロケーションの定義
- ラベル（Option)：フィールドに対してどのような条件でラベルを付与するかを定義（便利なので、ほぼ必須で設定する）


#ログ収集方法（超概要）

## 手動アップロード
GUIコンソールや、CLI、RESTでログファイルをアップロードする
OCIドキュメント：[オンデマンド・ログのアップロード](https://docs.oracle.com/ja-jp/iaas/logging-analytics/doc/upload-logs-demand.html)

## OS内のログ
Management Agentと、ログソースを介して、ロググループにログを収集する
大まかな設定はLog Source側で行う
OCIドキュメント：[ホストからの連続ログ収集の設定](https://docs.oracle.com/ja-jp/iaas/logging-analytics/doc/set-continuous-log-collection-form-your-hosts.html)
※Loggingのカスタムログ（OSログ収集）を、ServiceConnectorHubで連携はおそらくできない（推測）

## Object Storageに格納されたログ
認可設定、IAMポリシーにて、Logging Analyticsサービス自体に、Object Storageの読み取り権限を付与する
その後、送信元バケット、送信先ロググループ、ログソースなどを指定するような設定を行う（※CLIでのみ設定可能）
OCIドキュメント：[OCI Object Storageバケットからのログの収集](https://docs.oracle.com/ja-jp/iaas/logging-analytics/doc/collect-logs-your-oci-object-storage-bucket.html)

## OCI Loggingに格納されているログ
ServiceConnectorHubを使って、Logging Analyticsにログデータをロググループに直接連携させる
ログソースの定義が不要で分析可能である（ログソース相当の定義がLogging Service Logのソースの内容に応じてされているものと思われる）
OCIドキュメント：[サービス・コネクタを使用した他のOCIサービスからのログの収集](https://docs.oracle.com/ja-jp/iaas/logging-analytics/doc/ingest-logs-other-oci-services-using-service-connector.html)


#参考情報

[事前定義済みのログソース(適宜更新される)](https://docs.oracle.com/ja-jp/iaas/logging-analytics/doc/oracle-defined-sources.html)
[事前定義済みのログパーサー(適宜更新される)](https://docs.oracle.com/ja-jp/iaas/logging-analytics/doc/oci-parser-details.html)