Opsエージェントについて
初めに
こんにちは。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の有効化や、ロール設定などの初期設定を行ってください。
その後、エージェントポリシーを作成する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エージェントの再起動を行っていください。
/etc/google-cloud-ops-agent/config.yaml
C:\Program Files\Google\Cloud Operations\Ops Agent\config\config.yaml
Opsエージェント設定ファイルのデフォルト設定
Linux版のOpsエージェント設定ファイルのデフォルト設定は以下の通りです。
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
- この要素は、レシーバーとプロセッサをリンクして、パイプラインというデータフローを作成する
ロギングやモニタリング指標を定義する場合は理解が必須になってきますので、詳細は公式ドキュメントを参照してください。
最後に
今回はCompute Engineにインストールすることで、詳細なロギングデータやモニタリングデータを収集することができるOpsエージェントについて記載していきました。
条件に合致するCompute Engineに、自動的にOpsエージェントをインストールすることができるエージェントポリシーを活用することや、Ansible等の構成管理ツールを利用することでインストール漏れを防ぐことができるので、積極的に使っていきたいですね。任意のログファイルをCloudLoggingに送信する方法や、モニタリング指標のカスタマイズなどはまた別の記事で書きたいと思います。
最後までご覧いただきありがとうございました。
Discussion