🎉

Opsエージェントについて

2024/06/11に公開

初めに

こんにちは。hikaruです。
今回はCompute Engineにインストールすることで、詳細なロギングデータやモニタリングデータを収集することができるOpsエージェントについて記載していきます。

Opsエージェントとは

Opsエージェントとは、Compute Engineインスタンスからテレメトリーデータを収集するエージェントになります。
以前は、モニタリングデータ収集用のMonitoringエージェントとログ収集用のLoggingエージェントを個別でインストールする必要がありましたが、現在は両方の機能を備えているOpsエージェントに統合されています。
今後、MonitoringエージェントLoggingエージェントには追加機能や新しいOSのサポートは提供されないので、Opsエージェントへの移行が推奨されています。
Opsエージェントでは、ログの連携にはFluent Bitが使用されており、指標のトレースにはOpenTelemetryコレクタが使用されています。

ロギング機能

  • さまざまなソースからのログの収集
    • デフォルトで /var/log/syslog/var/log/messagesのシステムログを収集
    • パスと更新間隔をカスタマイズできるファイルベースのログ
    • /systemdログ
    • TCPプロトコル経由でのログの記録
    • 転送プロトコル(Fluent Bit)経由でのログの記録
  • 柔軟な処理
    • テキストログを解析して構造化ログに変換
    • フィールドの削除、名前変更、設定を行い、ログエントリを変更
    • ラベルと正規表現に基づいてログを除外
    • Java、Python、Golangの複数行の言語例外ログを検出して連結
  • サードパーティアプリケーションのサポート

モニタリング機能

  • 以下のシステム指標がデフォルトで収集されます。
    • CPU指標
    • ディスク指標
    • iis指標(Windowsのみ)
    • インターフェース指標
    • gpu指標(Linuxのみ)
    • メモリ指標
    • mssql指標(Windowsのみ)
    • pagefile指標(Windowsのみ)
    • スワップ指標
    • ネットワーク指標
    • プロセス指標
    • エージェントのセルフ指標
  • サードパーティアプリケーションのサポート
  • Compute Engineで実行中のアプリケーションからPrometheus指標の収集

トレース機能

  • Open Telemetry SDKで計測されるアプリケーションからOpenTelemetry Protocol指標とトレースの収集

対応OS

Linux

  • CentOS 7
  • Rocky Linux8
  • Rocky Linux9
  • RHEL 7: rhel-7、rhel-7-9-sap-ha
  • RHEL 8: rhel-8、rhel-8-4-sap-ha、rhel-8-6-sap-ha、rhel-8-8-sap-ha
  • RHEL 9: rhel-9
  • Debian 10(Buster)
  • Debian 11(Bullseye)
  • Debian 12(Bookworm)
  • Ubuntu 20.04 LTS(Focal Fossa): ubuntu-2004-lts、ubuntu-minimal-2004-lts
  • Ubuntu 22.04 LTS(Jammy Jellyfish): ubuntu-2204-lts, ubuntu-minimal-2204-lts
  • Ubuntu 23.10(Mantic Minotaur): ubuntu-2310-amd64, ubuntu-minimal-2310-amd64
  • SLES 12: sles-12、sles-12-sp5-sap
  • SLES 15: sles-15、sles-15-sp2-sap、sles-15-sp3-sap、sles-15-sp4-sap、sles-15-sp5-sap
  • OpenSUSE Leap 15: opensuse-leap(opensuse-leap-15-3-、opensuse-leap-15-4-

Windows

  • Windows Server: Windows-2016、Windows-2019、Windows-2022
  • Windows Server Core: windows-2016-core、windows-2019-core、windows-20h2-core、windows-2022-core

Opsエージェントのアクセス要件

Opsエージェントのインストールには、以下のDNS名にアクセスする必要があります。
Firewallで外向き通信を絞っっている場合や、インターネットへのアクセスにプロキシを挟んでいる場合は注意してください。

  • Google Cloud Package Repository : packages.cloud.google.com
  • Googleのダウンロードサブドメイン : d1.google.com

Opsエージェントの実行には、以下のDNS名にアクセスする必要があります。

  • OAuth2トークンサーバ : oauth2.googleapis.com
  • Monitoring API : monitoring.google.com
  • Logging API : logging.googleapis.com

プロセス間通信にVMの以下のTCPポートを利用します。

  • 20201
  • 20202

インストール

新規VMへのインストール

コンソール画面からCompute Engineを作成する際には、モニタリングとロギング用の Ops エージェントをインストールするのチェックボックスをオンにすることで自動的にOpsエージェントをCompute Engineにインストールすることができます。

既存のVMへのインストール

インストールスクリプトを取得し、スクリプトを実行します。

$ curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
$ sudo bash add-google-cloud-ops-agent-repo.sh --also-install

Opsエージェントのインストールバージョンを確認します。

$ dpkg-query --show --showformat '${Package} ${Version} ${Architecture} ${Status}\n' google-cloud-ops-agent
google-cloud-ops-agent 2.47.0~ubuntu22.04 amd64 install ok installed

コンソール画面のオブザーバビリティタブからも、Opsエージェントをインストールしました
と表示され、メモリ使用率等のモニタリングデータが取得できていることが確認できました。

自動化ツールを利用したインストール

以下の自動化ツールを利用することによってCompute EngineにOpsエージェントのインストールを行うことができます。

  • Ansible
  • Chef
  • Puppet
  • Terraform
  • gcloud cli

エージェントポリシーを利用したインストール

エージェントポリシーを作成することによって、指定した条件に一致するCompute Engineフリート全体でOpsエージェントの自動インストールとメンテナンスを行うことができます。

エージェントポリシーの作成

gcloud cliを利用してエージェントポリシーを作成するため、gloudコマンドをインストールしていない場合は、インストールをしてください。コンソール画面からのエージェントポリシーの作成は現在未対応です。
Google Cloud側からエージェントポリシー作成のための事前設定スクリプト(set-permissions.sh)が用意されているので、こちらを実行して必要なAPIの有効化や、ロール設定などの初期設定を行ってください。

https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/managing-agent-policies?hl=ja#create-policy

その後、エージェントポリシーを作成するgcloudコマンドを実行します。

$ gcloud beta compute instances \
    ops-agents policies create ops-agents-policy-safe-rollout \
    --agent-rules="type=ops-agent,version=current-major,package-state=installed,enable-autoupgrade=true" \
    --os-types=short-name=ubuntu,version=22.04 \
    --group-labels=env=test,app=myproduct \
    --project=${GOOGLE_CLOUD_PROJECT}

WARNING: For the policies to take effect on [ubuntu] OS distro, please follow the instructions at https://cloud.google.com/compute/docs/manage-os#agent-install to install the OS Config Agent on your instances.

agent_rules:
- enable_autoupgrade: true
  package_state: installed
  type: ops-agent
  version: 2.*.*
assignment:
  group_labels:
  - app: myproduct
    env: test
  instances: []
  os_types:
  - short_name: ubuntu
    version: '22.04'
  zones: []
create_time: '2024-06-09T23:03:35.302882Z'
description: None
etag: 94585c50-0472-4f8d-82ba-a1ba2ab5a5bb
id: projects/404575992200/guestPolicies/ops-agents-policy-safe-rollout
update_time: '2024-06-09T23:03:35.302882Z'

作成したエージェントポリシーの設定内容に合うように、
ラベルとOSを指定してCompute Engineを作成します。

gcloud compute instances create test01 \
  --image-project ubuntu-os-cloud \
  --image-family=ubuntu-2204-lts \
  --zone=asia-northeast1-a \
  --preemptible \
  --boot-disk-auto-delete \
  --labels=app=myproduct \
  --labels=env=test \
  --machine-type e2-small

作成したCompute EngineにSSHし、Opsエージェントがインストールされているか確認します。

hogehoge@test01:~$ dpkg-query --show --showformat '${Package} ${Version} ${Architecture} ${Status}\n' google-cloud-ops-agent
google-cloud-ops-agent 2.47.0~ubuntu22.04 amd64 install ok installed

無事、インストールされていました。
エージェントポリシーを作成することで、条件に合致したCompute Engineを作成すると自動的にOpsエージェントがインストールされることが確認できました。

Opsエージェント設定ファイル

以下のような要件が必要な場合は、Opsエージェントの設定ファイルを変更する必要があります。

  • 組み込みのロギングまたは指標の取り込みをオフにしたい
  • エージェントによるログの収集元となるログファイルのファイルパスをカスタマイズしたい
  • JSON を解析するか、正規表現を使用して、エージェントがログエントリの処理に使用する構造化ログ形式をカスタマイズしたい
  • 指標のサンプリング レートを変更したい
  • 有効にする指標グループまたはグループをカスタマイズしたい
  • エージェントがログをローテーションする方法をカスタマイズしたい
  • サポートされているサードパーティのアプリケーションから指標とログを収集したい
  • Prometheusレシーバーを使用してカスタム指標を収集したい
  • OpenTelemetry Protocol(OTLP)レシーバーを使用して、カスタム指標とトレースを収集したい

Opsエージェント設定ファイルパス

Opsエージェント設定ファイルパスはLinux/Windowsで以下の通りです。。
ユーザ側でカスタマイズしたい場合は、以下の設定ファイルに構成をオーバライドすることで実現できます。
オーバライドした場合は、変更を有効化するためOpsエージェントの再起動を行っていください。

Linux
/etc/google-cloud-ops-agent/config.yaml
Windows
C:\Program Files\Google\Cloud Operations\Ops Agent\config\config.yaml

Opsエージェント設定ファイルのデフォルト設定

Linux版のOpsエージェント設定ファイルのデフォルト設定は以下の通りです。

config.yaml
logging:
  receivers:
    syslog:
      type: files
      include_paths:
      - /var/log/messages
      - /var/log/syslog
  service:
    pipelines:
      default_pipeline:
        receivers: [syslog]
metrics:
  receivers:
    hostmetrics:
      type: hostmetrics
      collection_interval: 60s
  processors:
    metrics_filter:
      type: exclude_metrics
      metrics_pattern: []
  service:
    pipelines:
      default_pipeline:
        receivers: [hostmetrics]
        processors: [metrics_filter]

以下のログファイルの内容をCloud Loggingへ送信します。

  • /var/log/messages
  • /var/log/syslog

以下の内容をCloud Monitoringの指標へ送信します。

  • hostmetrics
    • cpu
    • disk
    • gpu
    • interface
    • memory
    • network
    • swap
    • processes

設定ファイルの構成要素

Opsエージェント設定ファイルの構成要素は以下が基本となります。

  • receivers
    • この要素はエージェントによって収集される内容を表す
  • processors
    • この要素は、エージェントが収集した情報を変更する方法を記述する
  • service
    • この要素は、レシーバーとプロセッサをリンクして、パイプラインというデータフローを作成する

ロギングやモニタリング指標を定義する場合は理解が必須になってきますので、詳細は公式ドキュメントを参照してください。

https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/configuration?hl=ja#logging-service

https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/configuration?hl=ja#metrics-config

最後に

今回はCompute Engineにインストールすることで、詳細なロギングデータやモニタリングデータを収集することができるOpsエージェントについて記載していきました。
条件に合致するCompute Engineに、自動的にOpsエージェントをインストールすることができるエージェントポリシーを活用することや、Ansible等の構成管理ツールを利用することでインストール漏れを防ぐことができるので、積極的に使っていきたいですね。任意のログファイルをCloudLoggingに送信する方法や、モニタリング指標のカスタマイズなどはまた別の記事で書きたいと思います。
最後までご覧いただきありがとうございました。

GitHubで編集を提案

Discussion