Überwachen von Systemmetriken mit dem TICK-Stack unter CentOS 7

Einführung

The TICK stack ist eine Sammlung von Produkten der Entwickler der ZeitreihendatenbankInfluxDB. Es besteht aus folgenden Komponenten:

  • Telegraf sammelt Zeitreihendaten aus verschiedenen Quellen.

  • InfluxDB speichert Zeitreihendaten.

  • Chronograf visualisiert und grafisch die Zeitreihendaten.

  • K-Sapacitor warnt und erkennt Anomalien in Zeitreihendaten.

Sie können jede dieser Komponenten einzeln verwenden. Wenn Sie sie jedoch zusammen verwenden, erhalten Sie ein skalierbares, integriertes Open-Source-System für die Verarbeitung von Zeitreihendaten.

In diesem Tutorial richten Sie diese Plattform ein und verwenden sie als Open-Source-Überwachungssystem. Sie werden ein wenig CPU-Auslastung erzeugen und eine E-Mail-Benachrichtigung erhalten, wenn die Auslastung zu hoch wird.

Voraussetzungen

Bevor Sie beginnen, benötigen Sie Folgendes:

  • Ein CentOS 7-Server, der durch Befolgen vonthe CentOS 7 initial server setup guide eingerichtet wurde, einschließlich eines Sudo-Nicht-Root-Benutzers und einer Firewall.

  • Wenn Sie die Chronograf-Benutzeroberfläche wie in Schritt 7 erläutert sichern möchten, benötigen Sie einGitHub-Konto, das Teil einer GitHub-Organisation ist. Folgen Siethis tutorial, um eine GitHub-Organisation zu erstellen.

[[Schritt-1 - Hinzufügen des Tick-Stack-Repositorys]] == Schritt 1 - Hinzufügen des TICK-Stack-Repositorys

Die TICK-Stack-Komponenten sind standardmäßig nicht über den Paketmanager verfügbar. Alle TICK-Stack-Komponenten verwenden dasselbe Repository. Daher richten wir eine Repository-Konfigurationsdatei ein, um die Installation nahtlos zu gestalten.

Erstellen Sie diese neue Datei:

sudo vi /etc/yum.repos.d/influxdata.repo

Fügen Sie die folgende Konfiguration in die neue Datei ein:

/etc/yum.repos.d/influxdata.repo

[influxdb]
name = InfluxData Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key

Speichern Sie die Datei und beenden Sie den Editor. Jetzt können wir InfluxDB installieren und konfigurieren

[[Schritt-2 - Installieren der Influx-Datenbank und Konfigurieren der Authentifizierung] == Schritt 2 - Installieren der InfluxDB und Konfigurieren der Authentifizierung

InfluxDB ist eine Open-Source-Datenbank, die für das schnelle und hochverfügbare Speichern und Abrufen von Zeitreihendaten optimiert ist. InfluxDB eignet sich hervorragend für Betriebsüberwachung, Anwendungsmetriken und Echtzeitanalysen.

Führen Sie den folgenden Befehl aus, um InfluxDB zu installieren:

sudo yum install influxdb

Während des Installationsvorgangs werden Sie aufgefordert, einen GPG-Schlüssel zu importieren. Bestätigen Sie, dass Sie diesen Schlüssel importieren möchten, damit die Installation fortgesetzt werden kann.

Starten Sie nach Abschluss der Installation den InfluxDB-Dienst:

sudo systemctl start influxdb

Stellen Sie dann sicher, dass der Dienst ordnungsgemäß ausgeführt wird:

systemctl status influxdb

Sie sehen den folgenden Status, der bestätigt, dass der Dienst ausgeführt wird:

[secondary_label Output
    ● influxdb.service - InfluxDB is an open-source, distributed, time series database
       Loaded: loaded (/usr/lib/systemd/system/influxdb.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2017-02-07 13:19:31 EET; 2min 46s ago
         Docs: https://docs.influxdata.com/influxdb/
     Main PID: 14290 (influxd)

InfluxDB wird ausgeführt, Sie möchten jedoch die Benutzerauthentifizierung aktivieren, um den Zugriff auf die Datenbank einzuschränken. Lässt mindestens einen Admin-Benutzer erstellen.

Starten Sie die InfluxDB-Konsole:

influx

Führen Sie den folgenden Befehl aus, um einen neuen Administratorbenutzer zu erstellen. Wir erstellen einensammy-Benutzer mit dem Kennwortsammy_admin, aber Sie können verwenden, was Sie möchten.

CREATE USER "sammy" WITH PASSWORD 'sammy_admin' WITH ALL PRIVILEGES

Stellen Sie sicher, dass der Benutzer erstellt wurde:

show users

Sie werden die folgende Ausgabe sehen, die bestätigt, dass Ihr Benutzer erstellt wurde:

Output    user  admin
    ----  -----
    sammy true

Nachdem der Benutzer existiert, beenden Sie die InfluxDB-Konsole:

exit

Öffnen Sie nun die Datei/etc/influxdb/influxdb.conf in Ihrem Editor. Dies ist die Konfigurationsdatei für InfluxDB.

sudo vi /etc/influxdb/influxdb.conf

Suchen Sie den Abschnitt[http], kommentieren Sie die Optionauth-enabled aus und setzen Sie den Wert auftrue:

/etc/influxdb/influxdb.conf

...
    [http]
      # Determines whether HTTP endpoint is enabled.
      # enabled = true

      # The bind address used by the HTTP service.
      # bind-address = ":8086"

      # Determines whether HTTP authentication is enabled.
      auth-enabled = true
...

Speichern Sie dann die Datei, beenden Sie den Editor und starten Sie den InfluxDB-Dienst neu:

sudo systemctl restart influxdb

InfluxDB ist jetzt konfiguriert. Installieren wir also Telegraf, einen Agenten zum Erfassen von Metriken.

[[Schritt 3 - Installieren und Konfigurieren von Telegraf]] == Schritt 3 - Installieren und Konfigurieren von Telegraf

Telegraf ist ein Open-Source-Agent, der Messdaten und Daten auf dem System, auf dem er ausgeführt wird, oder von anderen Diensten sammelt. Telegraf schreibt dann die Daten in InfluxDB oder andere Ausgaben.

Führen Sie den folgenden Befehl aus, um Telegraf zu installieren:

sudo yum install telegraf

Telegraf verwendet Plugins zur Ein- und Ausgabe von Daten. Das Standard-Ausgabe-Plugin ist für InfluxDB. Da wir die Benutzerauthentifizierung für IndexedDB aktiviert haben, müssen wir die Telegraf-Konfigurationsdatei ändern, um den Benutzernamen und das Kennwort anzugeben, die wir konfiguriert haben. Öffnen Sie die Telegraf-Konfigurationsdatei in Ihrem Editor:

sudo vi /etc/telegraf/telegraf.conf

Suchen Sie den Abschnitt[outputs.influxdb] und geben Sie den Benutzernamen und das Kennwort ein:

/etc/telegraf/telegraf.conf

    [[outputs.influxdb]]
      ## The full HTTP or UDP endpoint URL for your InfluxDB instance.
      ## Multiple urls can be specified as part of the same cluster,
      ## this means that only ONE of the urls will be written to each interval.
      # urls = ["udp://localhost:8089"] # UDP endpoint example
      urls = ["http://localhost:8086"] # required
      ## The target database for metrics (telegraf will create it if not exists).
      database = "telegraf" # required

      ...

      ## Write timeout (for the InfluxDB client), formatted as a string.
      ## If not provided, will default to 5s. 0s means no timeout (not recommended).
      timeout = "5s"
      username = "sammy"
      password = "sammy_admin"
      ## Set the user agent for HTTP POSTs (can be useful for log differentiation)
      # user_agent = "telegraf"
      ## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
      # udp_payload = 512

Speichern Sie die Datei, beenden Sie den Editor und starten Sie Telegraf:

sudo systemctl start telegraf

Überprüfen Sie dann, ob der Dienst ordnungsgemäß ausgeführt wird:

systemctl status telegraf

Der folgende Status zeigt an, dass Telegraf ausgeführt wird.

Output    ● telegraf.service - The plugin-driven server agent for reporting metrics into InfluxDB
       Loaded: loaded (/usr/lib/systemd/system/telegraf.service; enabled; vendor preset: disabled)
       Active: active (running) since Tue 2017-02-07 13:32:36 EET; 3min 27s ago
         Docs: https://github.com/influxdata/telegraf
     Main PID: 14412 (telegraf)

Telegraf sammelt jetzt Daten und schreibt sie in InfluxDB. Lassen Sie uns die InfluxDB-Konsole öffnen und sehen, welche Messungen Telegraf in der Datenbank speichert. Stellen Sie eine Verbindung mit dem zuvor konfigurierten Benutzernamen und Passwort her:

influx -username 'sammy' -password 'sammy_admin'

Führen Sie nach dem Anmelden diesen Befehl aus, um die verfügbaren Datenbanken anzuzeigen:

show databases

In der Ausgabe wird die Datenbanktelegrafangezeigt:

Output    name: databases
    name
    ----
    _internal
    telegraf

[.note] #Note: Wenn die Datenbanktelegrafnicht angezeigt wird, überprüfen Sie die von Ihnen konfigurierten Telegraf-Einstellungen, um sicherzustellen, dass Sie den richtigen Benutzernamen und das richtige Kennwort angegeben haben.
#

Lassen Sie uns sehen, was Telegraf in dieser Datenbank speichert. Führen Sie den folgenden Befehl aus, um zur Telegraf-Datenbank zu wechseln:

use telegraf

Zeigen Sie die verschiedenen Messungen an, die Telegraf durch Ausführen dieses Befehls erfasst hat:

show measurements

Sie sehen die folgende Ausgabe:

Output    name: measurements
    name
    ----
    cpu
    disk
    diskio
    kernel
    mem
    processes
    swap
    system

Wie Sie sehen, hat Telegraf viele Informationen in dieser Datenbank gesammelt und gespeichert.

Es gibt mehr als 60 Input-Plugins für Telegraf. Es kann Messdaten aus vielen gängigen Diensten und Datenbanken erfassen, darunter:

  • Apache

  • Kassandra

  • Docker

  • Elasticsearch

  • Graylog

  • IPtables

  • MySQL

  • PostgreSQL

  • Redis

  • SNMP

  • und viele andere

Sie können Verwendungsanweisungen für jedes Eingabe-Plugin anzeigen, indem Sietelegraf -usage plugin-name in einem Terminalfenster ausführen.

Beenden Sie die InfluxDB-Konsole:

exit

Nachdem wir nun wissen, dass Telegraf Messungen speichert, richten wir Kapacitor für die Verarbeitung der Daten ein.

[[Schritt-4 -—- Installation des Kapacitors]] == Schritt 4 - Installation des Kapacitors

Kapacitor ist eine Datenverarbeitungsmaschine. Sie können Ihre eigene benutzerdefinierte Logik einbinden, um Warnungen mit dynamischen Schwellenwerten zu verarbeiten, Metriken für Muster abzugleichen oder statistische Anomalien zu identifizieren. Wir werden Kapacitor verwenden, um Daten aus InfluxDB zu lesen, Warnungen zu generieren und diese Warnungen an eine angegebene E-Mail-Adresse zu senden.

Führen Sie den folgenden Befehl aus, um Kapacitor zu installieren:

sudo yum install kapacitor

Öffnen Sie die Kapacitor-Konfigurationsdatei in Ihrem Editor:

sudo vi /etc/kapacitor/kapacitor.conf

Suchen Sie den Abschnitt[[influxdb]] und geben Sie den Benutzernamen und das Kennwort ein, um eine Verbindung zur InfluxDB-Datenbank herzustellen:

/etc/kapacitor/kapacitor.conf

# Multiple InfluxDB configurations can be defined.
# Exactly one must be marked as the default.
# Each one will be given a name and can be referenced in batch queries and InfluxDBOut nodes.
[[influxdb]]
  # Connect to an InfluxDB cluster
  # Kapacitor can subscribe, query and write to this cluster.
  # Using InfluxDB is not required and can be disabled.
  enabled = true
  default = true
  name = "localhost"
  urls = ["http://localhost:8086"]
  username = "sammy"
  password = "sammy_admin"
...

Speichern Sie die Datei, beenden Sie den Editor und starten Sie Kapacitor:

sudo systemctl daemon-reload
sudo systemctl start kapacitor

Lassen Sie uns nun überprüfen, ob der Kapacitor ausgeführt wird. Überprüfen Sie die Aufgabenliste von Kapacitor mit dem folgenden Befehl:

kapacitor list tasks

Wenn Kapacitor in Betrieb ist, wird eine leere Liste mit Aufgaben angezeigt:

Output    ID                            Type      Status    Executing Databases and Retention Policies

Nachdem Sie Kapacitor installiert und konfiguriert haben, installieren Sie die Benutzerschnittstellenkomponente des TICK-Stacks, damit wir einige Ergebnisse sehen und einige Warnungen konfigurieren können.

[[Schritt-5 - Installieren und Konfigurieren von Chronograf]] == Schritt 5 - Installieren und Konfigurieren von Chronograf

Chronograf ist eine Grafik- und Visualisierungsanwendung, die Tools zur Visualisierung von Überwachungsdaten sowie zur Erstellung von Warn- und Automatisierungsregeln bereitstellt. Es unterstützt Vorlagen und verfügt über eine Bibliothek intelligenter, vorkonfigurierter Dashboards für allgemeine Datensätze. Wir konfigurieren es so, dass es eine Verbindung zu den anderen von uns installierten Komponenten herstellt.

Laden Sie das neueste Paket herunter und installieren Sie es:

wget https://dl.influxdata.com/chronograf/releases/chronograf-1.2.0~beta3.x86_64.rpm
sudo yum localinstall chronograf-1.2.0~beta3.x86_64.rpm

Dann starten Sie den Chronograf-Service:

sudo systemctl start chronograf

[.Hinweis]##

Note: Wenn Sie FirewallD verwenden, konfigurieren Sie es so, dass Verbindungen zu Port`8888` zulässig sind:

sudo firewall-cmd --zone=public --permanent --add-port=8888/tcp
sudo firewall-cmd --reload

Folgen Sie dem TutorialHow To Set Up a Firewall Using FirewallD on CentOS 7, um mehr über die FirewallD-Regeln zu erfahren.

Jetzt können Sie auf die Chronograf-Oberfläche zugreifen, indem Siehttp://your_server_ip:8888 in Ihrem Webbrowser aufrufen.

Sie sehen eine Begrüßungsseite wie in der folgenden Abbildung:

The Chronograf welcome screen with fields to connect to a data source

Geben Sie den Benutzernamen und das Kennwort für die InfluxDB-Datenbank ein und klicken Sie aufConnect New Source, um fortzufahren.

Sobald die Verbindung hergestellt ist, wird eine Liste der Hosts angezeigt. Klicken Sie auf den Hostnamen Ihres Servers, um ein Dashboard mit einer Reihe von Diagrammen auf Systemebene zu Ihrem Host zu öffnen, wie in der folgenden Abbildung dargestellt:

The dashboard for your server

Verbinden wir nun Chronograf mit Kapacitor, um eine Warnung einzurichten. Bewegen Sie den Mauszeiger über das letzte Element im linken Navigationsmenü und klicken Sie aufKapacitor, um die Konfigurationsseite zu öffnen.

Configuring Kapacitor

Verwenden Sie die Standardverbindungsdetails. Wir haben keinen Benutzernamen und kein Passwort für Kapacitor konfiguriert. Klicken Sie aufConnect Kapacitor. Sobald Kapacitor erfolgreich eine Verbindung hergestellt hat, wird der AbschnittConfigure Alert Endpointsunter dem Formular angezeigt.

Kapacitor unterstützt mehrere Warnendpunkte:

  • HipChat

  • OpsGenie

  • PagerDuty

  • Sensu

  • Locker

  • SMTP

  • Talk

  • Telegramm

  • VictorOps

Die einfachste Kommunikationsmethode istSMTP, die standardmäßig ausgewählt ist. Füllen Sie das FeldFrom email mit der Adresse aus, von der Warnungen gesendet werden, und klicken Sie aufSave. Sie können die restlichen Details auf den Standardwerten belassen.

Lassen Sie uns nach erfolgter Konfiguration einige Warnungen erstellen.

[[Schritt 6 - Konfigurieren von Warnungen]] == Schritt 6 - Konfigurieren von Warnungen

Richten wir eine einfache Warnung ein, die nach einer hohen CPU-Auslastung sucht.

Bewegen Sie den Mauszeiger über das linke Navigationsmenü, suchen Sie den AbschnittALERTING und klicken Sie aufKapacitor Rules. Klicken Sie dann aufCreate New Rule.

Wählen Sie im ersten Abschnitt die Zeitreihen aus, indem Sie auftelegraf.autogen klicken. Wählen Sie dannsystem aus der angezeigten Liste. Wählen Sie dannload1. Im unteren Bereich sehen Sie sofort eine entsprechende Grafik.

Suchen Sie über dem Diagramm das FeldSend Alert where load1 is Greater Than und geben Sie1.0 als Wert ein.

Fügen Sie dann den folgenden Text in das FeldAlert Messageein, um den Text der Warnmeldung zu konfigurieren:

{{ .ID }} is {{ .Level }} value: {{ index .Fields "value" }}

Sie können mit der Maus über die Einträge im AbschnittTemplates fahren, um Beschreibungen der einzelnen Felder zu erhalten.

Wählen Sie dann die OptionSmtp aus der Dropdown-ListeSend this Alert to und geben Sie Ihre E-Mail-Adresse in das zugehörige Feld ein.

Standardmäßig erhalten Sie Nachrichten im JSON-Format wie folgt:

Beispielnachricht

{
    "Name":"system",
    "TaskName":"chronograf-v1-50c67090-d74d-42ba-a47e-45ba7268619f",
    "Group":"nil",
    "Tags":{
        "host":"centos-tick"
    },
    "ID":"TEST:nil",
    "Fields":{
        "value":1.25
    },
    "Level":"CRITICAL",
    "Time":"2017-03-08T12:09:30Z",
    "Message":"TEST:nil is CRITICAL value: 1.25"
}

Sie können für die E-Mail-Benachrichtigungen besser lesbare Nachrichten einrichten. Geben Sie dazu Ihre Nachricht in das Textfeld mit dem PlatzhalterPut email body text hereein.

Sie können diese Regel umbenennen, indem Sie oben links auf der Seite auf ihren Namen klicken und einen neuen Namen eingeben.

Klicken Sie abschließend oben rechts aufSave Rule, um die Konfiguration dieser Regel abzuschließen.

Um diese neu erstellte Warnung zu testen, erstellen Sie eine CPU-Spitze, indem Sie mit dem Befehldd Daten aus/dev/zero lesen und an/dev/null senden:

dd if=/dev/zero of=/dev/null

Lassen Sie den Befehl einige Minuten lang laufen, was ausreichen sollte, um eine Spitze zu erzeugen. Sie können den Befehl jederzeit stoppen, indem SieCTRL+C drücken.

Nach einer Weile erhalten Sie eine E-Mail-Nachricht. Darüber hinaus können Sie alle Ihre Warnungen anzeigen, indem Sie im linken Navigationsmenü der Chronograf-Benutzeroberfläche aufAlert history klicken.

[.note] #Note: Wenn Sie überprüft haben, dass Sie Benachrichtigungen erhalten können, stoppen Sie unbedingt den Befehldd, den Sie mitCTRL+C begonnen haben.
#

Wir haben Benachrichtigungen im Gange, aber jeder kann sich bei Chronograf anmelden. Beschränken wir den Zugriff.

[[Schritt-7 - Sichern von Chronograf-with-Oauth]] == Schritt 7 - Sichern von Chronograf mit OAuth

Standardmäßig kann jeder, der die Adresse des Servers kennt, auf dem die Chronograf-Anwendung ausgeführt wird, alle Daten anzeigen. Dies ist für die Testumgebung akzeptabel, jedoch nicht für die Produktion. Chronograf unterstützt die OAuth-Authentifizierung für Google, Heroku und GitHub. Wir konfigurieren die Anmeldung über einGitHub-Konto, sodass Sie eines benötigen, um fortzufahren.

Registrieren Sie zunächst eine neue Anwendung bei GitHub. Melden Sie sich bei Ihrem GitHub-Konto an und navigieren Sie zuhttps://github.com/settings/applications/new.

Dann füllen Sie das Formular mit folgenden Angaben aus:

  1. Füllen SieApplication name mitChronograf oder einem geeigneten beschreibenden Namen aus.

  2. Verwenden Sie fürHomepage URLhttp://your_server_ip:8888.

  3. Füllen SieAuthorization callback URL mithttp://your_server_ip:8888/oauth/github/callback aus.

  4. Klicken Sie aufRegister application, um die Einstellungen zu speichern.

  5. Kopieren Sie die auf dem nächsten Bildschirm angegebenen Werte fürClient ID undClient Secret.

Bearbeiten Sie als Nächstes das systemd-Skript von Chronograf, um die Authentifizierung zu aktivieren. Öffnen Sie die Datei/usr/lib/systemd/system/chronograf.service:

sudo vi /usr/lib/systemd/system/chronograf.service

Suchen Sie dann den Abschnitt[Service] und bearbeiten Sie die Zeile beginnend mitExecStart=:

/usr/lib/systemd/system/chronograf.service

[Service]
User=chronograf
Group=chronograf
ExecStart=/usr/bin/chronograf --host 0.0.0.0 --port 8888 -b /var/lib/chronograf/chronograf-v1.db -c /usr/share/chronograf/canned -t 'secret_token' -i 'your_github_client_id' -s 'your_github_client_secret' -o 'your_github_organization'
KillMode=control-group
Restart=on-failure

Diesecret_token werden von allen OAuth-Anbietern benötigt. Stellen Sie eine zufällige Zeichenfolge ein. Verwenden Sie für die anderen Werte Ihre Github-Client-ID, Ihr Github-Client-Geheimnis und Ihre Github-Organisation.

[.warning] #Warning: Wenn Sie die Github-Organisationsoption im Befehl weglassen, kann sich jeder Github-Benutzer bei Ihrer Chronograf-Instanz anmelden. Erstellen Sie eine Github-Organisation und fügen Sie der Organisation die entsprechenden Benutzer hinzu, um den Zugriff einzuschränken.
#

Speichern Sie die Datei, beenden Sie den Editor und starten Sie den Chronograf-Dienst neu:

sudo systemctl daemon-reload
sudo systemctl restart chronograf

Öffnen Siehttp://your_server_ip:8888, um auf die Chronograf-Oberfläche zuzugreifen. Diesmal wird eineLogin with Github-Schaltfläche angezeigt. Klicken Sie auf die Schaltfläche, um sich anzumelden, und Sie werden aufgefordert, der Anwendung den Zugriff auf Ihr Github-Konto zu ermöglichen. Sobald Sie den Zugriff erlauben, werden Sie angemeldet.

Fazit

In diesem Tutorial haben Sie gesehen, wie der TICK-Stack ein leistungsstarkes Werkzeug zum Speichern, Analysieren und Visualisieren von Zeitreihendaten sein kann. Es hat viele Funktionen und Anwendungsfälle. Sie können beispielsweise Kapacitor verwenden, umanomaly detection oderbuild live leaderboard of game scores auszuführen. Sie können mehr über den TICK-Stapel erfahren, indem Sie dieofficial documentation lesen.