コンピュート・インスタンスでのLogging Analyticsプラグイン・デプロイメントの自動化 (2025/02/28)
コンピュート・インスタンスでのLogging Analyticsプラグイン・デプロイメントの自動化 (2025/02/28)
投稿者: Karthic Ravindran
Jayaprakash Subramanian | Product Management, SCP for OCI Observability & Management / Enterprise Manager
クラウド環境でのログ・データの管理に関しては、多くの組織が課題に直面しています。ログ・データの効果的な監視と分析は、システムのパフォーマンス、セキュリティおよび信頼性を確保するために重要です。Oracle Cloud Infrastructure Logging Analytics (LA)は、様々なサービスにわたるログ・データを収集、分析およびビジュアル化するための強力なツールを提供します。特に大規模な環境では、これによって、ログ・アナリティクス・プラグインを手動でデプロイおよび構成するプロセスが簡略化されます。
OCI Logging Analyticsプラグインのデプロイメントを自動化することで、すべてのインスタンスで包括的な可観測性を実現するための合理化された一貫性のあるアプローチが提供されます。
このブログは、自動スケーリングまたは管理エージェントがすでにアクティブな既存のコンピュート・インスタンスの実行中に、OCI ComputeインスタンスでのLAプラグイン・デプロイメントを自動化するステップバイステップ・ガイドです。
Oracle Cloud AgentがOCIでプラグインを管理
Oracle Cloud Agentは、Oracle Cloud Infrastructureに存在するコンピュート・インスタンス(ホストまたはVMとも呼ばれる)で実行されているプラグインを管理する軽量プロセスです。コンピュート・インスタンスを使用している場合は、Oracle Cloud Agentを使用して管理エージェントをデプロイできます。Oracle Cloud Infrastructureコンピュート・インスタンスへのOracle Cloud Agentを使用した管理エージェントのデプロイの詳細は、コンピュート・インスタンスへの管理エージェントのデプロイを参照してください。
ノート: OCIコンピュート・インスタンスからの管理エージェントの有効化は、Linuxイメージでのみサポートされています。OCI自動スケーリングの詳細は、このドキュメントを参照してください。
コンピュート・インスタンスを簡素化および自動化するためのOCIインスタンス構成の作成
OCIインスタンス構成は、標準化された一貫した方法で、コンピュート・インスタンスのデプロイメントおよび管理を簡素化および自動化するのに役立ちます。インスタンスを作成する場合は、管理エージェントがインスタンス構成の一部として有効になっていることを確認してください。これにより、自動スケーリングの一部として新しいインスタンスが起動されたときにエージェントを有効にできます。
図1: 管理エージェント・プラグインの選択
ログ・ファイルでユーザーoracle-cloud-agentの読取りアクセスを許可するcloud-initスクリプトを追加します。たとえば、/var/log/messagesログです。ファイルにエージェント・ユーザーに対する読取り権限がすでにある場合、このステップは必要ありません。
図2:cloud-initスクリプトを含める
Linuxソースの自動関連付けの有効化
Linux Syslogログ・ソースの自動関連付けを解除すると、Linuxホストが/var/log/messagesを指すこのログ・ソースと自動的に関連付けられます。
「監視および管理」メイン・メニューに移動し、「ログ・アナリティクス管理」、「ソース」の順に選択します。
図3: Linux Syslogsソース
LAプラグインをデプロイするOCI Functionsの定義
新しいインスタンスの起動時に、OCI関数を使用してLAプラグインを管理エージェントの一部としてデプロイします。OCIでのファンクションのデプロイ方法については、ファンクションのドキュメントを参照してください。
OCI Functions コード
import oci
import io
import time
def list_active_agents(plugin, compartment_ocid, management_agent_client):
response = management_agent_client.list_management_agents(
compartment_id=compartment_ocid,
lifecycle_state="ACTIVE",
availability_status="ACTIVE",
platform_type=["LINUX"],
plugin_name=plugin,
is_customer_deployed=False,
install_type="AGENT",
compartment_id_in_subtree=False,
access_level="ACCESSIBLE")
return response.data
def handler(ctx, data: io.BytesIO = None):
try:
cfg = dict(ctx.Config())
compartment_id = cfg['compartment_id']
enable_logging = cfg['enable_logging']
time.sleep(60)
print(f"Sleeping for 60 seconds to give time for agents to become active",flush=True)
print(f"Function config for enable logging: {enable_logging}",flush=True)
signer = oci.auth.signers.get_resource_principals_signer()
management_agent_client = oci.management_agent.ManagementAgentClient({}, signer=signer)
la_agent_list = []
for la_agent in list_active_agents(["logan"], compartment_id, management_agent_client):
la_agent_list.append(la_agent.id)
all_agent_list = []
if enable_logging.upper() == "ALL":
for all_agent in list_active_agents(["dbaas", "jm", "jms", "appmgmt", "opsiHost", "osmh", "logan", "None"],
compartment_id, management_agent_client):
all_agent_list.append(all_agent.id)
else:
for all_agent in list_active_agents(["None"],
compartment_id, management_agent_client):
all_agent_list.append(all_agent.id)
deploy_list = set(all_agent_list) - set(la_agent_list)
print(f"LA plugin Deploy list of agents:{deploy_list}",flush=True)
list_management_agent_plugins_response = management_agent_client.list_management_agent_plugins(
compartment_id=compartment_id,
lifecycle_state="ACTIVE",
display_name="Logging Analytics",
platform_type=["LINUX"])
la_plugin_id = list_management_agent_plugins_response.data[0].id
if len(deploy_list) > 0:
deploy_plugins_response = management_agent_client.deploy_plugins(
deploy_plugins_details=oci.management_agent.models.DeployPluginsDetails(
plugin_ids=[la_plugin_id],
agent_compartment_id=compartment_id,
agent_ids=list(deploy_list)))
print(deploy_plugins_response.status)
except Exception as ex:
print(str(ex), flush=True)
ファンクションがデプロイされたら、OCIコンソールでファンクションを構成します。
「OCI」メニューに移動し、「Developer Service」を選択し、「Functions」、「Applications」の順に選択します。「アプリケーション」で、関数名をクリックして構成を選択します。次の2つのプロパティを構成に追加します。
compartment_idは、エージェント・コンパートメントIDです。
「すべて」に設定すると、管理エージェントがアクティブなコンパートメント内のすべてのインスタンスに対してログ・アナリティクスが有効になります。enable_logging 他の値に設定すると、プラグインがデプロイされていないアクティブなエージェントに対してのみログ・アナリティクスが有効になります。
図4: OCI Functionsの作成と構成
イベントを作成してファンクションをトリガーし、新しいインスタンスを起動します。
イベント・ルールを作成して、新しいインスタンスの起動時にファンクションをトリガーします。メイン・メニューに移動し、「監視および管理」、「イベント・サービス」の順に選択して、「ルール」をクリックします。
図5: イベントの詳細
アクション・タイプとして「Functions」を選択し、前に作成したファンクションを追加します。
インスタンス構成を使用したインスタンスの作成
ここで、開始点として必要なインスタンス数を含め、前述で作成したインスタンス構成を使用してインスタンス・プールを作成します。コンピュート・インスタンスが起動し、イベント・サービス・メトリックでトリガーされるイベントが表示されます。
図6: 自動スケール構成
図7: 配信されたイベント・チャート
アクティブな管理エージェントに対するLAプラグインの検証
OCI LAプラグインは、アクティブな管理エージェントにデプロイされます。可観測性と管理に移動し、「エージェントとゲートウェイ」メニューを選択して、これを検証します。
図8: エージェントとLAプラグインの詳細
「ログ分析」、「ログ・エクスプローラ」の順にナビゲートすると、起動された新しいホストのログが表示されます。さらにテストするために、定義した時間にスケジュールに基づいて自動スケーリングを作成します。
新しく起動されたインスタンスでは、Logging Analyticsが有効になり、LAプラグインがデプロイされ、ログがログ・アナリティクスに自動的に収集されます。
図9: Linux Syslogsのビジュアライゼーション
この機能により、LAプラグインを一括で有効化し、今後のインスタンス作成を自動化できます。
管理エージェントは、ACTIVE状態からSILENT状態になるまでに時間がかかることに注意してください。インスタンスが終了した直後にスクリプトまたはファンクションを起動しないでください。スクリプトをすぐに起動するには、終了したインスタンスに関連付けられているエージェントを手動で削除します。
無料OCIトライアルを開始して、今すぐテストを開始してください。
リソース
コメント
コメントを投稿