概要
ハイブリッド・マルチクラウド時代のObservability向上のためにあらゆるロケーションや階層(ネットワーク層~アプリケーション層)のログを収集して効果的に利用することがサービス継続やコンプライアンスからも求められます
- 収集 (Collect): 場所や階層を問わずデータを収集
- 解析 (Analyze): 高度なログ解析
- 監視 (Monitoring): 可視化、異常検知および通知
- 保管 (Archive): 証跡永続化
ここではOracle Cloud Infrastructure(OCI)を利用してログ収集から利用までの流れを整理してみました
構成
クリックしてご参照ください
イベント
-
対象
-
OCIサービスイベント
- OCIサービスに関するイベント(例:Block Volume Backup完了)
- 設定不要でイベント発生
-
OCIセキュリティイベント
- セキュリティに関するイベント(例:過大な許可のSecurity List)
- Cloud Guardを設定することによってイベント発生
-
-
発生したイベントについては以下のアクションが設定可能
- Functionを利用したLINE等の通知
- Notificationを利用したMail通知
- Functionを利用してMonitoring カスタムメトリックへ送信
- Functionを利用してLogging Custom logへ送信
ログ
-
対象
-
OCI操作ログ
- Audit logとして自動的に記録
-
OCIサービスログ
- 個々のOCIサービスのログ設定を行うことによりサービスログとして記録(例:WAF, Obejct Storage操作, VCNフローログ)
-
Linux操作ログ、Linuxアプリケーションログ
- Oracle Cloud Agent(OCA)により特定パスのログをカスタムログとして記録
-
Windows操作ログ、Windowsアプリケーションログ
- Oracle Cloud Agent(OCA)によりWindowsシステムログや特定パスのログをカスタムログとして記録
-
オンプレ機器ログ(ルータ等)
- ログを集めるSyslog Serverを設置
- オンプレ機器はSyslog Serverにログを送信
- Oracle Cloud Agent(OCA)により指定したパスのSyslogをカスタムログとして記録
-
-
ログについてConnector Hubを通じて以下のアクションが設定可能
- Monitoring カスタムメトリックへ送信
- Log analyticsへ送信
- 長期保管用にObject Storageに送信
解析/監視/保管
後続のサービスでは以下の利用が可能です。
(各サービスは多彩な機能があるため、ここでは取り込んだイベントやログの処理についてのみ記載しています)
-
高度な解析
Log analyticsによる高度な解析サービス、検出ルールを設定してMonitoringに連携可能 -
メトリクス監視
Monitoringによるメトリクスのリアルタイムで収集・可視化。異常を検知後にFunctions呼び出しやNotificationにより通知 -
長期保管
Object Storage保管により監査や法規制等の要件に対応
監視の利用例
通常の障害監視以外にも以下の利用方法が考えられます
-
ネットワークの脆弱性を検知時に、ログに保管と同時にセキュリティ担当者に通知
⇒脆弱性の早期発見 -
WindowsやLinuxログインのログを取得し、失敗回数やアカウントロックを検知してセキュリティ担当者に通知
⇒不正アクセスの予兆を検知 -
Audit Log等の監査対象ログを、保護されたObject Storageに転送
⇒金融や医療系等で求められる「決められた年数の改ざん不能な証跡保管」を最小の管理コストで実現 -
ロードバランサー~バックエンドサーバー応答速度をモニタリングにて可視化
⇒問題発生の予兆を検知してキャパシティ計画に反映 -
アプリケーションのログをモニタリングにて可視化
⇒アプリケーション障害予防と顧客満足度の低下を防ぐ -
オンプレミス機器のエラーや警告ログを取得し、モニタリングにて可視化
⇒故障頻度の増加傾向をトレンド分析し障害前に対応 -
VCNフローログを解析し、意図しないインターネットへの大量転送を特定
⇒サイバー攻撃による外部への情報漏洩を防ぐ -
アプリケーションのログから特定のエラー(決済失敗等)を検知したら、ユーザー担当部門に通知
⇒アウトバウンド対応のサポートを行うことにより顧客満足度向上
参考:Functionサンプルコード
Connector Hub等サービス間のデータ連携がありますが、一部対応していない場合はFunctionを実行することによりデータ連携が可能です
以下は、ネットワーク脆弱性がセキュリティイベントとして発生した場合にEventsからLogging Custom logへイベント内容を送信するFunctionサンプルコードです
## Replace << >> with the appropriate value
import io
import json
import oci
import datetime
from pytz import timezone
from fdk import response
def handler(ctx, data: io.BytesIO = None):
try:
event_raw = data.getvalue().decode('utf-8')
event = json.loads(event_raw)
# Resource Principal
signer = oci.auth.signers.get_resource_principals_signer()
loggingingestion_client = oci.loggingingestion.LoggingClient(
config={},
signer=signer,
service_endpoint="https://ingestion.logging.<<Region>>.oci.oraclecloud.com"
)
times_stamp = datetime.datetime.now(timezone('UTC'))
# log ingestion to OCI
put_logs_response = loggingingestion_client.put_logs(
log_id = "<<logging OCID>>",
put_logs_details = oci.loggingingestion.models.PutLogsDetails(
specversion="1.0",
log_entry_batches=[
oci.loggingingestion.models.LogEntryBatch(
entries=[
oci.loggingingestion.models.LogEntry(
data=event_raw,
id=event.get("eventID"),
time=times_stamp
)
],
source=event.get("source", "CloudGuardResponderEngine"),
type=event.get("eventType")
)
]
)
)
# Get the data from response
print(put_logs_response.headers)
except Exception as ex:
print('ERROR: bad Event!', flush=True)
raise
schema_version: 20180708
name: cloudguardlog
version: 0.0.3
runtime: python
build_image: fnproject/python:3.11-dev
run_image: fnproject/python:3.11
entrypoint: /python/bin/fdk /function/func.py handler
memory: 256
fdk>=0.1.104
oci
pytz
検知したイベントはEventsからFunctionを実行することによりCustom logに転送され、以下のようにログに表示することができます
この例ではすべての送信元からTCP3389への通信許可を行ったことにより発生したセキュリティアラートです