管理エージェント設定の使用 Git

エージェントの設定はを使用して管理できます Git。

Gitベースの構成管理機能はオプションです。 ホスト・エージェントのファイル・ベース構成を配信する他の手段 ( AnsibleTerraformChef、または Puppet)の場合は、 Gitベースの構成管理は必要ありません。

注:

  • Gitベースの構成管理機能は、ホスト・エージェントのブートストラップ・バージョン 1.2.11から使用できます。
  • ホスト・エージェント・ブートストラップ・バージョン 1.2.12 には、 HTTP/HTTPS 基本認証のサポートが追加されています。

ホスト・エージェントは、その構成をリモート Git リポジトリーから取得できます。 ホスト・エージェント構成 資料で説明されているすべての構成は、 Gitで管理することができます。 一部のホスト・エージェント構成では、有効になる前にホスト・エージェントを再始動する必要があります (資料では、この要件が関連セクションで明確に説明されています)。

Git ベースの構成管理を使用する場合

Instanaホストエージェントはデフォルト設定で提供され、ほとんどの運用環境ではこれらの設定を変更する必要はありません。

ただし、 動的バージョン固定、ホストエージェントのバックエンド設定 (特に複数のバックエンドを使用する場合)、 シークレットホストタグといった機能は、設定を一度定義するだけで、ランドスケープ全体や環境に展開されたホストエージェントに展開できるような集中化されたバージョン管理によって大きな恩恵を受けます。

Instana ホスト・エージェントには、操作中のリモート・リポジトリーから構成を取り出すことができる組み込み Git クライアントがあります。 ホスト・エージェントは、 *instanaAgentDir*/etc/ ディレクトリー内の ローカル Git リポジトリー を検出すると、 Gitベースの構成管理機能を自動的にアクティブ化し、 configurationというローカル・リポジトリー内で Git リモート を探します。 始動時に、ホスト・エージェントは、リモート・リポジトリーで使用可能なものに基づいてローカル・リポジトリーを更新します。 構成の更新プロセスについて詳しくは、 構成の更新 のセクションを参照してください。

リポジトリ Git 設定の要件は 「前提条件 」セクションに概要が記載されています。

前提条件

注: ホスト・エージェント構成には機密情報 (資格情報など) が含まれている可能性があるため、無許可アクセスから保護する必要があります。

Git ベースの構成管理では、ローカルの Git クライアントやその他のツールは想定されていません。 ホストエージェントは、設定済みの Git リモートリポジトリへのアクセス権が必要です。 このアクセスにはネットワーク接続と Git 認証が含まれます:

  • リモートリポジトリをホストするシステムは、ホストエージェントからのネットワーク Git 接続によって到達可能である必要があります。 システムは、トランスポート Git プロトコルに基づいてアクセスを提供する必要がある。 現在、ホストエージェントは および HTTPS トランスポート HTTP プロトコルをサポートしています。 さらに、適切なポートが開いている必要があります。

  • バージョン以上の 1.2.12エージェントブートストラップから、基本 HTTP/HTTPS 認証がサポートされます。 環境変数の INSTANA_GIT_REMOTE_USERNAMEINSTANA_GIT_REMOTE_PASSWORD を使用して、アクセス資格情報を設定できます。

セットアップ

自己署名証明書

リポジトリ Git を自身でホストする場合、自己署名証明書を使用できます。 エージェントがリポジトリに Git 安全に接続するには、自己署名証明書をJavaのトラストストアにインポートする必要があります。 詳細については、 自己署名証明書を参照してください。

.netrcファイルによる認証

リポジトリ Git へのアクセスは、パスワードまたはアクセストークンを .netrc 提供するファイルを使用して認証できます。 .netrc は広く使用されており、その詳細については、 .netrc マニュアル・ページを参照してください。

Instanaホストエージェントが実行されているユーザーのホームディレクトリ(例: root)にある .netrc ファイルを設定できます。 リポジトリ github.com については、以下のサンプル .netrc ファイルを参照してください:

machine github.com
login oauth2
password <access_token>
注記: <access_token> を実際のアクセス トークンに置き換えてください。

Git リポジトリ構造

リポジトリ Git 内では、と同じディレクトリ構造を持つ *instanaAgentDir*/etc必要があります。 例えば、という Git 名前のファイルからデータを configuration-mysql.yaml取得したい場合、この Git ファイルはという名前のディレクトリ instana (つまりファイル instana/configuration-mysql.yaml)に配置する必要があります。 そうでない場合、リポジトリ Git からファイルを取得すると、サーバー上の誤った場所に配置され、Instanaホストエージェントによって使用されません。

次の図はリポジトリ Git の例示構造を示しています:

repository-root/
├── instana/
│   ├── configuration-mysql.yaml
│   └── com.instana.agent.main.config.UpdateManager.cfg
└── org.ops4j.pax.url.mvn.cfg

systemd とともに

systemdを使用する場合、追加パラメータを指定する最も簡単な方法はドロップインファイルを使用することです。 ドロップインディレクトリのパスを表示するには、次のコマンドを実行します:

systemctl status instana-agent

このディレクトリ内のファイルは拡張子を持たなければなりません。さもなければ .conf、それらのファイルは無視されます。

  1. ディレクトリ /etc/systemd/system/instana-agent.service.d/ 内に拡張子付きの新しいファイル .confを作成します。例えば git-configuration-environments.conf. などです。
  2. 以下の内容をファイルに追加します。
    [Service]
    Environment=INSTANA_GIT_REMOTE_BRANCH=<branch>
    Environment=INSTANA_GIT_REMOTE_REPOSITORY=<repository_url>
    Environment=INSTANA_GIT_REMOTE_USERNAME=<username>
    Environment=INSTANA_GIT_REMOTE_PASSWORD=<access_token>
    ```   **Notes:**
     - Replace *<branch>* with the name of the remote branch that the Instana host agent connects to.
     - Replace *<repository_url>* with the URL of the remote Git repository; for example, `https://github.com/<your_account>/<your_repo>.git`.
     - Replace *<username>* with a username or access token (for basic authentication). If you are using a `.netrc` file or a public repository, you can remove the whole line `Environment=INSTANA_GIT_REMOTE_USERNAME=<username>`.
     - Replace *<access_token>* with an access token. If you are using an access token as username (basic authentication), a `.netrc` file, or a public repository, you can remove the whole line `Environment=INSTANA_GIT_REMOTE_PASSWORD=<access_token>`.
    
    

ドロップインファイルを追加または変更した後、次の手順を完了してください:

  1. systemctl daemon-reload コマンドを実行して、ドロップインファイルを再読み込みします。
  2. システムctl restart instana-agent コマンドを実行して、Instana ホストエージェントを再起動します。

環境変数を使用して

以下の環境変数を設定している場合、ホストエージェントが起動されると、ローカルリポジトリが Git フォルダ *instanaAgentDir*/etc/ 内に存在するかどうかを確認します。 ローカルリポジトリ Git が存在しない場合、ホストエージェントはリモートリポジトリに接続されたローカルリポジトリを作成します。

Instanaエージェントがホスト上で直接実行されている場合、以下の環境変数をホスト上で設定する必要があります。 ホストエージェントがコンテナ化された環境で実行されている場合、コンテナレベルで変数を設定してください。

環境変数 説明
INSTANA_GIT_REMOTE_REPOSITORY リモートリポジトリ URLGit の; 例えば、 https://github.com/<your_account>/<your_repo>.git
INSTANA_GIT_REMOTE_BRANCH Instanaホストエージェントが追跡するリモートブランチの名前。例: main
INSTANA_GIT_REMOTE_USERNAME オプション: 基本認証で使用するユーザー名またはアクセストークン(この表の後の注を参照)
INSTANA_GIT_REMOTE_PASSWORD オプション: 基本認証で使用するパスワード(この表の後の注を参照)
注: ユーザー名とパスワードの代わりにアクセストークンを使用した基本認証を利用する場合は、パラメータにアクセストークンを INSTANA_GIT_REMOTE_USERNAME設定してください。 これにより、ユーザー名なしで基本認証が正しく設定されることが保証されます。

ワンライナーコマンドで

ドキュメント OneLiner 内の -b-u -gおよび -p オプションを参照してください。これらは環境メソッドの、 INSTANA_GIT_REMOTE_BRANCHINSTANA_GIT_REMOTE_USERNAME INSTANA_GIT_REMOTE_REPOSITORYおよび INSTANA_GIT_REMOTE_PASSWORD 環境変数に対応します。

以下の表は、環境変数とワンライナーコマンドのパラメータ間の対応関係を示しています:

環境変数 ワンライナーコマンドのパラメータ
INSTANA_GIT_REMOTE_REPOSITORY -g = (オプション。-b を設定する場合に必要)
INSTANA_GIT_REMOTE_BRANCH -b = (オプション。-g を設定する場合に必要)
INSTANA_GIT_REMOTE_USERNAME -u = (オプション。-p を設定する場合に必要)
INSTANA_GIT_REMOTE_PASSWORD -p =(任意)

Docker イメージを使用する場合

手順は基本的に環境メソッドと同様であり、コンテナに`ENV INSTANA_GIT_REMOTE_REPOSITORY`変数`ENV_PATH` INSTANA_GIT_REMOTE_USERNAMEINSTANA_GIT_REMOTE_BRANCH 、`ENV_TIME` Docker、 INSTANA_GIT_REMOTE_PASSWORD `ENV_TIME`、`ENV_TIME`を追加します。

たとえば、次のコードサンプルは、コンテナ内でホストエージェントを起動するために必要なパラメータと、ベースの構成管理 Git を有効にするために必要な Git パラメータを示しています:

# Please enter proper values for all --env arguments.
docker run \
   --detach \
   --name instana-agent \
   --volume /var/run:/var/run \
   --volume /run:/run \
   --volume /dev:/dev:ro \
   --volume /sys:/sys:ro \
   --volume /var/log:/var/log:ro \
   --privileged \
   --net=host \
   --pid=host \
   --env="INSTANA_AGENT_ENDPOINT=" \
   --env="INSTANA_AGENT_ENDPOINT_PORT=" \
   --env="INSTANA_AGENT_KEY=" \
   --env="INSTANA_DOWNLOAD_KEY=" \
   --env="INSTANA_AGENT_ZONE=" \
   --env="INSTANA_GIT_REMOTE_BRANCH=" \
   --env="INSTANA_GIT_REMOTE_PASSWORD=" \
   --env="INSTANA_GIT_REMOTE_REPOSITORY=" \
   --env="INSTANA_GIT_REMOTE_USERNAME=" \
   icr.io/instana/agent

エージェント管理ダッシュボードを使用する場合

-ベース Git の構成管理は、エージェント管理ダッシュボードの 「構成管理 」セクションで設定できます。

重要: INSTANA_GIT_REMOTE_REPOSITORY アドレスの末尾に サフィックス( .git 例: https://github.com/<your_account>/<your_repo>.git.)を追加する必要があります。 さらに、 Git リポジトリへのアクセスに基本認証を設定するには、ファイル .netrc を使用できます。 詳細については、.netrc ファイルを使用した認証を参照してください。

API を使用する場合

Gitベースの構成管理は、 Web REST API 資料Host Agent セクションで説明されているように、API を使用して初期化および構成できます。

手動セットアップ

手動セットアップでは、 *instanaAgentDir*/etc/ フォルダー内の Git リポジトリーを初期化し、 configurationという名前の remote を追加します。

ホスト・エージェントは、 configuration リモートから構成済みのトラッキング・ブランチを使用して、ローカル main ブランチをプルします。 Git リポジトリーをセットアップする方法は複数あります。ユーザーはセットアップに適した方法を自由に選択できます。

例えば、以下のセットアップでは、ホスト・エージェントに configuration リモートの main ブランチから構成をプルさせることができます。

etc> git init
etc> git remote add -m main -t main configuration <git-repository-url>
etc> git fetch configuration
etc> git checkout -f -b main --track configuration/main

以下の例では、 configuration リモートの my-configurations ブランチから構成をプルできます。

etc> git init
etc> git remote add -m main -t my-configurations configuration <git-repository-url>
etc> git fetch configuration
etc> git checkout -f -b main --track configuration/my-configurations

可能な <git-repository-url> 形式については、 Git の URLの公式資料で説明されています。

構成の更新

ホスト・エージェントは、リモート・リポジトリーから構成の更新を取り出します。

  1. 始動時または再始動時。
  2. エージェント管理ダッシュボード上で開始 reboot された
  3. エージェント管理ダッシュボードを介した構成変更を通じて。
  4. セクションに記載 Host Agent されている Web API およびそれに依存する統合(例: Update Agent GitHub アクション )を通じて。

Gitベースの構成管理は、ローカル main ブランチ上で動作し、構成済みのリモート・トラッキング・ブランチのバージョンで更新します。 トラッキング・ブランチが構成されていない場合は、エラー・メッセージがホスト・エージェント・ログ・ファイルに追加されます。 これ以上の構成更新は実行されませんが、エージェントは現在の構成を使用してモニターを再開します。

ローカル変更は予期されていないため、更新時に破棄されます。 トラッキング解除されたファイルは Gitベースの構成管理によって影響を受けるため、最初はすべてのファイルをリポジトリーに追加する必要はありません。

フック Git を使用した更新のトリガー

Git フックは、リポジトリーの .git/hooks ディレクトリーに置くことができるプログラムであり、 Git リポジトリーのライフサイクルのさまざまな時点でトリガーされます。 Git には 多くの異なるフックが用意されています。 post-update フックは、ホスト・エージェントの Gitベースの構成管理との統合に最も適しています。

この GitOps-Demo リポジトリは、リポジトリ内のブランチが更新されるたびにホストエージェントの更新をトリガーするサンプル Gitpost-update フックを提供します。

プッシュをトリガーした後、スクリプトの予期される出力が Git クライアントに返送されることが分かります。

$ gitops-test# git push origin HEAD:main
[detached HEAD 9632c09] origin
 1 file changed, 1 insertion(+), 1 deletion(-)
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 376 bytes | 376.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: GitOps update: Triggering the configuration update of agents matching the following query: 'entity.zone:"test"' ... OK
   699ada9..9632c09  HEAD -> main

更新アクション GitHub を使用して更新をトリガーする

Instana GitHub のアクションを使用すると、InstanaのWeb APIを介して GitOps ホストエージェントのリモートを簡単にトリガーできます。

GitOps-デモ・リポジトリー は、ホスト・エージェント構成を管理するために GitHub 上にリポジトリーをセットアップする方法、および GitOps の Instana GitHub アクションを使用して更新を自動的にトリガーする方法を示しています。

プライベート GitHub リポジトリー

GitHub は、トークンを使用した HTTPS 認証をサポートします。これは、このセクションで説明されているように、ホスト・エージェントで使用できます。

GitHub リポジトリーを使用するには、まず個人用アクセス・トークンを作成する必要があります。 その方法の詳細は、「個人用アクセス トークンの作成GitHub 」ドキュメント ページに記載されています。 このトークンでは、リポジトリーにアクセスするための読み取りアクセス権のみ必要です。

GitHub トークンが基本認証 HTTPS のユーザー名として提供され、パスワードは空であることを期待しています。 したがって、以下の環境変数を設定することで、GitHub リポジトリーに対して HTTPS 基本認証を使用するようにホスト・エージェントを構成できます。

INSTANA_GIT_REMOTE_REPOSITORY='https://github.com/<user/organization>/<repository>.git
INSTANA_GIT_REMOTE_BRANCH='<branch>'
INSTANA_GIT_REMOTE_USERNAME='<token>'
INSTANA_GIT_REMOTE_PASSWORD=''

空のパスワードとユーザー名としての個人トークンという同じ原則は、 Gitベースの構成管理用にホスト・エージェントを構成する他の手段でも機能することに注意してください。 可能な設定方法の概要については、 「セットアップ 」セクションを参照してください。

エージェントの更新を制御する Git

本番環境にデプロイされたホストエージェントのバージョン更新を制御するには、複数の方法を利用できます。 静的エージェントを使用する場合、必要に応じてホストエージェントを手動で更新する必要があります。 動的エージェントを使用する場合、更新間隔や固定バージョンなどの設定を構成できます。 詳細については、 「動的ホストエージェントの更新設定」 を参照してください。 設定が指定されていない場合、更新は毎日自動的に動的エージェントに適用されます。 さらに、ホストエージェントのバージョン更新をより厳密に制御する必要がある場合は、動的エージェントバージョン固定と Git ベース構成管理を組み合わせて使用できます。 テスト環境がある場合、本番環境と同様のシナリオでエージェントのデプロイメントをテストしてから、本番環境へ更新を適用できます。

エージェントの更新 Kubernetes 制御

Argo CD を使用して、動的エージェント Kubernetes の更新を制御および管理できます。 この方法を使用することで、環境変数を設定することによりエージェントのバージョンを指定できます。

オペレーターインストールではカスタムリソースを、チャート Helm インストールでは`.yaml`ファイル values.yaml を使用して環境変数を設定できます。

Argo CDはリポジトリの指定ブランチを監視し、新しい変更を自動的にクラスターに適用します。 この方法で更新プログラムを構成することで、更新プログラムが適用されるタイミングを正確に制御できます。 更新プログラムは自動的に実行する代わりに、オフピーク時間帯にインストールされるようスケジュール設定できます。 さらに、この設定により、使用中のエージェントの正確なバージョンを指定する柔軟性が得られます。

エージェントバージョンの固定とArgo CD統合を組み合わせたワークフローの実装例と手順については、 instana/argocd-demo リポジトリを参照してください。

この例では、リポジトリには本番クラスター向けのバージョン固定用 main ブランチと、テスト環境向けのバージョン固定用 test ブランチが含まれています。 したがって、 test ブランチには新しいエージェントバージョンが固定されています。 この設定の目的は、エージェントのバージョンを本番クラスターに昇格させる前に、テストクラスターで新バージョンをテストすることです。 新バージョンが利用可能になった際に、`master`および` test development main `ブランチに対して新しいプルリクエストを自動生成するMend Renovateの使用方法については、次のセクションを参照してください。

ホストエージェントの更新制御

エージェントバージョンの固定化と Git ベースラインベースの構成管理を組み合わせたワークフローの実装例については、 instana/gitops-demo リポジトリを参照してください。

このサンプルリポジトリでは、リポジトリホスティングサービスとして GitHub を使用し、依存関係更新の自動化には Mend Renovate を、Instana バックエンドへのリクエスト送信には GitHub Actions を利用しています。 これらのサービスはすべて、お好みのサービスに置き換えることができます。 以下の要件を満たしていることを確認してください。- ベース更新 Git フローを実装する場合:

  • Git ソースコードリポジトリ形式として

  • 設定 HTTP 変更時にInstanaバックエンドへリクエストを送信する自動化

    ここでは任意の自動化機能を使用できます。 ただし、内のバージョンが更新 instana/com.instana.agent.bootstrap.AgentBootstrap.cfg されていることを確認し、異なる環境には異なるブランチを使用してください。

リポジトリには、エージェントの本番デプロイメントの現在の状態を追跡するブランチと main 、エージェントのテスト環境を表すブランチ test が含まれています。

Mend Renovate は、instana/agent-updates リポジトリの新規タグを監視し、それらのタグを構成 instana/com.instana.agent.bootstrap.AgentBootstrap.cfg ファイル内のバージョンと比較するように設定されています。 リポジトリ instana/agent-updates で新しいタグが検出されると、Mend Renovateは` test branch`を基にブランチを作成し、` test branch`上の設定ファイルに変更を追加するための GitHub プルリクエストを発行します。 Renovateが提供する様々なオプションを利用できます。例えば、 更新を週に1回のみスケジュールしたり、手動承認のためにプルリクエストに特定の GitHub 担当者(ハンドル)を割り当てたりできます。 プルリクエストがブランチ test にマージされると、 GitHub Actionsはワークフローを実行し、設定済みのInstanaバックエンドに通知します。 その後、Instanaバックエンドは、テスト環境の特定のゾーンおよびタグ制約に一致するすべてのエージェントに対して、エージェント再起動コマンドを送信します。

さらに、2つ目のワークフローでは、現在の instana/com.instana.agent.bootstrap.AgentBootstrap.cfg ファイルを test ブランチから新しい機能ブランチにコピーし、ブランチ main に対してプルリクエストを開きます。これにより、エージェントバージョンがテスト環境から本番環境へ確実に移行されます。

本番環境に近い環境で変更が検証された後、変更を main ブランチにマージできます。 マージすると、 GitHub Actionsはワークフローを実行し、本番環境に接続されているすべてのエージェントに対して更新リクエストをInstanaバックエンドに送信します。

以下のサンプル構成を参照してください。

# This field specifies which version set of components should be used by the agent;
# its value must be a valid tag from https://github.com/instana/agent-updates/tags
# version = <tag>
# renovate: datasource=github-tags depName=instana/agent-updates versioning=loose
version = 2024.09.02.0634

# This field controls which set of components is used by the agent at runtime.
productName = ${env:INSTANA_PRODUCT_NAME}

origin = package dynamic
注記: Instana バックエンドがエージェント構成の更新を受信するたびに、該当するすべてのエージェントを再起動します。 エージェントの数とハードウェア上での分散状況によっては、この再起動によりリソース消費量が急増する可能性があります。 負荷を時間をかけて遅延させる必要がある場合、更新対象のエージェントのバッチを表す追加の分岐を用いて例を拡張できます。 リポジトリの自動化設定を調整し、手動承認を一度だけ待機させ、その後事前に定義された遅延期間を経て他のブランチへの更新を自動的にプッシュするようにすることで、手動管理の負担増加を回避できます。