[PYTHON] Commencez avec influxDB + Grafana

Contexte

J'ai toujours utilisé Elasticsearch comme outil de visualisation, mais si vous souhaitez enregistrer des données numériques telles que des données de métriques de serveur, essayez également influxDB.

Vue d'ensemble de influxDB + Grafana

influxDB

influxDB est classé dans un logiciel appelé base de données de séries chronologiques (base de données de séries chronologiques). Comme son nom l'indique, la base de données de séries chronologiques est une base de données qui dispose d'un mécanisme pour stocker des données qui changent avec le temps. [Il existe une page d'article dans la version anglaise de Wikipedia](https://en.wikipedia.org/ wiki / Time_series_database) dit que RRDTool est également une base de données de séries chronologiques.

Compte tenu de la comparaison avec RRDTool, les fonctionnalités d'influxDB sont les suivantes.

Grafana

Grafana est un outil de tableau de bord dérivé de Kibana, mais il n'est pas spécialisé pour influxDB et peut être lié à Graphite et CloudWatch. Cela a également un mécanisme d'authentification par défaut.

procédure

Démarrez influxDB et Grafana

Comme c'est rapide, j'ai lancé l'image officielle Docker avec Docker Compose.

** Addendum du 22/12/2016: ** Ajout de la description du volume de données aux paramètres du conteneur de Grafana. Parce qu'il était nécessaire de sauvegarder le répertoire sqlite afin de conserver le tableau de bord de Grafana, les paramètres utilisateur, etc. Il est possible d'enregistrer les paramètres du tableau de bord, etc. dans une base de données externe telle que MySQL, mais par souci de simplification, j'ai décidé d'utiliser sqlite, qui est préparé par défaut cette fois. (Référence: Grafana --Configuration)

docker-compose.yml


version: "2"

services:
  influxdb:
    image: influxdb
    ports:
      - "8083:8083"
      - "8086:8086"
    volumes:
      - /tmp/influxdb:/var/lib/influxdb

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"
    volumes:
      - /tmp/grafana:/var/lib/grafana

Parmi les deux ports ouverts dans influxDB, «8083» est l'interface utilisateur Web et «8086» est le point de terminaison de l'API REST. De plus, comme les données sont enregistrées dans / var / lib / influxdb, elles sont synchronisées avec le système d'exploitation hôte en tant que volume de données.

Grafana ouvre simplement un port pour l'interface utilisateur Web. Dans le cas de Kibana, la connexion avec Elasticsearch a été définie dans kibana.yml, mais comme Grafana établit la connexion avec la base de données sur l'interface utilisateur Web, il n'est pas nécessaire de considérer le fichier de configuration, etc. à ce stade.

connexion entre influxDB et Grafana

Accédez à http: // (Docker Host IP): 3000 à partir d'un navigateur Web, sélectionnez" Sources de données "dans l'icône en haut à gauche et sélectionnez` http: // (Docker Host IP): dans" Ajouter une source de données ". Connectez-vous au 8086 ».

Grafana Add Data Source

Les paramètres initiaux de l'ID utilisateur et du mot de passe d'authentification sont root: root pour influxDB et admin: admin pour Grafana.

Données d'entrée dans influxDB

J'ai utilisé Python cette fois, mais avant cela, je parlerai de la structure d'influxDB.

structure de influxDB

Je ne l'ai pas utilisé correctement parce que je l'ai encore essayé, mais ce serait bien d'avoir une politique de rétention. Il est possible de stocker des données illimitées pour éviter le cas de débordement de capacité et pour assurer la disponibilité.

structure de données de influxDB

Avec Elasticsearch, si vous insérez correctement json, vous pouvez déjà l'utiliser, vous pouvez donc utiliser l'opération Zubora comme lancer json obtenu à partir de l'API tel quel, mais dans le cas d'influxDB, la structure de données à inclure dans json est décidée.

Il semble y avoir une utilisation arbitraire des «champs» et des «tags», mais la grande différence est que «fields» n'est pas indexé, mais «tags» est indexé. Ainsi, par exemple, vous pouvez utiliser la clause GROUP BY lors de la requête, mais ici nous utilisons les balises. Les métadonnées utilisées pour la recherche, etc. doivent être des «balises», et les données qui changent au fil du temps doivent être supprimées en tant que «champs». Je ne demande généralement pas de changement de données, par exemple lorsque l'utilisation du processeur est de 80%, il est donc compréhensible que fields ne soit pas indexé.

Traitement des entrées de données

Je vais brièvement montrer la source.

from influxdb import InfluxDBClient

client = InfluxDBClient('127.0.0.1', 8086, 'root', 'root', 'sample')

#Juger de l'existence de la base de données et en créer une nouvelle avant la création
dbs = client.get_list_database()
sample_db = {'name' : 'sample'}
if sample_db not in dbs:
    client.create_database('sample')

#Créer des données JSON à importer
import_array = [
{
  "fields" : {
    "cpu" : 50.0,
    "mem" : 20.0,
  },
  "tags" : {
    "category" : "fuga",
    "machine" : "web02"
  },
  "measurement" : "metrics"
}
]

#Entrée de données
client.write_points(import_array)

c'est simple. «Le mot de passe est écrit directement dans InfluxDB Client», mais le codage en dur doit être arrêté pendant cette opération. En ce qui concerne les données json, comme je l'ai écrit plus tôt, j'essaye de mettre plusieurs «champs» et «balises». Vous pouvez maintenant dessiner un graphique pour chaque machine.

Visualisation avec Grafana

Puisqu'il s'agit d'une opération avec GUI, les détails sont omis, mais ils seront visualisés en organisant des parties appelées Panel sur le tableau de bord comme Kibana. En plus de Graph, Panel a également une statistique unique qui ne peut afficher que la dernière valeur en grand nombre, du texte qui vous permet d'écrire des phrases avec Markdown, etc., et a un haut degré de liberté.

De plus, lors de la spécification des données à afficher dans Graph, etc., elles sont définies avec une instruction SQL.Par conséquent, même si cela est facile à comprendre, il est nécessaire de maintenir enfoncée la manière d'utiliser l'instruction SQL dans influxDB. Cependant, puisque vous pouvez créer du SQL en cliquant sur les candidats sur l'interface graphique et en les combinant, même une compréhension légèrement vague peut être très bonne. C'est très facile.

Convivialité, par rapport à ES + Kibana

Quand j'ai imaginé la convivialité d'Elasticsearch + Kibana, j'étais confus par le fait que la clé json qui doit être définie lors de la saisie était définie, et que l'égoïsme était différent (plutôt, si c'était json, je pourrais chercher n'importe quoi. Le SE qui peut être créé est Dieu), et le sentiment d'utilisation est le même en ce sens qu'il est "facile de visualiser les données" et que c'est facile à voir. Sera-t-il en concurrence avec Elasticsearch dans un premier temps? J'ai pensé, mais maintenant je comprends que ce sont des outils avec des gammes défensives distinctes.

Par exemple, lorsque vous utilisez MySQL, Elasticsearch convient si vous souhaitez collecter des journaux de requêtes lentes pendant une longue période et les analyser, et Elasticsearch est également possible si vous souhaitez surveiller le volume de trafic, mais en tant que ségrégation, influxDB Il semble que.

Recommended Posts

Commencez avec influxDB + Grafana
Démarrez avec MicroPython
Démarrez avec Mezzanine
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Lancez-vous avec Django! ~ Tutoriel ④ ~
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Commencez avec Python! ~ ② Grammaire ~
Commencez avec Python! ~ ① Construction de l'environnement ~
Lien pour commencer avec python
Premiers pas avec MicroPython (sur macOS)
Comment démarrer avec Scrapy
Comment démarrer avec Python
Comment démarrer avec Django
Démarrez avec l'apprentissage automatique avec SageMaker
Démarrez avec Python avec Blender
Notes d'étape pour démarrer avec django
J'ai essayé de commencer avec Hy
Premiers pas avec l'outil de documentation Sphinx
Commençons avec TopCoder en Python (version 2020)
Comment les débutants en Python commencent avec Progete
[Blender x Python] Commençons avec Blender Python !!
Jeu à la main en Python (commençons avec AtCoder?)
Le moyen le plus simple de démarrer avec Django
Zubu amateur veut démarrer Python
[Cloud102] # 1 Premiers pas avec Python (première partie des premiers pas de Python)
Django 1.11 a démarré avec Python3.6
Démarrer Jupyter Notebook
1.1 Premiers pas avec Python
Premiers pas avec apache2
Premiers pas avec Python
Premiers pas avec Django 1
Introduction à l'optimisation
Recevez des tweets avec Tweepy
Obtenez date avec python
Premiers pas avec Numpy
Premiers pas avec Spark
Premiers pas avec Python
Premiers pas avec Pydantic
Premiers pas avec Jython
Premiers pas avec Django 2
J'ai essayé de démarrer avec le script python de blender_Part 01
J'ai essayé de démarrer avec le script python de blender_Partie 02
Obtenez le code du pays avec python
Traduire Premiers pas avec TensorFlow
Obtenez la table dynamiquement avec sqlalchemy
Introduction aux fonctions Python
Introduction à Tkinter 2: Button
Premiers pas avec Go Assembly
Obtenez la chronologie Twitter avec Python
Connaissances minimales pour démarrer avec le module de journalisation Python
Obtenez des données Youtube avec python
Premiers pas avec Python Django (1)
Obtenir des informations avec l'API Zabbix