Bonjour à tous !
L'équipe de Metrics vous a également concocté son cadeau de noel : Le support Graphite en query !
Graphite est l'une des premières plate-formes de Time Series ayant connu un succès relatif il y a quelques années. Le projet n'a pas su évoluer selon les attentes du marché (séries éphémères, modèle de données moderne avec dimensions, cardinalité forte, etc.), mais il propose tout de même un ensemble de fonction non négligeable pour manipuler des données de type Time Series. Il n'est pas aussi complet que WarpScript qui détient le record absolu, mais il constitue une alternative intéressante pour ceux qui lui sont familier.
Pour rappel, nous supportons également **l'ingestion** via protocole Graphite (Carbon) à l'aide du des outils **Fossil** & **Beamium**.
Puisque Graphite n'est pas sécurisé par construction, Fossil intervient en faisant office de mandataire pour les requêtes Carbon à destination d'un Graphite et les déverse dans le répertoire _source_ de Beamium. Et c'est tout ! Vous bénéficiez dès lors d'une solution Graphite sécurisée de bout en bout.
Pour cette alpha, voici la liste des fonctions supportées :
* averageSeries
* absolute
* aggregate
* aggregateLine
* aggregateWithWildcards
* alias
* aliasByMetric
* aliasByNode
* aliasByNode
* aliasSub
* averageAbove
* averageBelow
* averageSeries
* averageSeriesWithWildcards
* consolidateBy
* constantLine
* countSeries
* cumulative
* currentAbove
* currentBelow
* delay
* derivative
* diffSeries
* divideSeries
* drawAsInfinite
* exclude
* grep
* aggregateWithWildcards
* aggregateWithWildcards
* highestAverage
* highestCurrent
* highestMax
* hitcount
* timeFunction
* integral
* interpolate
* invert
* keepLastValue
* limit
* logarithm
* logarithm
* lowestAverage
* lowestCurrent
* maxSeries
* maximumAbove
* maximumBelow
* minMax
* minSeries
* minimumAbove
* minimumBelow
* multiplySeries
* multiplySeriesWithWildcards
* offset
* perSecond
* pow
* randomWalkFunction
* randomWalkFunction
* rangeOfSeries
* removeAboveValue
* removeBelowValue
* removeEmptySeries
* scale
* scaleToSeconds
* seriesByTag
* sinFunction
* sinFunction
* sortByMaxima
* sortByMinima
* sortByName
* sortByTotal
* squareRoot
* stddevSeries
* substr
* sumSeries
* sumSeriesWithWildcards
* summarize
* threshold
* timeFunction
* timeFunction
* timeShift
* timeSlice
* transformNull
* unique
Gardez en tête que le support Graphite est considéré comme **ALPHA** et @FlorentinDUBOIS se fera un plaisir de l'améliorer selon vos retours.
Aussi, n'hésitez pas à nous notifier s'il vous manque des fonctions présentes dans la documentation de référence.
Joyeux Noel (Nedeleg Laouen) de toute l'équipe Metrics
@OvhMetrics
[FR] [Metrics] Support du protocole Graphite disponible !
Related questions
- Evaluer le volume envoyé de logs
10614
28.10.2016 00:07
- [ Metrics ] New release : 2.0
10144
26.06.2017 22:06
- Coupures de service ?
7776
29.05.2019 16:10
- Supprimer data/Metrics sur opentsdb
7767
05.03.2018 15:48
- [Metrics] Grafana completely broken (fixed)
7752
02.01.2017 10:44
- Envoi des logs depuis un cluster kubernetes via fluentd
6951
31.10.2016 13:28
- Problème de performances sur la partie metrics
6724
17.01.2019 08:01
- Fluent-bit Parser for logback JSON
6411
04.10.2022 08:38
- Erreur lors de la commande d'options
5957
10.05.2017 10:53
Merci pour la version Française. :p
Ca veut dire quoi "en query"?
ça veut dire : "en interrogation via l'interface de programmation"
ingestion vs interrogation
Le query est fait via l'API /render qui peut être sécurisée en HTTPS avec authentification (token), alors que l'ingestion Graphite est faite en clair et ne peut être sécurisé. C'est pour ça que nous proposons une approche alternative :
- Proxy Fossil qui envoie ses données à Beamium qui les envoie de façon sécurisée sur la plateforme
- Proxy managé sans auth, filtré par IP
Nous avons un peu de travail sur Fossil, la semaine prochaine il sera fixé.
La version managée viendra par la suite. La dispo dépendra de la demande donc si vous êtes intéressé, n'hésitez pas à vous manifester !
Merci pour l'info. Avez-vous une doc sur Graphite lui-même, car si on cherche sur le web, on tombe sur le graphite (carbone, mine de crayon) ou alors c'est en anglais.
Bonjour,
Nous ne détenons pas de documentation de Graphite. Le projet est Open-Source hébergé sur GitHub. Cepedant, si vous souhaitez avoir une documentation en français, vous êtes libre de créer des issues sur les différents dépots du projet.
Bonjour,
Merci pour le support, il me tarde de pouvoir tester tout cela en profondeur !
Je prends un peu d'avance dans l'attente d'une version de fossil qui fonctionne chez moi.
Pouvez-vous nous aider pour la configuration de beamium, car j'avoue ne pas trop savoir comment régler les paramètres. Voici ce que j'ai mis :
> ## Graphite endpoint to send data
> sinks:
> sink1:
> url: https://graphite.gra1.metrics.ovh.net
> token-header: Authorization
> token: "Basic token:WRITE_TOKEN"
> parameters:
> source-dir: /opt/beamium/sources
> sink-dir: /opt/beamium/sinks
> log-file: /var/log/beamium/beamium.log
Pouvez-vous me dire si ça vous semble correct ou bien si c'est autre chose qui est attendu ?
Ca donnera également d'autres idées pour améliorer la documentation de Fossil =D
Bonjour,
De rien, on est d'accord que c'est mieux quand ça fonctionne :).
Pour la configuration de Beamium, tu ne peux pas utiliser l'endpoint graphite de metrics, car fossil te transforme tes métriques au format sensision.
Il faut donc que tu passes par l'endpoint Warp10 : `https://warp10.gra1.metrics.ovh.net/api/v0/update`
Après tu pourras les interroger dans n'importe quel protocole que tu souhaites supporté par la plateforme.
Je t'ai mis un example de fichier de configuration de beamium sur ce https://gist.github.com/FlorentinDUBOIS/93a69919fad0c15738b750b76f47b2e0 gist.
Carrément, ça pourrais être l'objet d'une prochaine PR :)
Merci, je viens de tester, ça fonctionne superbement bien !
Le plus génial avec cette plateforme, c'est l'intercompatibilité entre les protocoles. Vous avez fait un super boulot là-dessus.
Je ne vais pas pouvoir être très critique sur le fond des métriques car je ne suis qu'un utilisateur débutant (je fais ma transition depuis AWS où toutes les métriques étaient données directement sans nécessité de configuration).
Par contre là où je suis agréablement surpris, c'est sur la tarification des métriques. Ces deux métriques ne sont pas considérées comme différentes :
> servers.host1.maMetrique
> servers.host2.maMetrique
Sur les autres plateformes style InfluxDB que j'ai testées juste avant graphite, je passais par des tags pour éviter la sur-tarification. Mais sur Graphite, la puissance des requêtes est typiquement sur ce genre de noms, donc passer par des tags aurait été inutile et j'avais peur de voir le nombre de métriques exploser (surtout en environnement load balancé)... Ce n'est pas le cas, donc merci.
En conclusion, super boulot, j'attends avec impatience la version managée.
Et j'attends aussi la possibilité de pouvoir envoyer des alertes, car j'aimerais par exemple recevoir un SMS, un mail, ou appeler un script lorsque le CPU est trop haut (scalabilité automatique), ou bien si une erreur 500 est remontée.
FlorianP1,
Il faut que tu fasses attention, car dans ton exemple, ce sont deux séries temporelles différentes. Il en va de même pour les séries suivantes :
os.cpu{host=1}
os.cpu{host=2}
Elles sont aussi différentes.
Petit spoil, il s'appelle omni :).
Oui, je confondais les deux, mais c'est totalement ce que je veux !
Et pour le spoil **omni**, il est disponible ? :p
Petite précision par rapport à une approche Graphite classique, on remap automatiquement la structure hiérarchisée en metric{tags}, par exemple :
server.host_1.dc.gra.metric.cpu(...)
devient :
server.host_1.dc.gra.metric.cpu{server=host_1,dc=gra,metric=cpu}
Ce qui signifie que dans les cas où le mapping automatique fonctionne bien, ça ouvre la possibilité de tirer partie de la structure en tags via les autres protocoles et ainsi d'opérer des réductions ou agrégations sur les labels/tags.
Omni sera disponible d'ici quelques jours, le temps de peaufiner la documentation. On a vraiment hâte car on pense que c'est réponse adaptée aux usages actuels, dont la promesse serait : devops friendly & scalable.