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で作成します。
ここは特に悩むことはないのでさらっと行きます。
- 設定画面の表示 2. Let's Get Started!
- Select Data Type 4. Set Up Collection
- Configure Source: HTTP Source1
Source Categoryに ”ocilogs/sch/fn/sumologic” を入力します。
今回はログ送信のテストなのでドキュメントに記載されているソースカテゴリーそのままにしています。
また、タイムゾーンはデフォルトのまま ” (UTC) Etc/UTC” を設定します。
- Configure Source: HTTP Source2 7. Finish
ログの構成
次にOCIのWebコンソール画面でログを構成します。
まずログ・グループを作成します。
- 設定画面の表示 9. ログ・グループ一覧
- ログ・グループの作成
名前:LogGroupForBucketActivity
説明:Log Group For Bucket Activity
どちらも後で変更できるので、とりあえずドキュメントのままにしています。
- ログ・グループの作成の完了
次にログ・グループの作成後に、サービス・ログの有効化を行います。
- サービス・ログの有効化画面の表示
- サービス・ログの有効化1
サービスにはログを収集したいOCIのサービスを指定します。
ドキュメントでは”Object Storage”を選択しています。
リソースには指定したサービスで定義されている名前を指定します。
サービスで”Object Storage”を指定した場合、”Object Storage”の名前がリストで表示されるので、その中からログを収取したい”Object Storage名”を選択します。
ログ・カテゴリではログのカテゴリを選択します。
サービスで”Object Storage”を指定した場合、”Object Storage”の読み込み(Read)と書き込み(Write)の2つのカテゴリが選択できます。
- リソース・ログの有効化2
最後に拡張オプションを展開してログ・グループを指定します。
“10.ログ・グループの作成” で作成したログ・グループを選択します。
これでログを収集するための準備できました。
ファンクションの作成
次にSumo Logicへ送信するためのファンクションを作成します。
以前書いたファンクション関連の記事ではCloud Shellは利用しませんでしたが、今回は利用します。
確か5ギガのオブジェクトストレージが付いているので、今回みたいなサンプルを作成するときは便利ですね。
- ファンクション画面の表示 16.アプリケーション一覧
- アプリケーションの作成 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.yamlとrequirements.txtを変更しますが、ドキュメントに記載されたまま実施すれば大丈夫です。
func.py、func.yaml、requirements.txtの3つのファイルを変更したらファンクションのデプロイと動作テストを実施します。
デプロイと動作テストもドキュメントのままで大丈夫です。
サービス・コネクタの作成
最後に2で構成したログと3で作成したファンクションを繋ぎ設定を行います。
設定はサービス・コネクタの画面で行います。
- サービス・コネクタ画面の表示
- サービス・コネクタの作成1
- サービス・コネクタの作成2
ドキュメントと設定画面が若干違うので戸惑うかもしれませんが、設定する項目は少ないので安心してください。
ここで重要なのは以下の項目です。
- サービス・コネクタの構成
・ソース → “ロギング”を選択
・ターゲット → “ファンクション”を選択
- ソースの構成
・ログ・グループ → 10で作成したログ・グループ名を選択
・ログ → 13で作成したサービス・ログ名を選択
- ターゲットの構成
・ファンクション・アプリケーション→ 17で作成したアプリケーション名を選択
・ファンクション → Cloud Shellで作成したファンクション名を選択
これで設定は終わりです。
13で指定した”Object Storage”のログが検出されると、ファンクションが実行されSumo Logicにログが送信されるようになります。
- Sumo Logicでの確認
Sumo Logicでの取り込みを確認するために、Sumo Logicにログインします。
以下のサーチ文を実行してください。
※実行するサーチ文
_sourceCategory="5で入力したSource Category" and _collector="HTTP"
OCIのログが表示されていると思います。
ファンクションでJSONとして送っているので、| json auto で簡単に解析することができます。
- Sumo Logicでのサーチ結果
一部、ドキュメントのイメージと違う部分があり戸惑ってしまうと思いますが、たったこれだけでOCIのログをSumo Logicに取り込むことが可能になり、長期保存や解析が簡単に行うことが可能になります。
ただ、同じログが繰り返し取り込まれてしまったり、ログデータ内でingestedtime(ログサービスのログ取得日時)がtime(ログ発生日時)の前にあるのでingestedtimeがログの日時としてセットされてしまっていたりと、色々と直す必要はありますが、その辺りは今後修正していきます。
まずはログを集めることが目的だったので、ログの取り込みは成功です。
これからもSumo Logicを活用する方法を見付けたら実際に試してみて記事にしていきますので今後ともよろしくお願いします。
最後までお付き合いいただきありがとうございました。
- カテゴリ: