„Pop-Flaschen.“ -- Vogelmann
Graphitcluster sind ziemlich cool. Hier sind einige einfache Tools, die Ihnen bei der Verwaltung Ihrer Graphitcluster helfen.
Alle Tools unterstützen zwei gemeinsame Argumente; der Pfad zu einer Konfigurationsdatei und der Name des Clusters. Wenn Sie diese Tools zusammen mit einer Konfigurationsdatei verwenden, die Ihre Graphit-Cluster beschreibt, können Sie Skripte zur Verwaltung Ihrer Metriken erstellen. Einige der Tools könnten leicht durch Einzeiler in der Shell ersetzt werden, sind aber aus Gründen der Bequemlichkeit und Lesbarkeit hier vorhanden. Das Ziel besteht darin, schnelle, vorhersehbare Dienstprogramme bereitzustellen, die sich leicht zu komplexeren Werkzeugen zusammenfügen lassen.
Carbonate ist im offiziellen Python-Repository eines Drittanbieters (auch bekannt als PyPi) verfügbar und kann daher über reguläre Python-Paketmanager installiert werden. Beachten Sie, dass Sie möglicherweise einen Python-Paketmanager installieren müssen (z. B. apt-get install python-setuptools auf einem Ubuntu-Host).
pip install carbonate
Carbonate erwartet eine Konfigurationsdatei, die die Cluster in Ihrer Umgebung definiert. Die Standardkonfigurationsdatei befindet sich unter /opt/graphite/conf/carbonate.conf
oder kann in der Befehlszeile bereitgestellt werden. Der Standardcluster trägt den Namen „main“. Beide Standardeinstellungen können überschrieben werden, indem in der Umgebung CARBONATE_CONFIG
bzw. CARBONATE_CLUSTER
festgelegt wird.
[main]
DESTINATIONS = 192.168.9.13:2004:carbon01, 192.168.9.15:2004:carbon02, 192.168.6.20:2004:carbon03
REPLICATION_FACTOR = 2
SSH_USER = carbon
[agg]
DESTINATIONS = 192.168.9.13:2004:carbon01, 192.168.9.15:2004:carbon02, 192.168.6.20:2004:carbon03
RELAY_METHOD = aggregated-consistent-hashing
REPLICATION_FACTOR = 2
SSH_USER = carbon
[fnv]
DESTINATIONS = 192.168.9.13:2004:ba603c36342304ed77953f84ac4d357b, 192.168.9.15:2004:5dd63865534f84899c6e5594dba6749a, 192.168.6.20:2004:866a18b81f2dc4649517a1df13e26f28
REPLICATION_FACTOR = 2
SSH_USER = carbonate
HASHING_TYPE = fnv1a_ch
Sie sollten darauf achten, dass die Liste der Ziel-IPs oder Hostnamen den Knoten in Ihrem Cluster entspricht (dh sie sollte mit der Routing-Konfiguration Ihres Carbon Relays übereinstimmen). Die Reihenfolge ist wichtig, da der konsistente Hash-Ring erstellt wird.
Sie können die Relay-Methode als „Consistent-Hashing“ oder „Aggregated-Consistent-Hashing“ konfigurieren. Wenn es weggelassen wird, wird standardmäßig „consistent-hashing“ verwendet. Die Verwendung von „aggregated-consistent-hashing“ erfordert normalerweise die Bereitstellung einer Regeldatei für relevante Befehle.
Der Replikationsfaktor sollte mit dem Replikationsfaktor für den Cluster übereinstimmen.
Außerdem können Sie einen SSH-Benutzer angeben, der verwendet wird, wenn Carbonate eine Verbindung zu einem anderen Knoten im Cluster benötigt, um einen Vorgang auszuführen. Wenn dies nicht angegeben ist, wird der aktuelle Benutzer ausgewählt, der den Befehl ausführt.
Schließlich können Sie HASHING_TYPE Ihres Clusters angeben. Der Standardwert ist carbon_ch
, auch fnv1a_ch
wird unterstützt. Bitte beachten Sie, dass für die Verwendung fnv1a_ch
Hashings carbon
1.0.2 oder neuer installiert sein muss (oder Sie müssen stattdessen das Carbon-C-Relay-Relay verwenden).
usage: carbon-hosts [-h] [-c CONFIG_FILE] [-C CLUSTER]
Return the addresses for all nodes in a cluster
optional arguments:
-h, --help show this help message and exit
-c CONFIG_FILE, --config-file CONFIG_FILE
Config file to use (default:
/opt/graphite/conf/carbonate.conf)
-C CLUSTER, --cluster CLUSTER
Cluster name (default: main)
usage: carbon-lookup [-h] [-c CONFIG_FILE] [-C CLUSTER] [-s] METRIC
Lookup where a metric lives in a carbon cluster
positional arguments:
METRIC Full metric name to search for
optional arguments:
-h, --help show this help message and exit
-c CONFIG_FILE, --config-file CONFIG_FILE
Config file to use (default:
/opt/graphite/conf/carbonate.conf)
-C CLUSTER, --cluster CLUSTER
Cluster name (default: main)
-a AGGREGATION_RULES, --aggregation-rules AGGREGATION_RULES
File containing rules used in conjunction with the
"aggregated-consistent-hashing" relay method (default:
/opt/graphite/conf/aggregation-rules.conf)
-s, --short Only display the address, without port and cluster
name (default: False)
usage: carbon-list [-h] [-c CONFIG_FILE] [-C CLUSTER] [-d STORAGE_DIR]
List the metrics this carbon node contains
optional arguments:
-h, --help show this help message and exit
-c CONFIG_FILE, --config-file CONFIG_FILE
Config file to use (default:
/opt/graphite/conf/carbonate.conf)
-C CLUSTER, --cluster CLUSTER
Cluster name (default: main)
-d STORAGE_DIR, --storage-dir STORAGE_DIR
Storage dir (default: /opt/graphite/storage/whisper)
usage: carbon-sieve [-h] [-c CONFIG_FILE] [-C CLUSTER] [-f METRICS_FILE]
[-n NODE] [-I]
Given a list of metrics, output those that belong to a node
optional arguments:
-h, --help show this help message and exit
-c CONFIG_FILE, --config-file CONFIG_FILE
Config file to use (default:
/opt/graphite/conf/carbonate.conf)
-C CLUSTER, --cluster CLUSTER
Cluster name (default: main)
-a AGGREGATION_RULES, --aggregation-rules AGGREGATION_RULES
File containing rules used in conjunction with the
"aggregated-consistent-hashing" relay method (default:
/opt/graphite/conf/aggregation-rules.conf)
-f METRICS_FILE, --metrics-file METRICS_FILE
File containing metric names to filter, or '-' to read
from STDIN (default: -)
-n NODE, --node NODE Filter for metrics belonging to this node (default:
self)
-I, --invert Invert the sieve, match metrics that do NOT belong to
a node (default: False)
usage: carbon-sync [-h] [-c CONFIG_FILE] [-C CLUSTER] [-f METRICS_FILE] -s
SOURCE_NODE [-d STORAGE_DIR] [-b BATCH_SIZE]
[--source-storage-dir SOURCE_STORAGE_DIR]
[--rsync-options RSYNC_OPTIONS] [--rsync-disable-copy-dest]
[--tmpdir TMP_STAGING_DIR] [--rsync-max-retries MAX_RETRIES]
[--rsync-retries-interval SECONDS] [--dirty] [-l] [-o]
Sync local metrics using remote nodes in the cluster
optional arguments:
-h, --help show this help message and exit
-c CONFIG_FILE, --config-file CONFIG_FILE
Config file to use (env: CARBONATE_CONFIG) (default:
/opt/graphite/conf/carbonate.conf)
-C CLUSTER, --cluster CLUSTER
Cluster name (env: CARBONATE_CLUSTER) (default: main)
-f METRICS_FILE, --metrics-file METRICS_FILE
File containing metric names to filter, or '-' to read
from STDIN (default: -)
-s SOURCE_NODE, --source-node SOURCE_NODE
Override the source for metrics data (default: None)
-d STORAGE_DIR, --storage-dir STORAGE_DIR
Storage dir (default: /opt/graphite/storage/whisper)
-b BATCH_SIZE, --batch-size BATCH_SIZE
Batch size for the rsync job (default: 1000)
--source-storage-dir SOURCE_STORAGE_DIR
Source storage dir (default:
/opt/graphite/storage/whisper)
--rsync-options RSYNC_OPTIONS
Pass option(s) to rsync. Make sure to use "--rsync-
options=" if option starts with '-' (default: -azpS)
--rsync-disable-copy-dest
Avoid --copy-dest, transfer all whisper data between
nodes. (default: False)
--rsync-max-retries RETRIES
Number of times rsync will attempt to copy each batch
of metrics before moving on. If all retry attempts are
unsuccessful, carbon-sync will write a file containing
the name of each metric in the failed batch so they can
be easily retried at a later time. (Default: 3)
--rsync-retries-interval SECONDS
How long to wait in between each rsync retry attempt
(see --rsync-max-retries). (default: 5)
-t TMP_STAGING_DIR, --tmpdir TMP_STAGING_DIR
Specify an alternate location in which the temporary
rsync staging dirs will be created. This can be useful
for large syncs where the default location (as chosen
by mkdtemp) resides on a filesystem that's too small
to store all the metrics being copied from the remote
host.
--dirty If set, don't clean temporary rsync directory
(default: False)
-l, --lock Lock whisper files during filling (default: False)
-o, --overwrite Write all non nullpoints from src to dst (default:
False)
usage: carbon-path [-h] [-c CONFIG_FILE] [-C CLUSTER] [-f METRICS_FILE] [-r]
[-p] [-d STORAGE_DIR]
Transform metric paths to (or from) filesystem paths
optional arguments:
-h, --help show this help message and exit
-c CONFIG_FILE, --config-file CONFIG_FILE
Config file to use (default:
/opt/graphite/conf/carbonate.conf)
-C CLUSTER, --cluster CLUSTER
Cluster name (default: main)
-f METRICS_FILE, --metrics-file METRICS_FILE
File containing metric names to transform to file
paths, or '-' to read from STDIN (default: -)
-r, --reverse Transform from file paths to metric paths (default:
False)
-p, --prepend Prepend storage dir to file paths (default: False)
-d STORAGE_DIR, --storage-dir STORAGE_DIR
Whisper storage directory to prepend when -p given
(default: /opt/graphite/storage/whisper)
usage: carbon-stale [-h] [-c CONFIG_FILE] [-C CLUSTER] [-f METRICS_FILE] [-r]
[-d STORAGE_DIR] [-l HOURS] [-o HOURS] [-w] [-p]
Find and list potentially stale metrics.
optional arguments:
-h, --help show this help message and exit
-c CONFIG_FILE, --config-file CONFIG_FILE
Config file to use (default:
/opt/graphite/conf/carbonate.conf)
-C CLUSTER, --cluster CLUSTER
Cluster name (default: main)
-f METRICS_FILE, --metrics-file METRICS_FILE
File containing metric names to transform to file
paths, or '-' to read from STDIN (default: -)
-r, --reverse Output metrics which are not stale instead (default:
False)
-d STORAGE_DIR, --storage-dir STORAGE_DIR
Whisper storage directory to prepend when -p given
(default: /opt/graphite/storage/whisper)
-l HOURS, --limit HOURS
Definition of staleness, in hours (default: 24)
-o HOURS, --offset HOURS
Use a whisper data window ending HOURS ago (implies
-w) (default: 0)
-w, --whisper Use whisper data instead of filesystem stat() call
(default: False)
-p, --paths Print filesystem paths instead of metric names
(default: False)
usage: whisper-aggregate [-h] [-f METRICS_FILE] [-d STORAGE_DIR]
Set aggregation for whisper-backed metrics this carbon instance contains
optional arguments:
-h, --help show this help message and exit
-f METRICS_FILE, --metrics-file METRICS_FILE
File containing metric names and aggregation modes, or
'-' to read from STDIN (default: -)
-d STORAGE_DIR, --storage-dir STORAGE_DIR
Whisper storage directory (default:
/opt/graphite/storage/whisper)
usage: whisper-fill [-h] [-l] [-o] SRC DST
Backfill datapoints from one whisper file into another
positional arguments:
SRC Whisper source file
DST Whisper destination file
optional arguments:
-h, --help show this help message and exit
-l, --lock Lock whisper files during filling (default: False)
-o, --overwrite Write all non nullpoints from src to dst (default: False)
#!/bin/sh
#
# Resync a node from other nodes in the cluster
#
LOCAL_IP="$1"
for h in $(carbon-hosts) ; do
(
ssh $h -- carbon-list |
carbon-sieve -n $LOCAL_IP |
carbon-sync -s $h
) &
done
#!/bin/sh
#
# Rebalance a cluster from one size to another. Remember to cleanup metrics
# that no longer belong when all nodes are rebalanced!
#
LOCAL_IP="$1"
OLD_CLUSTER="old"
NEW_CLUSTER="main"
for h in $(carbon-hosts -C "$OLD_CLUSTER") ; do
ssh $h -- carbon-list |
carbon-sieve -C "$NEW_CLUSTER" -n $LOCAL_IP |
carbon-sync -s $h
done
#!/bin/sh
#
# List metrics from disk that don't belong
#
LOCAL_IP="$1"
carbon-list | carbon-sieve -I -n $LOCAL_IP
Metriken mit Flüsterdaten, die in den letzten 2 Stunden völlig leer waren (vielleicht nützlich, wenn Sie Probleme mit FS-Zeitstempeln oder Carbon-Clients vermuten, die in „die Zukunft“ schreiben):
carbon-list | carbon-stale --whisper --limit=2
Metriken, deren Metrikdateien 48 Stunden oder länger unverändert erscheinen (funktionell identisch mit find /your/data/dir -type f -mtime +2
):
carbon-list | carbon-stale --limit=48
Interessanter ist es, wenn Sie carbon-stale
verwenden und dann „sieben“ verwenden, um veraltete Metriken zu identifizieren, die nicht hierher gehören (im Gegensatz zu nicht veralteten Metriken, die zwar hierher gehören, aber in „Carbon-Sieb“ aufgrund von Dingen wie doppelten Perioden in Metrikpfaden falsch gemeldet werden). wegen kaputter Kollektoren. Es ist eine Sache.)
carbon-list | carbon-stale --limit=48 | carbon-sieve -I -n $LOCAL_IP
Um Dateipfade zur Verwendung mit z. B. xargs rm
oder whatnot auszudrucken, verwenden Sie -p
:
carbon-list | carbon-stale -p | xargs -n 100 rm
Der Code ist unter der MIT-Lizenz verfügbar.