Metriche definite dall'utente dell'agente

Questa guida spiega come configurare l'agente Monitoring per riconoscere ed esportare le metriche dell'applicazione in Cloud Monitoring.

L'agente Monitoring è un daemon collectd. Oltre a esportare molte metriche di sistema e di terze parti predefinite in Cloud Monitoring, l'agente può esportare le tue metriche dell'applicazione collectd in Monitoring come metriche definite dall'utente. I plug-in collectd possono anche essere esportati in Monitoring.

Un modo alternativo per esportare le metriche dell'applicazione in Monitoring consiste nell'utilizzare StatsD. Cloud Monitoring fornisce una configurazione predefinita che Metriche statistiche rispetto a metriche definite dall'utente. Se questa mappatura ti soddisfa, non sono necessari i passaggi di personalizzazione descritti di seguito. Per ulteriori informazioni, consulta il plug-in StatsD.

Per ulteriori informazioni sulle metriche, consulta i seguenti documenti:

Questa funzionalità è disponibile solo per gli agenti in esecuzione su Linux. È non disponibile su Windows.

Prima di iniziare

  • Installa l'agente Monitoring più recente su un'istanza VM e verifica che funzioni. Per aggiornare l'agente, consulta Aggiornamento dell'agente.

  • Configura collectd per ottenere i dati di monitoraggio dalla tua applicazione. Collectd supporta molti framework di applicazioni e endpoint di monitoraggio standard tramite i suoi plug-in di lettura. Trova un plug-in di lettura adatto a te.

  • (Facoltativo) Per comodità, aggiungi la documentazione di riferimento di collectd dell'agente alle pagine man del sistema aggiornando la variabile MANPATH e poi eseguendo mandb:

    export MANPATH="$MANPATH:/opt/stackdriver/collectd/share/man"
    sudo mandb
    

    Le pagine man si riferiscono a stackdriver-collectd.

File e directory importanti

I seguenti file e directory, creati installando l'agente, sono pertinente all'utilizzo dell'agente Monitoring (raccolto):

/etc/stackdriver/collectd.conf

Il file di configurazione raccolto utilizzato dall'agente. Modifica questo file in modificare la configurazione generale.

/etc/stackdriver/collectd.d/

La directory per i file di configurazione aggiunti dagli utenti. Per inviare messaggi definiti dall'utente dell'agente, inserisci i file di configurazione richiesti, in basso, in questa directory. Per la compatibilità con le versioni precedenti, l'agente cerca anche i file in /opt/stackdriver/collectd/etc/collectd.d/.

/opt/stackdriver/collectd/share/man/*

La documentazione della versione di collectd dell'agente. Puoi aggiungere queste pagine all'insieme di man pagine del tuo sistema; vedi Prima di iniziare. per maggiori dettagli.

/etc/init.d/stackdriver-agent

Lo script di inizializzazione per l'agente.

Come Monitoring gestisce le metriche di collectd

Come sfondo, l'agente Monitoring elabora le metriche raccolte e le invia a Monitoring, che tratta ogni metrica come elemento di una delle seguenti categorie:

  • Metriche definite dall'utente. Le metriche Collectd che hanno la chiave dei metadatistackdriver_metric_type e una singola origine dati vengono gestite come metriche definite dall'utente e inviate a monitoring utilizzando il metodo projects.timeSeries.create nell'API Monitoring.

  • Metriche selezionate. Tutte le altre metriche di collectd vengono inviate al monitoraggio utilizzando un'API interna. Solo le metriche nell'elenco delle metriche selezionate sono accettati ed elaborati.

  • Metriche eliminate. Metriche raccolte che non sono incluse nelle metriche selezionate dell'elenco e non sono metriche definite dall'utente vengono ignorate automaticamente Monitoraggio. L'agente stesso non è a conoscenza delle metriche accettate o eliminate.

Scrivi metriche definite dall'utente con l'agente

Puoi configurare l'agente per l'invio dei punti dati delle metriche a Monitoraggio. Ogni punto deve essere associato a una metrica definita dall'utente, che viene definita con un descrittore della metrica. Questi concetti vengono introdotti in Metriche, serie temporali e risorse. e descritta in dettaglio in Struttura delle serie temporali. Panoramica delle metriche definite dall'utente.

Puoi fare in modo che una metrica collectd venga trattata come una metrica definita dall'utente aggiungendo i metadati appropriati alla metrica:

  • stackdriver_metric_type : (obbligatorio) il nome della metrica esportata. Esempio: custom.googleapis.com/my_custom_metric.

  • label:[LABEL]: etichette aggiuntive (facoltative) per i file esportati o una metrica di valutazione. Ad esempio, se vuoi un'etichetta STRING di monitoraggio color, la chiave dei metadati sarà label:color e il valore della chiave potrebbe essere "blue". Puoi avere fino a 10 etichette per tipo di metrica.

Puoi utilizzare una catena di filtri raccolti per modificare i metadati per le tue metriche. Poiché le catene di filtri non possono modificare l'elenco delle origini dati Le metriche definite dall'utente supportano solo una singola origine dati, qualsiasi metrica raccolta da utilizzare con questa struttura deve avere una singola origine dati.

Esempio

In questo esempio monitoreremo le connessioni Nginx attive da due servizi, my_service_a e my_service_b. Le invieremo al monitoraggio utilizzando una metrica definita dall'utente. Adotteremo le seguenti misure:

  1. Identifica le metriche raccolte per ogni servizio Nginx.

  2. Definisci un descrittore della metrica Monitoring.

  3. Configurare una catena di filtri raccolti per aggiungere metadati alla raccolte per soddisfare le aspettative del team dell'agente.

Metriche collectd in entrata

Il recupero prevede che le metriche siano costituite dai seguenti componenti. I primi cinque componenti costituiscono l'identificatore di collectd per la metrica:

    Host, Plugin, Plugin-instance, Type, Type-instance, [value]

In questo esempio, le metriche da inviare come metriche definite dall'utente hanno i seguenti valori:

Componente Valori previsti
Organizzatore any
Plug-in curl_json
Istanza plug-in nginx_my_service_a o
nginx_my_service_b1
Tipo gauge
Istanza di tipo active-connections
[value] qualsiasi valore2

Note:
1 Nell'esempio, questo valore codifica sia l'applicazione (Nginx) sia il nome del servizio collegato.
2 Il valore è generalmente un timestamp e un numero a precisione doppia. Il monitoraggio gestisce i dettagli dell'interpretazione dei vari tipi di valori. I valori composti non sono supportati dall'agente di monitoraggio.

Descrittore della metrica di monitoraggio e serie temporali

Sul lato Monitoring, progetta un descrittore della metrica per metrica definita dall'utente. Il descrittore seguente è una scelta ragionevole per il in questo esempio:

  • Nome: custom.googleapis.com/nginx/active_connections
  • Etichette:
    • service_name (STRINGA): il nome del servizio collegato a Nginx.
  • Tipo: GAUGE
  • Tipo: DOUBLE

Dopo aver progettato il descrittore della metrica, puoi crearlo utilizzando projects.metricDescriptors.create oppure puoi lasciare che venga creato per te dai metadati delle serie temporali, descritti di seguito. Per ulteriori informazioni, consulta Creare descrittori delle metriche in questa pagina.

I dati delle serie temporali per questo descrittore delle metriche devono contenere le seguenti informazioni, a causa del modo in cui è definito il descrittore delle metriche:

  • Tipo di metrica: custom.googleapis.com/nginx/active_connections
  • Valori delle etichette delle metriche:
    • service_name: "my_service_a" o "my_service_b"

Altre informazioni sulle serie temporali, tra cui la risorsa monitorata associata, ovvero l'istanza VM che invia i dati, e il punto dati della metrica, vengono ottenute automaticamente dall'agente per tutte le metriche. Non devi fare nulla di speciale.

La catena di filtri

Crea un file /opt/stackdriver/collectd/etc/collectd.d/nginx_curl_json.conf contenente il seguente codice:

LoadPlugin match_regex
LoadPlugin target_set
LoadPlugin target_replace

# Insert a new rule in the default "PreCache" chain, to divert your metrics.
PreCacheChain "PreCache"
<Chain "PreCache">
  <Rule "jump_to_custom_metrics_from_curl_json">
    # If the plugin name and instance match, this is PROBABLY a metric we're looking for:
    <Match regex>
      Plugin "^curl_json$"
      PluginInstance "^nginx_"
    </Match>
    <Target "jump">
      # Go execute the following chain; then come back.
      Chain "PreCache_curl_json"
    </Target>
  </Rule>
  # Continue processing metrics in the default "PreCache" chain.
</Chain>

# Following is a NEW filter chain, just for your metric.
# It is only executed if the default chain "jumps" here.
<Chain "PreCache_curl_json">

  # The following rule does all the work for your metric:
  <Rule "rewrite_curl_json_my_special_metric">
    # Do a careful match for just your metrics; if it fails, drop down
    # to the next rule:
    <Match regex>
      Plugin "^curl_json$"                   # Match on plugin.
      PluginInstance "^nginx_my_service_.*$" # Match on plugin instance.
      Type "^gauge$"                         # Match on type.
      TypeInstance "^active-connections$"    # Match on type instance.
    </Match>

    <Target "set">
      # Specify the metric descriptor type:
      MetaData "stackdriver_metric_type" "custom.googleapis.com/nginx/active_connections"
      # Specify a value for the "service_name" label; clean it up in the next Target:
      MetaData "label:service_name" "%{plugin_instance}"
    </Target>

    <Target "replace">
      # Remove the "nginx_" prefix in the service_name to get the real service name:
      MetaData "label:service_name" "nginx_" ""
    </Target>
  </Rule>

  # The following rule is run after rewriting your metric, or
  # if the metric wasn't one of your user-defined metrics. The rule returns
  # to the default "PreCache" chain. The default processing
  # will write all metrics to Cloud Monitoring,
  # which will drop any unrecognized metrics: ones that aren't
  # in the list of curated metrics and don't have
  # the user-defined metric metadata.
  <Rule "go_back">
    Target "return"
  </Rule>
</Chain>

Carica la nuova configurazione

Riavvia l'agente per riprendere la nuova configurazione eseguendo questo comando sull'istanza VM:

sudo service stackdriver-agent restart

Le informazioni sulle metriche definite dall'utente iniziano a confluire in Monitoraggio.

Riferimenti e best practice

Descrittori delle metriche e serie temporali

Per un'introduzione alle metriche di Cloud Monitoring, consulta Metriche, serie temporali e risorse. Ulteriori dettagli sono disponibili in Panoramica delle metriche definite dall'utente e Struttura delle serie temporali.

Descrittori delle metriche. Un descrittore della metrica ha i seguenti elementi significativi pezzi:

  • Un tipo di modulo custom.googleapis.com/[NAME1]/.../[NAME0]. Ad esempio:

    custom.googleapis.com/my_measurement
    custom.googleapis.com/instance/network/received_packets_count
    custom.googleapis.com/instance/network/sent_packets_count
    

    La nomenclatura consigliata è gerarchica per consentire alle persone di monitorare più facilmente le metriche. I tipi di metriche non possono contenere trattini. Per le regole di denominazione precise, consulta Nominare tipi di metriche ed etichette.

  • Fino a 10 etichette per annotare i dati delle metriche, ad esempio device_name, fault_type o response_code. I valori dell'attributo le etichette non sono specificate nel descrittore della metrica.

  • Il tipo e il tipo di valore dei punti dati, ad esempio "un valore del misuratore di tipo double". Per ulteriori informazioni, vedi MetricKind e ValueType.

Serie temporali. Un punto dati di una metrica è costituito dai seguenti elementi significativi:

  • Il tipo del descrittore della metrica associato.

  • Valori per tutte le etichette del descrittore della metrica.

  • Un valore con timestamp coerente con il tipo di valore del descrittore della metrica e gentile.

  • La risorsa monitorata da cui provengono i dati, in genere un'istanza VM. Lo spazio per la risorsa è integrato, pertanto il descrittore non richiede un'etichetta separata.

Creazione dei descrittori delle metriche

Non è necessario creare un descrittore della metrica in anticipo. Quando un punto dati arriva in Monitoraggio, il tipo di metrica, le etichette e il valore del punto possono essere utilizzati per creare automaticamente un indicatore o un descrittore della metrica cumulativa. Per ulteriori informazioni, consulta Creazione automatica dei descrittori delle metriche.

Tuttavia, la creazione di un descrittore della metrica offre dei vantaggi:

  • Puoi includere un'accurata documentazione relativa alla metrica e alle sue etichette.

  • Puoi specificare altri tipi e generi di metriche. L'unico tipo) supportate dall'agente sono (GAUGE, DOUBLE) e (CUMULATIVO, INT64). Per ulteriori informazioni, consulta Tipi di metriche e tipi di valori.

  • Puoi specificare tipi di etichetta diversi da STRING.

Se scrivi un punto dati in Monitoraggio che utilizza un tipo di metrica non definito, viene creato un nuovo descrittore della metrica per il punto dati. Questo comportamento può rappresentare un problema quando esegui il debug del codice che scrive dati delle metriche. Se il tipo di metrica non viene corretto, viene generata una metrica spuria descrittori.

Una volta creato un descrittore delle metriche o dopo che è stato creato per te, non può essere modificato. Ad esempio, non puoi aggiungere o rimuovere etichette. Puoi eliminare solo il descrittore della metrica, che elimina tutti i relativi dati, e poi ricrea il descrittore come preferisci.

Per maggiori dettagli sulla creazione dei descrittori delle metriche, consulta Creare la metrica.

Prezzi

In generale, le metriche di sistema di Cloud Monitoring sono gratuite, mentre da sistemi, agenti o applicazioni esterni. Le metriche fatturabili vengono fatturate in base al numero di byte o al numero di campioni importati.

Per ulteriori informazioni sui prezzi di Cloud Monitoring, consulta i seguenti documenti:

Limiti

Cloud Monitoring ha dei limiti sul numero di tempo delle metriche e il numero di descrittori delle metriche definiti dall'utente in ogni progetto. Per maggiori dettagli, consulta Quote e limiti.

Se scopri di aver creato descrittori delle metriche che non desideri più, possono trovare ed eliminare i descrittori usando l'API Monitoring. Per ulteriori informazioni, consulta projects.metricDescriptors.

Risoluzione dei problemi

Questa sezione spiega come configurare l'agente Monitoring Plug-in write_log per eseguire il dump dell'intero set di punti delle metriche, tra cui metadati. Questo può essere utilizzato per determinare quali punti devono essere trasformati, nonché per assicurarti che le trasformazioni funzionino come previsto.

Attivazione di write_log

Il plug-in write_log è incluso nel pacchetto stackdriver-agent. Per attivare il plug-in:

  1. Come utente root, modifica il seguente file di configurazione:

    /etc/stackdriver/collectd.conf
    
  2. Subito dopo LoadPlugin write_gcm, aggiungi:

    LoadPlugin write_log
    
  3. Subito dopo <Plugin "write_gcm">…</Plugin>, aggiungi:

    <Plugin "write_log">
      Format JSON
    </Plugin>
    
  4. Cerca <Target "write">…</Target> e dopo ogni Plugin "write_gcm", aggiungi:

    Plugin "write_log"
    
  5. Salva le modifiche e riavvia l'agente:

    sudo service stackdriver-agent restart
    

Queste modifiche stamperanno una riga di log per ogni valore della metrica registrato, inclusi l'identificatore completo di collectd, le voci dei metadati e il valore.

Output di write_log

Se hai eseguito correttamente il passaggio precedente, dovresti vedere l'output di write_log nei log di sistema:

  • Linux basato su Debian: /var/log/syslog
  • Linux basato su Red Hat: /var/log/messages

Le righe di esempio riportate di seguito sono state formattate per facilitarne la lettura documento.

Dec  8 15:13:45 test-write-log collectd[1061]: write_log values:#012[{
    "values":[1933524992], "dstypes":["gauge"], "dsnames":["value"],
    "time":1481210025.252, "interval":60.000,
    "host":"test-write-log.c.test-write-log.internal",
    "plugin":"df", "plugin_instance":"udev", "type":"df_complex", "type_instance":"free"}]

Dec  8 15:13:45 test-write-log collectd[1061]: write_log values:#012[{
    "values":[0], "dstypes":["gauge"], "dsnames":["value"],
    "time":1481210025.252, "interval":60.000,
    "host":"test-write-log.c.test-write-log.internal",
    "plugin":"df", "plugin_instance":"udev", "type":"df_complex", "type_instance":"reserved"}]