Ceci est un mémo que j'ai essayé en utilisant Diamond, un outil de collecte de métriques. Nous avons utilisé la norme Graphite + Grafana comme plate-forme de stockage et de visualisation pour les données chronologiques.
Tout d'abord, je présenterai brièvement Graphite et Grafana. Graphite fournit les services suivants.
Le graphite peut être visualisé par lui-même, mais il est difficile de dire qu'il est sophistiqué, donc Graphite ne fournit que des API, et il semble que d'autres outils soient souvent utilisés pour la partie de visualisation telle que la génération de tableau de bord. En tant qu'outil de visualisation, j'ai utilisé Grafana cette fois.
En utilisant Grafana, vous pouvez facilement créer un tableau de bord élégant comme celui-ci, par exemple.
Pour Graphite et Grafana, les sites suivants seront utiles. Visualisez les résultats de l'exécution de Chef avec Chef Handlers + Graphite Graphite Documentation Notez que j'ai essayé d'utiliser Graphite et Grafana pendant environ une heure Créer un tableau de bord qui affiche les données Graphite à l'aide de Grafana Officiel Grafana
C'est la partie principale de ce temps.
Diamond Le diamant peut être grossièrement divisé en deux composants
Le collecteur est responsable de la collecte des données. La simple collecte n'est pas la même chose que la fourniture des données collectées en dehors de Diamond. Le gestionnaire gère les données collectées. Par exemple, vous pouvez écrire les données obtenues par collector dans un fichier local, les envoyer à Graphite (peut-être devriez-vous l'appeler carbon?), Les enregistrer dans une table MySQL, ignorer une alerte s'il y a quelque chose qui ne va pas, et ainsi de suite.
De plus, Diamond fournit un démon qui exécute le collecteur régulièrement, vous n'avez donc pas à écrire votre propre planificateur.
Cela dit, que ce soit une force ou non, c'est subtil, mais Diamond a un assez grand nombre de collectionneurs fournis par la communauté. Diamond/Collectors Diverses informations système, des lieux célèbres tels qu'apache, nginx, MySQL, PostgreSQL, Redis, MongoDB, DRBD et des métriques relativement maniaques telles que Openstack Swift sont collectés.
En gros, je vais le faire en regardant ici. Même s'il s'agit d'un projet principal python, je le construis en utilisant make. Diamond/Usage
Pour référence, les informations système de la machine installée.
-(risuo@ebi)-(0)-
-[9362]% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.10
DISTRIB_CODENAME=quantal
DISTRIB_DESCRIPTION="Ubuntu 12.10"
-(risuo@ebi)-(0)-
-[9369]% uname -a
Linux ebi 3.5.0-23-generic #35-Ubuntu SMP Thu Jan 24 13:05:29 UTC 2013 i686 athlon i686 GNU/Linux
Tout d'abord, éditez diamond.conf. Par défaut, cela ressemble à ceci Diamond / conf / diamond.conf.example Si vous l'installez normalement, /etc/diamond/diamond.conf.example sera créé, alors faites une copie avec le nom diamond.conf dans le même répertoire.
Si vous souhaitez envoyer des données à Graphite, définissez d'abord ici
[[GraphiteHandler]]
### Options for GraphiteHandler
# Graphite server host
host = graphite
# Port to send metrics to
port = 2003
# Socket timeout (seconds)
timeout = 15
# Batch size for metrics
batch = 1
Dans la partie hôte, écrivez l'hôte du serveur Graphite. Définissez le numéro de port selon vos besoins. Le graphite doit être spécifié dans les gestionnaires de la section [serveur], mais c'est la valeur par défaut, vous n'avez donc pas besoin d'en être conscient pour le moment.
Comme mentionné ci-dessus, cela fonctionne pour le moment.
sudo /etc/init.d/diamond start
sudo service diamond start
Démarrez le démon avec.
Attendez un moment, puis regardez le tableau de bord de Grafana. Il réussit si vous pouvez sélectionner des métriques qui semblent contenir des informations système. L'image ci-dessous montre les métriques liées au processeur, à l'espace disque, à la mémoire, à l'iostat, à la moyenne de charge.
C'est une bonne idée de résoudre les problèmes en consultant /var/log/diamond/diamong.log.
tips
Commencez par spécifier la valeur d'intervalle de conf de divers collecteurs. Vous pouvez également définir des valeurs par défaut globales dans diamond.conf. Vous pouvez en fait l'intégrer dans le code source. Vous pouvez voir comment l'écrire en lisant la méthode get_default_config. La page suivante est détaillée. Diamond/Configuration
Écrivez comme ça (l'unité est en secondes)
interval = 60
Vous pouvez spécifier le format de sortie du journal, le format et la destination de sortie. Vous pouvez vous faire une idée générale en lisant Diamond / Configuration.
Spécifiez les gestionnaires que vous souhaitez activer dans les gestionnaires de la section [serveur]. Par défaut, GraphiteHandler et ArchiveHandler sont activés, mais ils sont spécifiés comme ceci.
handlers = diamond.handler.graphite.GraphiteHandler, diamond.handler.archive.ArchiveHandler
Par exemple, si vous voulez pickle et envoyer, vous devez définir GraphitePickleHandler dans la section [server]. Si vous souhaitez enregistrer les données acquises dans MySQL, spécifiez MySQLHandler.
La communauté fournit également un InfluxdbHandler, un gestionnaire qui stocke dans Influxdb. Grafana peut également être tiré d'Influxdb, alors choisissez celui que vous aimez.
Les paramètres de chaque gestionnaire sont décrits dans la section [gestionnaires].
Vous pouvez développer un collecteur personnalisé en étendant diamond.collector.Collector (ou une classe dérivée si vous le faites normalement). Parmi les méthodes de diamond.collector.Collector, la "publication" associée est l'interface entre le collecteur et le gestionnaire. De plus, diamond.collector.Collector a une méthode "collect" non implémentée qui permet aux développeurs d'implémenter la collecte dans des classes dérivées. La page suivante sera utile. Diamond/CustomCollectors
Cependant, comme la quantité d'informations est faible avec cela seul, je pense que vous devriez lire l'implémentation de la classe Collector si vous développez un collecteur personnalisé. collector.py
Par exemple, la méthode de publication a un argument appelé precision, qui spécifie le nombre de chiffres valides dans les métriques. C'est 0 par défaut, c'est-à-dire qu'il ne peut gérer que des entiers. Il existe de nombreuses situations dans lesquelles vous souhaitez gérer des métriques avec float, mais il semble que vous ne puissiez pas trouver de solution sans lire le code source.
sensu et fluentd sont des images qui peuvent faire quelque chose de similaire. sensu fluentd
Il semble que sensu puisse faire diverses choses autres que la collecte de métriques. C'est cool de pouvoir créer un tableau de bord qui génère des informations sur chaque nœud contenant le client sensu à l'aide de l'API sensu. Il semble que cela ne puisse pas être imité avec Diamond. Les sites suivants seront utiles. À propos de Graphite et Sensu Comment créer un système de surveillance hautement flexible à l'aide de Sensu Utilisez Fluentd pour afficher les métriques CloudWatch dans Graphite J'ai essayé une combinaison d'InfluxDB et fluentd
C'est facile, mais j'ai écrit sur Diamond. Il est important de garder les données visibles, donc je pense que c'est une bonne idée de conserver ces outils à l'avenir.
Recommended Posts