Gestione della configurazione dell'agente utilizzando Git

È possibile gestire le configurazioni degli agenti utilizzando Git.

Le funzioni di gestione Git della configurazione basate su sono opzionali. Se disponi già di altri mezzi per fornire configurazioni basate su file per l'agente host, come Ansible Terraform, Chef o Puppet, probabilmente non hai bisogno di una gestione della Git configurazione basata su.

Note:

  • Le funzioni di gestione Git della configurazione basate su sono disponibili dalla versione bootstrap 1.2.11dell'agente host.
  • La versione bootstrap 1.2.12 dell'agente host aggiunge il supporto per HTTP/HTTPS l'autenticazione di base.

L'agente host può recuperare le proprie configurazioni da un repository Git remoto. Tutte le configurazioni descritte nella documentazione relativa alla configurazione dell'agente host sono gestibili tramite Git. Alcune configurazioni dell'agente host richiedono il riavvio dell'agente host prima di avere effetto (la documentazione chiarisce questo requisito nella sezione pertinente).

Quando utilizzare la gestione della Git configurazione basata su

L'agente host Instana viene fornito con configurazioni predefinite, che nella maggior parte dei casi non è necessario modificare.

Tuttavia, funzionalità quali il pinning dinamico delle versioni, le configurazioni del backend dell'agente host (soprattutto quando si utilizzano più backend ), i segreti e i tag host traggono grande vantaggio da un controllo centralizzato delle versioni che consente di impostare una configurazione una sola volta e di distribuirla agli agenti host distribuiti in interi paesaggi o ambienti.

L'agente host Instana dispone di un client Git integrato in grado di recuperare le configurazioni da un repository remoto gestito dall'utente. Quando l'agente host rileva un repository Git locale nella propria *instanaAgentDir*/etc/ directory, attiva automaticamente le proprie funzionalità di gestione della Git configurazione basate su e cerca un Git remoto nel repository locale denominato configuration. All'avvio, l'agente host aggiorna il proprio repository locale in base a quanto disponibile in quello remoto. Per ulteriori informazioni sul processo di aggiornamento della configurazione, consultare la sezione Aggiornamenti della configurazione.

I requisiti per la configurazione del Git repository sono descritti nella sezione Prerequisiti.

Prerequisiti

Nota: la configurazione dell'agente host potrebbe includere informazioni sensibili (come le credenziali) e deve essere protetta da accessi non autorizzati.

La gestione della configurazione basata su Git non presuppone alcun client Git locale o altri strumenti. L'agente host deve avere accesso al repository Git remoto configurato. Questo accesso include la connessione di rete e Git l'autenticazione:

  • Il sistema che ospita il repository Git remoto deve essere raggiungibile utilizzando una connessione di rete dall'agente host. Il sistema deve fornire l'accesso in base al Git protocollo di trasporto. Attualmente, l'agente host supporta i protocolli di HTTP HTTPS trasporto e. Inoltre, è necessario che le porte appropriate siano aperte.

  • A partire dalla versione di avvio dell'agente 1.2.12 sopra indicata, è supportata l'autenticazione HTTP/HTTPS di base. Le variabili di ambiente INSTANA_GIT_REMOTE_USERNAME e INSTANA_GIT_REMOTE_PASSWORD possono essere utilizzate per impostare le credenziali di accesso.

Configura

certificati autofirmati

Se ospiti tu stesso il Git repository, puoi utilizzare un certificato autofirmato. Affinché l'agente possa connettersi in modo sicuro a un Git repository, è necessario importare il certificato autofirmato nell'archivio di certificati Java. Per ulteriori informazioni, consulta Certificati autofirmati.

Autenticazione con file.netrc

L'accesso a un Git repository può essere autorizzato utilizzando un .netrc file per fornire la password o il token di accesso. .netrc è ampiamente utilizzato e ulteriori dettagli al riguardo sono disponibili nella pagina man di.netrc.

È possibile configurare il .netrc file nella directory home dell'utente (ad esempio, root) in cui è in esecuzione l'host agent Instana. Vedi il seguente file di .netrc esempio per il github.com repository:

machine github.com
login oauth2
password <access_token>
Nota: sostituire <access_token> con un token di accesso.

Git struttura dell'archivio

Nel Git repository è necessario avere la stessa struttura di directory presente in *instanaAgentDir*/etc. Ad esempio, se si desidera ottenere i dati dal Git file denominato configuration-mysql.yaml, questo file deve essere inserito nella Git directory denominata instana (ovvero il file instana/configuration-mysql.yaml). Altrimenti, quando il file viene ottenuto dal Git repository, viene collocato nella posizione errata sul server e non viene utilizzato dall'agente host Instana.

La figura seguente mostra la struttura esemplificativa di un Git repository:

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

Con systemd

Utilizzando systemd, il modo più semplice per specificare i parametri aggiuntivi è utilizzare un file drop-in. Per visualizzare il percorso della directory drop-in, eseguire il seguente comando:

systemctl status instana-agent

I file in questa directory devono avere l'estensione .conf, altrimenti vengono ignorati.

  1. Crea un nuovo file nella /etc/systemd/system/instana-agent.service.d/ directory con estensione .conf, ad esempio git-configuration-environments.conf.
  2. Aggiungere il seguente contesto al file:
    [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>`.
    
    

Dopo aver aggiunto o modificato un file drop-in, completare i seguenti passaggi:

  1. Ricarica i file drop-in eseguendo il comando systemctl daemon-reload.
  2. Riavvia l'agente host Instana eseguendo il comando systemctl restart instana-agent.

Con variabili d'ambiente

Se sono state impostate le seguenti variabili di ambiente, all'avvio l'agente host verifica la presenza del repository Git locale nella *instanaAgentDir*/etc/ cartella. Se il repository Git locale non è presente, l'agente host crea un repository locale collegato al repository remoto.

Se l'agente Instana è in esecuzione direttamente su un host, è necessario impostare le seguenti variabili di ambiente sull'host. Se l'agente host è in esecuzione in un ambiente containerizzato, impostare le variabili a livello di container.

Variabile di ambiente Descrizione
INSTANA_GIT_REMOTE_REPOSITORY Il URL del repository Git remoto; ad esempio, https://github.com/<your_account>/<your_repo>.git.
INSTANA_GIT_REMOTE_BRANCH Il nome del ramo remoto che l'agente host Instana deve seguire; ad esempio, main
INSTANA_GIT_REMOTE_USERNAME Opzionale: nome utente o token di accesso da utilizzare nell'autenticazione di base (vedere la nota dopo questa tabella)
INSTANA_GIT_REMOTE_PASSWORD Opzionale: la password da utilizzare nell'autenticazione di base (vedere la nota dopo questa tabella)
Nota: se desideri utilizzare l'autenticazione di base con un token di accesso invece di nome utente e password, imposta il token di accesso nel parametro INSTANA_GIT_REMOTE_USERNAME. Ciò garantisce che l'autenticazione di base sia configurata correttamente senza un nome utente.

Con il comando one-liner

Fare riferimento alla -g, -b, -u e -p opzioni nella OneLiner documentazione, che mappa le variabili di INSTANA_GIT_REMOTE_REPOSITORY INSTANA_GIT_REMOTE_PASSWORD ambiente, INSTANA_GIT_REMOTE_BRANCH, INSTANA_GIT_REMOTE_USERNAME e per il metodo ambientale.

La tabella seguente mostra la corrispondenza tra le variabili d'ambiente e i parametri del comando one-liner:

Variabile di ambiente Parametro del comando one-liner
INSTANA_GIT_REMOTE_REPOSITORY -g = (opzionale, necessario se -b è impostato)
INSTANA_GIT_REMOTE_BRANCH -b = (opzionale, necessario se -g è impostato)
INSTANA_GIT_REMOTE_USERNAME -u = (opzionale, necessario se -p è impostato)
INSTANA_GIT_REMOTE_PASSWORD -p = (facoltativo)

Con Docker immagini

I passaggi sono fondamentalmente gli stessi del metodo environment, aggiungendo le variabili di INSTANA_GIT_REMOTE_REPOSITORY INSTANA_GIT_REMOTE_PASSWORD ambiente, INSTANA_GIT_REMOTE_BRANCH, INSTANA_GIT_REMOTE_USERNAME e al Docker contenitore.

Ad esempio, il seguente esempio di codice fornisce i parametri necessari per avviare l'agente host in un contenitore e i parametri Git richiesti per abilitare la gestione della Git configurazione basata su :

# 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

Con il pannello di controllo per la gestione degli agenti

La gestione della Git configurazione basata su può essere impostata nella sezione Gestione della configurazione nella dashboard Gestione agente.

Importante: è necessario aggiungere il .git suffisso alla fine dell'indirizzo INSTANA_GIT_REMOTE_REPOSITORY, ad esempio https://github.com/<your_account>/<your_repo>.git. Inoltre, per configurare l'autenticazione di base per l'accesso al Git repository, è possibile utilizzare un .netrc file. Per ulteriori informazioni, consultare Autenticazione con file.netrc.

Impostazione manuale

Una configurazione manuale consiste nell'inizializzare un Git repository nella *instanaAgentDir*/etc/ cartella e aggiungere un remote denominato configuration.

L'agente host estrae il ramo main locale utilizzando il ramo di tracciamento configurato dal configuration remoto. Esistono diversi modi per configurare il Git repository e puoi scegliere liberamente quello più adatto alla tua configurazione.

Ad esempio, la seguente configurazione consente all'agente host di recuperare le configurazioni dal main ramo del configuration remoto:

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

L'esempio seguente consente di estrarre le configurazioni dal my-configurations ramo nel configuration remoto:

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

I formati <git-repository-url> possibili sono descritti nella documentazione ufficiale sugli Git URL.

Aggiornamenti alla configurazione

L'agente host recupera gli aggiornamenti di configurazione dal repository remoto:

  1. All'avvio o al riavvio.
  2. Attraverso un'iniziativa reboot avviata tramite il pannello di controllo della gestione degli agenti.
  3. Attraverso una modifica della configurazione tramite la Dashboard di gestione degli agenti.
  4. Attraverso l 'API Web descritta nella Host Agent sezione e le integrazioni che si basano su di essa, come l 'azione GitHub Update Agent.

La gestione della configurazione basata Git su opera sul ramo main locale e lo aggiorna con la versione del ramo di tracciamento remoto configurato. Se non è configurato alcun ramo di tracciamento, viene aggiunto un messaggio di errore al file di log dell'agente host. Sebbene non venga eseguito alcun ulteriore aggiornamento della configurazione, l'agente riprende il monitoraggio utilizzando le configurazioni correnti.

Le modifiche locali non sono previste e vengono ignorate durante gli aggiornamenti. I file non tracciati vengono gestiti dalla configurazione Git basata su, in modo che inizialmente non sia necessario aggiungere tutti i file al repository.

Attivazione degli aggiornamenti tramite Git Hooks

Git Gli hook sono programmi che è possibile inserire nella .git/hooks directory del repository e che si attivano in diversi momenti del ciclo di vita del Git repository. Git offre molti hook diversi, e post-update l'hook è il più adatto per l'integrazione con la gestione della Git configurazione basata su degli agenti host.

Il GitOps-Demo repository fornisce un hook di post-updateGit esempio che attiva l'aggiornamento degli agenti host ogni volta che viene aggiornato un ramo nel repository.

Vedi che l'output previsto dello script inviato al tuo Git client dopo aver attivato un push:

$ 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

Attivazione degli aggiornamenti tramite l'azione GitHub di aggiornamento

L 'azione GitHub Instana consente GitOps di attivare direttamente il controllo remoto degli agenti host utilizzando l'API Web di Instana.

Il GitOps-Demo repository mostra come configurare un repository su GitHub per gestire le configurazioni dell'agente host e come attivare automaticamente gli aggiornamenti utilizzando l'azione GitHub Instana per GitOps.

Esempio

Repository GitHub privato

GitHub supporta HTTPS l'autenticazione tramite token, che può essere utilizzata dall'agente host come descritto in questa sezione.

Per utilizzare un GitHub repository, devi prima creare un token di accesso personale. I dettagli su come farlo sono documentati nella pagina Creazione di un token di accesso personaleGitHub della documentazione. Il token necessita solo dei permessi di lettura per accedere al repository.

GitHub si aspetta che il token venga fornito come nome utente di HTTPS autenticazione di base con una password vuota. Pertanto, l'agente host può essere configurato per utilizzare HTTPS l'autenticazione di base per GitHub i repository impostando le seguenti variabili di ambiente:

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=''

Si noti che lo stesso principio della password vuota e del token personale come nome utente funziona anche con gli altri metodi di configurazione dell'agente host per la gestione della Git configurazione basata su. Per una panoramica dei possibili approcci di configurazione, consultare la sezione Impostazione.

Controllo degli aggiornamenti degli agenti con Git

È possibile utilizzare diversi metodi per controllare gli aggiornamenti di versione dell'agente host distribuito negli ambienti di produzione. Se si utilizzano agenti statici, è necessario aggiornare manualmente l'agente host secondo necessità. Se si utilizzano agenti dinamici, è possibile configurare gli aggiornamenti per impostare intervalli di aggiornamento, versioni bloccate e così via. Per ulteriori informazioni, vedere Configurazione degli aggiornamenti degli agenti host dinamici. Se non viene specificata alcuna configurazione, gli aggiornamenti vengono applicati automaticamente all'agente dinamico ogni giorno. Inoltre, se è necessario un controllo più rigoroso sugli aggiornamenti di versione dell'agente host, è possibile utilizzare una combinazione di fissaggio dinamico della versione dell'agente con la gestione della Git configurazione basata su. Se disponi di un ambiente di test, puoi testare le distribuzioni dell'agente in uno scenario simile a quello di produzione prima di applicare l'aggiornamento in produzione.

Controllo degli aggiornamenti Kubernetes degli agenti

È possibile utilizzare Argo CD per controllare e gestire gli aggiornamenti degli agenti Kubernetes dinamici. Utilizzando questo approccio, è possibile specificare la versione dell'agente impostando una variabile di ambiente.

È possibile impostare la variabile di ambiente utilizzando una risorsa personalizzata per le installazioni dell'operatore e il values.yaml file per le Helm installazioni del grafico.

Argo CD monitora i rami designati del repository e applica automaticamente eventuali nuove modifiche al cluster. Utilizzando questo approccio per configurare gli aggiornamenti, è possibile controllare con precisione quando vengono applicati. È possibile pianificare l'installazione degli aggiornamenti durante le ore non di punta invece di eseguirli automaticamente. Inoltre, questa configurazione offre la flessibilità di specificare la versione esatta dell'agente in uso.

Per un esempio e le istruzioni su come implementare il flusso di lavoro in cui il pinning della versione dell'agente è combinato con l'integrazione Argo CD, consultare il repository instana/argocd-demo.

Nell'esempio, il repository contiene il main ramo per il pinning della versione nei cluster di produzione e il test ramo per il pinning della versione negli ambienti di test. Di conseguenza, test il ramo ha una versione più recente dell'agente fissata. Lo scopo di questa configurazione è quello di testare eventuali nuove versioni nei cluster di prova prima di promuovere la versione dell'agente ai cluster di produzione. Per informazioni su come utilizzare Mend Renovate per automatizzare la creazione di nuove richieste pull nei confronti test dei rami main e quando è disponibile la nuova versione, consultare la sezione successiva.

Controllo degli aggiornamenti dell'agente host

Per un esempio su come implementare il flusso di lavoro in cui il pinning della versione dell'agente è combinato con la gestione della Git configurazione basata su, consultare il repository instana/gitops-demo.

Questo repository di esempio utilizza GitHub come servizio di hosting del repository, Mend Renovate per l'automazione dell'aggiornamento delle dipendenze e GitHub Actions per l'invio di richieste al backend Instana. È possibile sostituire tutti questi servizi con quelli di propria scelta. Assicurati di soddisfare i seguenti requisiti per implementare un flusso di aggiornamento Git basato su:

  • Git come formato di repository del codice sorgente

  • automazione per inviare una HTTP richiesta al backend Instana in caso di modifiche alla configurazione

    Qui puoi utilizzare qualsiasi automazione di tua scelta. Tuttavia, assicurati che la versione in instana/com.instana.agent.bootstrap.AgentBootstrap.cfg sia aggiornata e che utilizzi rami diversi per ambienti diversi.

Il repository contiene il main ramo che tiene traccia dello stato attuale delle distribuzioni di produzione dell'agente e il test ramo che rappresenta l'ambiente di test dell'agente.

Mend Renovate è configurato per monitorare il repository instana/agent-updates alla ricerca di nuovi tag e confrontare i tag con la versione nel file instana/com.instana.agent.bootstrap.AgentBootstrap.cfg di configurazione. Quando viene rilevato un nuovo tag nel instana/agent-updates repository, Mend Renovate crea un ramo basato sul test ramo e genera una richiesta GitHub pull per aggiungere le modifiche al file di configurazione sul test ramo. È possibile utilizzare una serie di opzioni fornite da Renovate, ad esempio per programmare gli aggiornamenti solo una volta alla settimana o per assegnare determinati GitHub handle alle richieste pull per l'approvazione manuale. Quando una richiesta pull viene unita al test ramo, GitHub Actions esegue un flusso di lavoro per notificare il backend Instana configurato. Quindi, il backend Instana invia un comando di riavvio dell'agente a tutti gli agenti che corrispondono ai vincoli specifici di zona e tag dell'ambiente di test.

Inoltre, un secondo flusso di lavoro copia il file instana/com.instana.agent.bootstrap.AgentBootstrap.cfg corrente dal test ramo a un nuovo ramo di funzionalità e apre una richiesta pull sul main ramo, che garantisce la promozione della versione dell'agente dall'ambiente di test alla produzione.

Dopo che le modifiche sono state convalidate in un ambiente simile a quello di produzione, è possibile unire le modifiche al main ramo. Quando si esegue il merge, GitHub Actions esegue un flusso di lavoro per inviare una richiesta di aggiornamento al backend Instana per tutti gli agenti collegati alla produzione.

Vedi il seguente esempio di configurazione:

# 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
Nota: ogni volta che il backend Instana riceve un aggiornamento della configurazione degli agenti, riavvia tutti gli agenti corrispondenti. A seconda del numero di agenti e della loro distribuzione sull'hardware, questo riavvio potrebbe causare picchi nel consumo di risorse. Se il carico deve essere ritardato nel tempo, è possibile estendere l'esempio con ulteriori rami che rappresentano batch di agenti da aggiornare. È inoltre possibile regolare l'automazione del repository in modo che attenda solo l'approvazione manuale una volta e invii automaticamente gli aggiornamenti ad altri rami dopo un ritardo predefinito, per evitare un aumento dello sforzo di gestione manuale.