LoginSignup
9
0

Oracle Cloud で Linux のログ監視を実装する

Last updated at Posted at 2021-12-01

2023年4月ぐらいからカスタムログを Service Connector Hub で Noticication 連携ができなくなっており、現状この手順では実装できないのでご注意ください。
手順の修正については追々確認いたします。

はじめに

OCI を利用頂く際に運用監視の観点でログ監視をお願いすることがあります。これまで実績のある方法で実装頂くことが多かったのですが、OCI のサービスでできないだろうか、っと思ったので調べて実装してみました。

ゴール

  • インスタンス(Linux) の特定のファイル(/var/log/messages)で特定の文字列を監視する
  • 特定の文字列を検出した際にはメールで通知する
  • OCI のサービスを利用して実装する

事前に検討すべきこと

  • 適用範囲(インスタンス単位 or コンパートメント単位)
  • 監視対象ファイル
  • 監視対象ファイルのサイズ
  • 監視対象文字列

利用するサービス

  • Instance (監視対象として利用)
  • Logging (対象ログをクラウドへ保管)
  • Notifications (メール通知)
  • Service Connector Hub (Loggin と Notifications の連携と監視対象文字列のチェック)

大まかな構成イメージ

 ┌──────────────┐  ┌──────────────────────────────────────────────────┐
 │              │  │                                                  │
 │              │  │ ┌───────────┐  ┌────────────┐  ┌───────────────┐ │  ┌────────┐
 │ ┌─────────┐  │  │ │           │  │ Service    │  │               │ │  │        │
 │ │  Agent  ├──┼──┼─►  Logging  ├──┤► Connector ├──► Notifications ├─┼──┤  Mail  │
 │ └────┬────┘  │  │ │           │  │   Hub      │  │               │ │  │        │
 │      │       │  │ └───────────┘  └────────────┘  └───────────────┘ │  └────────┘
 │      │       │  │                                                  │
 │      │       │  │                                                  │
 │      │       │  │                                                  │
 │ ┌────▼─────┐ │  │                       OCI                        │
 │ │ Log File │ │  └──────────────────────────────────────────────────┘
 │ └──────────┘ │
 │              │
 │              │
 │   Instance   │
 │              │
 └──────────────┘

前提条件

  • VCN やインスタンスは作成済み
  • admin 権限またはそれ相応の権限
  • インスタンスは Custom Logs Monitoring Agent が有効であること
    • 作成済みのインスタンスの details から Oracle Cloud Agent のタブを確認して Custom Log Monitoring が Enabled となっていることを確認する
      image.png

手順

Dynamic Group の作成

OCI のロギングサービスがインスタンスの Custom Log Monitoring と連携しログの収集をできるようにするために Dynamic Group に該当のインスタンスまたはコンパートメントを登録する。

今回はテスト用に作成したインスタンスのみを対象とします。
インスタンスの OCID をコピーします。
image.png

メニューから dynamic groups で検索し、
image.png

customlog_dynamicgroup という名前で、以下のルールで作成します。
image.png

Logging サービスでログ収集の設定をする

logs を検索してクリックする
image.png

Create custom log をクリック
image.png

Custom log name を入力し、Log group のところにある Create New Group をクリック
image.png

以下のように Name と Description を入力する
image.png

作成したロググループが選択されるので、Create custom log をクリック
image.png

Create new configuration が選択されていることを確認し、Configuration name と Description を入力する
image.png

先程作成した Dynamic Group を選択する。
Create policy to っという警告文が表示されるので、そこの create をクリックし、必要な policy を追加します。
image.png

クリックすると以下のようになります。
image.png

作成した Dynamic Group を指定する
image.png

Input Type、 Input name, File Paths を以下のように設定し、Create custom log をクリックする
image.png

作成されました。
image.png

Notificaton の作成

image.png

Create Topic をクリック
image.png

以下のように Name と Description を入力し、Create をクリック
image.png

作成された monitor-messages-topic をクリックする
image.png

Create Subscription をクリック
image.png

Email を選択し、受信可能なアドレスを入力して create をクリック
image.png

以下のように Pending ステータスとなる
image.png

指定したアドレスに以下のメールが届くので、 Confirm Subscription をクリックする
image.png

ブラウザが開き以下のように表示される
image.png

ステータスが Active に変わる
image.png

Service Connector Hub の設定

hub と検索し、Service Connector hub をクリック
image.png

Create Service Connector をクリック
image.png

Connector Name と Description を入力
image.png

※なぜか以下の順番でないと選択できたい
Source に Logging を選択し、Log Group と Logs に指定したものを選択
image.png

最後に target に Notifications を選択する
image.png

Log Filter Task にて Property と Operator と Value を指定する。
今回はテストとして hogehoge という文字列を拾いたいのでこの様に指定した。
image.png

Configure Target で Topic に先程作成したものを選択すし、Message Format は Send formatted messages にする
image.png

以下の警告文が表示されるので、create をクリックする
image.png
問題なければ以下のように変わる
image.png

Create をクリックし完了。

動作確認

今回は対象が messages なのでインスタンスにログインし、以下のような logger を実行します

[opc@instance01 ~]$ logger -ip kern.warn hogehoge

念の為、messages を確認すると、たしかに記録されています。

[opc@instance01 ~]$ sudo tail -f /var/log/messages
Nov 17 07:48:38 instance01 systemd: Started Session c6935 of user root.
Nov 17 07:48:38 instance01 systemd: Started Session c6936 of user root.
Nov 17 07:49:01 instance01 systemd: Started Session 2890 of user root.
Nov 17 07:50:01 instance01 systemd: Started Session 2891 of user root.
Nov 17 07:52:42 instance01 systemd: Created slice User Slice of opc.
Nov 17 07:52:42 instance01 systemd-logind: New session 2892 of user opc.
Nov 17 07:52:42 instance01 systemd: Started Session 2892 of user opc.
Nov 17 07:52:42 instance01 dbus[1284]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
Nov 17 07:52:42 instance01 dbus[1284]: [system] Successfully activated service 'org.freedesktop.problems'
Nov 17 07:53:45 instance01 opc[6954]: hogehoge

メールが届きました。
image.png

本文を見ると、 Source にインスタンス名、Subject にログファイル、Details/JSON にメッセージが確認できます。
image.png

OCI のサービスを利用するだけで、シンプルなログ監視ができました。

挙動について確認する

検出した文字列の挙動について確認してみます。

一度に複数の文字列が出た場合どうなる?

以下のように logger を10回連続で投げてみる。

[opc@instance01 ~]$ for i in {1..10}
> do
> logger -ip kern.warn hogehoge
> done
[opc@instance01 ~]$ sudo tail -f /var/log/messages
Nov 17 08:23:53 instance01 opc[14842]: hogehoge
Nov 17 08:23:53 instance01 opc[14843]: hogehoge
Nov 17 08:23:53 instance01 opc[14844]: hogehoge
Nov 17 08:23:53 instance01 opc[14845]: hogehoge
Nov 17 08:23:53 instance01 opc[14846]: hogehoge
Nov 17 08:23:53 instance01 opc[14847]: hogehoge
Nov 17 08:23:53 instance01 opc[14848]: hogehoge
Nov 17 08:23:53 instance01 opc[14849]: hogehoge
Nov 17 08:23:53 instance01 opc[14850]: hogehoge
Nov 17 08:23:53 instance01 opc[14851]: hogehoge

以下のように10通のメールが届きました。
image.png

どのタイミングでログがチェックされている?

Custom Log などには unified-monitoring-agent という systemd のサービスが動いている。

[opc@instance01 ~]$ systemctl status unified-monitoring-agent
● unified-monitoring-agent.service - unified-monitoring-agent: Fluentd based data collector for Oracle Cloud Infrastructure
   Loaded: loaded (/usr/lib/systemd/system/unified-monitoring-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2021-11-17 07:23:54 GMT; 1h 39min ago
     Docs: https://docs.cloud.oracle.com/
  Process: 31338 ExecStop=/bin/kill -TERM ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 31346 ExecStart=/opt/unified-monitoring-agent/embedded/bin/fluentd --log /var/log/unified-monitoring-agent/unified-monitoring-agent.log --daemon /var/run/unified-monitoring-agent/unified-monitoring-agent.pid --log-rotate-size 1048576 --log-rotate-age 10 $EXTRA_OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 31355 (fluentd)
   Memory: 95.2M (limit: 5.0G)
   CGroup: /system.slice/unified-monitoring-agent.service
           ├─31355 /opt/unified-monitoring-agent/embedded/bin/ruby /opt/unified-moni...
           └─31359 /opt/unified-monitoring-agent/embedded/bin/ruby -Eascii-8bit:asci...

11月 17 07:23:50 instance01 systemd[1]: Starting unified-monitoring-agent: Fluent.....
11月 17 07:23:54 instance01 systemd[1]: Started unified-monitoring-agent: Fluentd...e.
Hint: Some lines were ellipsized, use -l to show in full.

この agent のログが /var/log/unified-monitoring-agent/unified-monitoring-agent.log に吐かれていて、これを見ると約5分に動作している模様。
この5分間間隔の中で検出された回数分のメールが飛ぶ、っということのようです。

ログの検索

カスタムログを設定すると Logging サービスにログが保管される(デフォルトで1ヶ月保持され、最大6ヶ月保管可能)。
保管されたログは以下のようにあとから検索することもできます。

image.png

料金

Notifications

今回メール通知に利用したサービス。
料金は以下の URL より確認できます。
https://www.oracle.com/jp/devops/notifications/

この記事を書いた時点では以下の通り。
image.png

Logging

カスタムログ(今回は /var/log/messages)の取り込み・保管に利用したサービス。
料金は以下の URL より確認できます。
https://www.oracle.com/jp/devops/logging/

この記事を書いた時点では以下の通り。
image.png

Service Connector Hub

Logs で保管したログから特定の文字列が検出した場合、Notificatons でメール通知する、っという連携に利用したサービス。
料金は以下の URL より確認できます。
https://www.oracle.com/jp/devops/service-connector-hub/

この記事を書いた時点では以下の通り。
image.png

9
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0