OCI Logging のログを Service Connector Hub で Object Storage に出力してみた

この記事は [Oracle Cloud Infrastructure Advent Calendar 2020](https://qiita.com/advent-calendar/2020/oci) の18日目の記事です。
(公開してから、2日目の shinpy さんの記事と結構かぶっていることに気がつきました。すみません。。。が、あれやこれやしていると、すぐに19日になりそうなのでこのままにしておきます。。。
shinpy さんの記事も併せてご参照ください。
[LoggingサービスでObject Storageアクセスログ取得](https://cloudii.jp/news/blog/oracle-cloud/logging%e3%82%b5%e3%83%bc%e3%83%93%e3%82%b9%e3%81%a7object-storage%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%83%ad%e3%82%b0%e5%8f%96%e5%be%97/))

# はじめに

インフラを考える上で、なかなかめんどくさいんだけれどもその後の運用を考えるとしっかりしておくべき点が「ログ管理」かと思っておりまして、そのためのライトなサービスである「ロギング」が Oracle Cloud Infrastructure(OCI) でリリースされたことにうれしくなった私は、 Custom Log という好きなログを集められる機能を中心に2回ほど記事を書いてきました。

[OCI Logging で Custom Log を収集してみた](https://qiita.com/k_kane/items/8e9457ffcecb6f7d6e1b)

[OCI Logging Custom Log のあれこれ](https://qiita.com/k_kane/items/9725e6c4c838c2c762c9)

今回はその続きということで、 Service Connector Hub を利用して、 Object Storage にこのログを保管したいと思います。

# Service Connector Hub とは

Service Connector Hub ですが、ロギングのデータを受け取って、各種サービスに連携することができる機能です。ログデータに基づいて Functions で何らかの処理を

ドキュメントは以下にあります。ドキュメント内には、Logging -> Functions -> Autonomous JSON Database へのログ連携、 Object Storage への連携の例があります。前者は Functions のサンプルコード付きです。

[サービス・コネクタ・ハブの概要](https://docs.cloud.oracle.com/ja-jp/iaas/Content/service-connector-hub/overview.htm)

今回は Object Storage への保存をやってみたいと思います。以前みたように、 Logging の保有期間は現状、1か月で決め打ちのようなので、ログを Object Storage にいったんはいて解析するほか、「長い間ログ保存しておきたい！」みたいな時にも使えるかと思います。

![image-20201218222101006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/bd102703-fc27-a3fd-c9fa-ab8f9a4f8158.png)

# Service Connector Hub を立てて Object Storage へ連携

Service Connector Hub はメニューの「サービス・コネクタ」からも立てられるのですが、今回は以前設定したログの設定から作成してみます。

![image-20201218213338662.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/7612bdaf-dbc2-8165-6147-dcd26d3dc310.png)

以前 testcutomlog という名前のログを設定しました(と思っていたのですが、盛大にタイポしていますね)。いずれにしてもこれなので、これをクリックします。

![image-20201218213404792.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/f8479292-d599-7483-361e-8abbfc946af2.png)

ログの詳細画面に、「ログの探索」という欄があるのですが、そこから「ログ検索」の画面に遷移できます。

![image-20201218213434967.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/94e4e123-4d00-b1b9-faf3-5f364263251a.png)

ログ検索の画面に、「サービス・コネクタの作成」ボタンがあります。

![image-20201218213513996.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/499a0619-747b-97d6-5d81-3f5e8c86fc60.png)

「サービス・コネクタの作成」をクリックすると、先ほどの検索画面での設定条件 (testcustomlog を表示していた)に基づいてサービス・コネクタを作成することができるよう、設定が読み込まれます。

![image-20201218213718590.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/a613b601-e684-7c8b-d05c-056fbb6d11f9.png)

ターゲットの欄で、今回は「オブジェクト・ストレージ」を選択します。そのほか連携先として Streaming や Functions、 Monitoring、 Notifications 等が選べます。

タスクの構成欄では、フィルタの設定が可能です。こちらで連携するログデータを絞り込むことができます。オプションなので飛ばします。

![image-20201218214537975.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/a1de226a-d356-d3e9-c869-a185d532ce1a.png)

その後、「ターゲット接続の構成」欄で、Object Storage のバケットを選択します。事前に作成していた「Logging_Bucket」を選択します。すると、サービス・コネクタによる Object Storage への書き込みを許可する、デフォルトのポリシーを作成するように言われますので「作成」をクリックします。

![image-20201218220228470.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/42125e71-1db1-8b5d-33cb-2d23a7fdf8b0.png)

自動的にポリシーが作られました。この自動的にポリシー作ってくれるの、OCI 的には最近主流ですが、便利ですね。

![image-20201218220310011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/59f2dce7-08c0-c94c-a951-1da46559f74f.png)

ポリシーを確認すると以下の内容のポリシーが作られていました。

```
allow any-user to manage objects in compartment id ocid1.compartment.oc1..aaaaaaaah... where all {request.principal.type='serviceconnector', target.bucket.name='Logging_Bucket', request.principal.compartment.id='ocid1.compartment.oc1..aaaaaaaah...'}
```

上記画面で「作成」をクリックするとすぐさま Service Connector Hub が作られます(この、すぐさま感からすると個別にインスタンス用意するタイプのサービスではなさそうです)。

「バッチ・ロールオーバー・サイズ」「バッチ・ロールオーバー時間」という設定がありますが、ログを出力・連携する間隔のように見えます。これを変更する画面はないので現時点では決め打ちなのかなと理解しました。

![image-20201218220600964.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/df57f954-bfdb-d64c-8470-2ac650616c96.png)

ちなみに Streaming をターゲットに作ってみると、バッチ・ロールオーバーの欄はありませんでした。逐次でデータ連携されそうな雰囲気です。 Functions も同様にこの欄はなく、ドキュメントを見る感じでは、Functions を Invoke するタイミングで Functions 側から取りに行く雰囲気の実装になるようです。

![image-20201218225957346.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/ecd3a120-f050-da25-c2b0-85d1dbf42fd9.png)

# Object Storage 上のファイルを見てみる

しばらく待つと Object Storage 内にログがはかれます。 gzip 圧縮されたファイルが Service Connector の OCID 以下に日付ベースのファイル名で作成されます(ファイル名が 13:05 - 13:12 になっているのでバッチ・ロールオーバー時間にほぼ一致しますね)。

![image-20201218221908996.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/a4348197-c4ed-c5d3-dcf9-c65670b189ab.png)

中身を見てみると以下のような形で JSON 形式のログがずらっと入っています。(おそらく画面で見られるものと一緒ですね。)

```
$ tail -n 1 ocid1.serviceconnector.oc1.ap-tokyo-1.amaaaaaaldbs5niaa2ajcr5swphfroa764wgan5wqxmtki7s644kfxhvgd4q_20201218T130549Z_20201218T131232Z.0.log | jq
{
  "data": {
    "message": "2020-12-18 13:11:02,210 DEBUG    Region-local remote root set to https://updates.ksplice.ap-tokyo-1.oci.oraclecloud.com/ksplice/request",
    "tailed_path": "/var/log/ksplice.log"
  },
  "id": "3f3735a5-3a00-4806-b4d2-9a7cef7f6285",
  "oracle": {
    "compartmentid": "ocid1.compartment.oc1..aaaaaaaah...",
    "ingestedtime": "2020-12-18T13:12:32.721Z",
    "instanceid": "ocid1.instance.oc1.ap-tokyo-1.anxh...",
    "loggroupid": "ocid1.loggroup.oc1.ap-tokyo-1.amaa...",
    "logid": "ocid1.log.oc1.ap-tokyo-1.amaaaaaald...",
    "tenantid": "ocid1.tenancy.oc1..aaaaaaaa..."
  },
  "source": "SPARK-TEST-INS01",
  "specversion": "1.0",
  "subject": "/var/log/ksplice.log",
  "time": "2020-12-18T13:11:02.211Z",
  "type": "com.oraclecloud.logging.custom.customlog"
}
```

もう少し待つと2つめのファイルが出力されていました。だいたい7分感覚です。おそらく 100MB 以上ログをはくとそのタイミングで出力されるものと思われます。

![image-20201218222602086.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131447/2e9d4635-abe6-b706-3764-51d67ed25b41.png)

# まとめ

あんまり派手さのない記事でしたが、 Service Connector Hub の動作確認および、実際の画面表示を確認してきました。連携の間隔等の考え方が確認できたのはよかったです。(ほんとは Functions までやってみるべきなんですが納期優先といういいわけで。。。)

また、 Service Connector Hub の連携元は現状ロギングのみですが、この欄がドロップダウンリストで実装されていることを見ると、将来的いろいろなサービスを連携元として設定できるエンハンスが期待できそうです。