Git型配置管理

Git型配置管理功能是選用的。 如果您已有其他方法來交付主機代理程式的檔案型配置,例如 AnsibleTerraformChefPuppet,則可能不需要 Git型配置管理。

附註:

  • Git型配置管理功能目前採用 alpha。 它具有完整功能,而且基本使用者體驗不會隨著其接近 GA 而改變太多,但它尚未提供 Instana 特性所需要的自動化層次和易用性。

  • 主機代理程式引導版本 1.2.11提供 Git型配置管理功能。

  • 主機代理程式引導版本 1.2.12 新增 HTTP/HTTPS 基本鑑別的支援。

主機代理程式可以從遠端 Git 儲存庫擷取其配置。 透過 Git可管理 主機代理程式配置 說明文件中所討論的所有配置。 部分主機代理程式配置需要主機代理程式重新啟動才能生效 (文件會在相關小節中闡明此需求)。

何時使用 Git型配置管理

Instana 主機代理程式隨附其配置的正常預設值,一般而言,在大部分正式作業實務中幾乎不需要配置。

不過,諸如 動態版本綁定、主機代理程式 後端配置 (特別是當您使用 多個後端時)、 secret主機標籤 等功能,可讓您設定一次配置,並將它延伸至部署在整個架構或環境中的主機代理程式。

Instana 主機代理程式具有內建 Git 用戶端,可從您操作的遠端儲存庫提取配置。 當主機代理程式在其 <instana-agent-dir>/etc/ 目錄中探索 本端 Git 儲存庫 時,它會自動啟動其 Git型配置管理功能,並在稱為 configuration的本端儲存庫中尋找 Git 遠端 。 啟動時,主機代理程式會根據遠端儲存庫中的可用項目來更新其本端儲存庫。 如需配置更新程序的相關資訊,請參閱 配置更新 一節。

必要條件 小節中概述 Git 儲存庫設定的需求。

必要條件

附註: 主機代理程式配置可能包含機密性資訊 (例如認證) ,且應該受到保護,以免未獲授權存取。

Git型配置管理不會採用任何本端 Git 用戶端或其他工具。 主機代理程式需要存取所配置的遠端 Git 儲存庫。 此存取權包括網路連線及 Git 鑑別:

  • 管理遠端 Git 儲存庫的系統必須可透過使用來自主機代理程式的網路連線來存取。 系統需要根據 Git 傳輸通訊協定來提供存取權。 目前,主機代理程式支援 HTTP 及 HTTP 傳輸通訊協定。 此外,必須開啟適當的埠。

  • 從高於 1.2.12版的代理程式引導開始,支援基本 HTTP/HTTPS 鑑別。 環境變數 INSTANA_GIT_REMOTE_USERNAMEINSTANA_GIT_REMOTE_PASSWORD 可用來設定存取認證。

設定

自簽憑證

如果您自行管理 Git 儲存庫,則可以使用自簽憑證。 若要讓代理程式安全連接至 Git 儲存庫,您必須將自簽憑證匯入至 Java 信任儲存庫。 如需相關資訊,請參閱 自簽憑證

使用 .netrc 檔案進行鑑別

您可以使用 .netrc 檔來提供密碼或存取記號,以授權存取 Git 儲存庫。 .netrc 廣泛使用,其相關詳細資料可在 .netrc man 頁面上找到。

您可以在執行 Instana 主機代理程式的使用者 (例如 root) 的起始目錄中配置 .netrc 檔。 請參閱 github.com 儲存庫的下列 .netrc 範例檔:

machine github.com
login oauth2 
password <access_token> 

附註:<access_token> 取代為存取記號。

Git 儲存庫結構

在 Git 儲存庫中,您需要具有與 <instana-agent-dir>/etc中相同的目錄結構。 例如,如果您想要從名為 configuration-mysql.yaml的 Git 檔案取得資料,則此檔案需要放置在名為 instana 的 Git 目錄中 (即 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 ,指定其他參數的最簡單方法是使用 drop-in 檔案。 若要檢視 drop-in 目錄的路徑,請執行下列指令:

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 *&lt;branch&gt;* with the name of the remote branch that the Instana host agent connects to.
     - Replace *&lt;repository_url&gt;* with the URL of the remote Git repository; for example, `https://github.com/<your_account>/<your_repo>.git`.
     - Replace *&lt;username&gt;* 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 *&lt;access_token&gt;* 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 指令,以重新載入 drop-in 檔案。
  2. 執行指令 systemctl restart instana-agent,以重新啟動 Instana 主機代理程式。

搭配環境變數

如果您已設定下列環境變數,則當主機代理程式啟動時,它會檢查 <instana-agent-dir>/etc/ 資料夾中是否存在本端 Git 儲存庫。 如果本端 Git 儲存庫不存在,則主機代理程式會建立連接至遠端儲存庫的本端儲存庫。

如果 Instana 代理程式直接在主機上執行,則需要在主機上設定下列環境變數。 如果主機代理程式在儲存器化環境中執行,請在儲存器層次上設定變數。

環境變數 說明
INSTANA_GIT_REMOTE_REPOSITORY 遠端 Git 儲存庫的 URL; 例如 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 文件中的 -g-b-u-p 選項 ,這些文件會對映至 環境方法INSTANA_GIT_REMOTE_REPOSITORYINSTANA_GIT_REMOTE_BRANCHINSTANA_GIT_REMOTE_USERNAMEINSTANA_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 映像檔

步驟基本上與 環境方法相同,方法是將 INSTANA_GIT_REMOTE_REPOSITORYINSTANA_GIT_REMOTE_BRANCHINSTANA_GIT_REMOTE_USERNAMEINSTANA_GIT_REMOTE_PASSWORD 環境變數新增至 Docker 儲存器。

例如,下列摘錄提供在儲存器中啟動主機代理程式所需的參數,以及啟用 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型配置管理可以在 代理程式管理儀表板上的 配置管理 區段中設定。

重要事項: 您必須將 .git 字尾新增至 INSTANA_GIT_REMOTE_REPOSITORY 位址的結尾,例如 https://github.com/<your_account>/<your_repo>.git。 此外,若要配置基本鑑別以存取 Git 儲存庫,您可以使用 .netrc 檔案。 如需相關資訊,請參閱 使用 .netrc 檔案進行鑑別

使用 API

可以使用 API 來起始設定及配置 Git型配置管理,如 Web REST API 文件Host Agent 小節中所述。

手動設定

手動設定包括起始設定 <instana-agent-dir>/etc/ 資料夾中的 Git 儲存庫,以及新增名為 configurationremote

主機代理程式會使用已配置的追蹤分支,從 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 URL上的正式文件中說明了可能的 <git-repository-url> 格式。

配置更新項目

主機代理程式會從遠端儲存庫提取配置更新項目:

  1. 在啟動或重新啟動時。
  2. 透過透過 代理程式管理儀表板起始的 reboot
  3. 透過 代理程式管理儀表板上的配置變更。
  4. 透過 Host Agent 小節中說明的 Web API ,以及依賴它的整合,例如 GitHub Update Agent 動作

Git型配置管理會在本端 main 分支上運作,並以所配置遠端追蹤分支的版本來更新它。 如果未配置追蹤分支,則會將錯誤訊息新增至主機代理程式日誌檔。 當沒有進一步的配置更新執行時,代理程式會使用現行配置來回復其監視。

本端變更不是預期的,會在更新時捨棄。 Git型配置管理會接觸已取消追蹤的檔案,因此一開始並不需要將所有檔案新增至儲存庫。

使用 Git 連結鉤來觸發更新

Git 連結鉤是您可以放置在儲存庫的 .git/hooks 目錄中的程式,它們會在 Git 儲存庫生命週期中的不同時間觸發。 Git 提供 許多不同的連結鉤,而 post-update 連結鉤最適合與主機代理程式的 Git型配置管理整合。

GitOps-Demo 儲存庫 提供 範例 post-update Git 連結鉤 ,每當儲存庫中的分支更新時,即會觸發主機代理程式更新。

在您觸發推送之後,您會看到傳送回 Git 用戶端的 Script 預期輸出:

$ 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 更新動作來觸發更新

GitOps 的 Instana GitHub 動作 可讓您使用 Instana 的 Web API 直接觸發主機代理程式的遠端。

GitOps-Demo 儲存庫 顯示如何在 GitHub 上設定儲存庫來管理主機代理程式配置,以及如何使用 GitOps的 Instana GitHub 動作來自動觸發更新。

範例

Private GitHub 儲存庫

GitHub 支援使用記號進行 HTTP 鑑別,主機代理程式可以依照本節的說明來使用。

若要使用 GitHub 儲存庫,您必須先建立個人存取記號。 如需如何執行的詳細資料,請參閱 建立個人存取記號 GitHub 文件頁面。 記號只需要讀取權即可存取儲存庫。

GitHub 預期會將記號提供為 HTTPS 基本鑑別使用者名稱,密碼空白。 因此,可以透過設定下列環境變數集,將主機代理程式配置為使用 GitHub 儲存庫的 HTTP 基本鑑別:

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型配置管理。 如需可能配置方法的概觀,請參閱 設定 一節。