OCIのログをSumo Logicに取り込む方法

 2022.12.08  柳瀨正之

OCIのログをWebコンソールで検索するとき、上手くフィルタリングしないと検索結果の上限の500件に引っ掛かってしまいとても扱いづらい。

そこでログはSumo Logicに送ってしまって、Sumo Logicで操作してしまえば楽なのでは?と思いました。

幸いOCIではSumo Logicへログを送るドキュメントを公開してくれていて簡単にログを送れそうだったので実際にやってみました。

 

参考にしたサイト:

Oracle Cloud InfrastructureからSumo Logicへのログの移動

https://docs.oracle.com/ja/learn/blog_sumologic/index.html

 

公開されている手順はだいたいあっていますが、設定画面が変わってしまっていたり、Sumo Logicで取り込んだ後に処理させ辛かったりしたので、設定画面のスクリーンショットを撮り直したり、ファンクションのソースを一部改良したりしているので、その辺も含めて説明していきます。

ポイントと思える箇所だけはスクリーンショットを大きくしています。

 

HTTPSソースコレクターの作成

まずはSumo Logic側でHTTPS ソースコレクターを作成します。

Sumo Logicの画面で、Manage Data Collection Setup Wizardで作成します。

ここは特に悩むことはないのでさらっと行きます。

 

  1. 設定画面の表示              2. Let's Get Started!

01_設定画面の表示  02_Lets_Get_Started!

 

  1. Select Data Type              4. Set Up Collection

03_Select_Data_Type  04_Set_Up_Collection

 

  1. Configure Source: HTTP Source1

 05_Configure_Source_HTTP_Source1

 

Source Category ”ocilogs/sch/fn/sumologic” を入力します。

今回はログ送信のテストなのでドキュメントに記載されているソースカテゴリーそのままにしています。

また、タイムゾーンはデフォルトのまま ” (UTC) Etc/UTC” を設定します。

 

  1. Configure Source: HTTP Source2    7. Finish

06_Configure_Source_HTTP_Source2  07_Finish

 

ログの構成

次にOCIWebコンソール画面でログを構成します。

まずログ・グループを作成します。

 

  1. 設定画面の表示              9. ログ・グループ一覧

08_設定画面の表示  09_ログ・グループ一覧

 

  1. ログ・グループの作成

10_ログ・グループの作成  

名前:LogGroupForBucketActivity

説明:Log Group For Bucket Activity

どちらも後で変更できるので、とりあえずドキュメントのままにしています。

 

  1. ログ・グループの作成の完了

11_ログ・グループの作成の完了

 

次にログ・グループの作成後に、サービス・ログの有効化を行います。

 

  1. サービス・ログの有効化画面の表示

12_サービス・ログの有効化画面の表示

 

  1. サービス・ログの有効化1

13_リソース・ログの有効化1

 

サービスにはログを収集したいOCIのサービスを指定します。

ドキュメントでは”Object Storage”を選択しています。

リソースには指定したサービスで定義されている名前を指定します。

サービスで”Object Storage”を指定した場合、”Object Storage”の名前がリストで表示されるので、その中からログを収取したい”Object Storageを選択します。

ログ・カテゴリではログのカテゴリを選択します。

サービスで”Object Storage”を指定した場合、”Object Storage”の読み込み(Read)と書き込み(Write)の2つのカテゴリが選択できます。

 

  1. リソース・ログの有効化2

14_リソース・ログの有効化2

 

最後に拡張オプションを展開してログ・グループを指定します。

“10.ログ・グループの作成で作成したログ・グループを選択します。

 

これでログを収集するための準備できました。

 

ファンクションの作成

次にSumo Logicへ送信するためのファンクションを作成します。

以前書いたファンクション関連の記事ではCloud Shellは利用しませんでしたが、今回は利用します。

確か5ギガのオブジェクトストレージが付いているので、今回みたいなサンプルを作成するときは便利ですね。

 

  1. ファンクション画面の表示         16.アプリケーション一覧

15_ファンクション画面の表示  16_アプリケーション一覧

 

  1. アプリケーションの作成          18. Cloud Shellの起動

17_アプリケーションの作成  18_Cloud Shellの起動

 

Cloud Shellで入力するコマンドはWebコンソールに表示されているので、ここでは詳しくは解説しませんが、テンプレートファンクションを作成する際は、ランタイムにpythonを指定してください。

入力するコマンドをまとめておきますので、利用する際は各自の環境に変更してください。

特に難しいことはないのでさくっと設定してしまいます。

 

Cloud Shell上で実行するコマンド

------------------------------------------------------------------------------------------

①リージョンのコンテキストの確認と使用するコンテキストの変更

$ fn list context
$ fn use context ap-tokyo-1

 

②コンパートメントIDの更新

$ fn update context コンパートメントID

 

③ファンクション・イメージの更新

$ fn update context registry nrt.ocir.io/テナンシネームスペース/レポジトリの接頭辞

 

④認証トークンの生成

画面から設定するためコマンドなし

 

⑤ログインテスト

$ docker login -u 'テナンシネームスペース/oracleidentitycloudservice/④で設定したユーザ名' nrt.ocir.io

→ログインに成功すると ”Login Succeeded” と表示されます。

 

⑥アプリケーションをリストの表示

$ fn list apps

 

⑦テンプレートファンクションの作成

$ fn init --runtime python ファンクション名

------------------------------------------------------------------------------------------

 

テンプレートファンクションが作成されたら、いよいよプログラムを記述します。

基本的にはドキュメントの通りですが、ドキュメントのままだと”Object Storage”以外では利用できないので、func.pyを少し変更します。

改修した箇所を記載します。

 

------------------------------

改修前

34 event_name = logEntry["data"]["requestResourcePath"] + '\t'
35 time_of_event = logEntry["time"] + '\t'
36 cmpt_name = logEntry["data"]["compartmentName"] + '\t'
37 bucket_namespace = logEntry["data"]["namespaceName"] + '\t'
38 bucket_name = logEntry["data"]["bucketName"] + '\t'
39 request_action = logEntry["data"]["requestAction"]
40
41 log_line = time_of_event + event_name + cmpt_name + \
42               bucket_namespace + bucket_name + request_action

 

------------------------------

改修後

34 log_line = json.dumps(logEntry)

------------------------------

 

ちょっと乱暴な方法ですが、出力されたログデータをJSONにして全てSumo Logicへ送ってしまおうという魂胆です。

Sumo Logicへ送信するデータ量は増えてしまいますが、どの様なログが出力されるか確認したいので今はこれで良しとします。

ログの解析と要不要の切り分けはあとのお楽しみとして取っておきます。

これでひとまずプログラムの改修が終わりました。

 

次に、func.yamlrequirements.txtを変更しますが、ドキュメントに記載されたまま実施すれば大丈夫です。

func.pyfunc.yaml、requirements.txtの3つのファイルを変更したらファンクションのデプロイと動作テストを実施します。

デプロイと動作テストもドキュメントのままで大丈夫です。

 

サービス・コネクタの作成

最後に2で構成したログと3で作成したファンクションを繋ぎ設定を行います。

設定はサービス・コネクタの画面で行います。

 

  1. サービス・コネクタ画面の表示

19_サービス・コネクタ画面の表示

 

  1. サービス・コネクタの作成1

20_サービス・コネクタの作成1

 

  1. サービス・コネクタの作成2

21_サービス・コネクタの作成2

 

ドキュメントと設定画面が若干違うので戸惑うかもしれませんが、設定する項目は少ないので安心してください。

ここで重要なのは以下の項目です。

 

  • サービス・コネクタの構成

 ・ソース   → ロギングを選択

 ・ターゲット → ファンクションを選択

  • ソースの構成

 ・ログ・グループ → 10で作成したログ・グループ名を選択

 ・ログ      → 13で作成したサービス・ログ名を選択

  • ターゲットの構成

 ・ファンクション・アプリケーション→ 17で作成したアプリケーション名を選択

 ・ファンクション         → Cloud Shellで作成したファンクション名を選択

 

これで設定は終わりです。

13で指定した”Object Storage”のログが検出されると、ファンクションが実行されSumo Logicにログが送信されるようになります。

 

  1. Sumo Logicでの確認

Sumo Logicでの取り込みを確認するために、Sumo Logicにログインします。

以下のサーチ文を実行してください。

 

※実行するサーチ文

_sourceCategory="5で入力したSource Category" and _collector="HTTP"

 

OCIのログが表示されていると思います。

ファンクションでJSONとして送っているので、| json auto で簡単に解析することができます。

 

  1. Sumo Logicでのサーチ結果

22_SumoLogicでのサーチ

 

一部、ドキュメントのイメージと違う部分があり戸惑ってしまうと思いますが、たったこれだけでOCIのログをSumo Logicに取り込むことが可能になり、長期保存や解析が簡単に行うことが可能になります。

 

ただ、同じログが繰り返し取り込まれてしまったり、ログデータ内でingestedtime(ログサービスのログ取得日時)がtime(ログ発生日時)の前にあるのでingestedtimeがログの日時としてセットされてしまっていたりと、色々と直す必要はありますが、その辺りは今後修正していきます。

まずはログを集めることが目的だったので、ログの取り込みは成功です。

 

これからもSumo Logicを活用する方法を見付けたら実際に試してみて記事にしていきますので今後ともよろしくお願いします。

最後までお付き合いいただきありがとうございました。


OCIのログをSumo Logicに取り込む方法