Surveillance de pipelines de données à grande échelle
ShareThis se développe rapidement ! Au cours des quatre dernières années où j'ai travaillé ici, nous sommes passés d'une entreprise à une seule pièce à une entreprise à plusieurs pièces. Nous avons également commencé à obtenir tous les avantages typiques d'un démarrage fantaisiste : nourriture gratuite, bureau fantaisiste, sorties d'entreprise, etc.
Des choses amusantes se produisent lorsque nous créons de la valeur, mais il y a un coût pour l'ingénierie en termes de complexité. Nous générons maintenant des téraoctets de données par jour en temps réel. Nous espérons également d'ingérer encore plus de données au cours de la prochaine année ou deux; doubler ou tripler notre flux de données. C'est gratifiant quand je parle à mes collègues pour leur dire ce que nous faisons et ils répondent avec "Wow".
Le problème n'est pas l'ingestion cependant-des outils comme Kafka, Cassandra, aerospike, BigQuery, etc, font l'escalade un problème plus facile que c'était il ya 4 ans. La difficulté vient quand quelqu'un demande «comment savez-vous les données dedans là est juste?» ou «comment savez-vous que toutes les données sont là?»
"C'est juste." -Pas assez bon.
Pour nous aider à répondre à des questions comme celle-ci, nous avons doublé une certaine surveillance assez gratuite à travers tous les pipelines de données. Heureusement, notre code est construit sur un cadre commun de sorte que lorsque nous ajoutons une surveillance à une bibliothèque, il est dynamiquement ajouté à toutes les applications qui utilisent cette bibliothèque. Plutôt cool.
Peut-être une petite panne de la technologie aidera ceux qui essaient de le faire dans l'avenir:
Graphite: Graphite est un "une application Web basée sur Django qui rend les graphiques et les tableaux de bord." Il est construit au-dessus de deux autres projets, Carbon et Whisper (les deux projets font partie du graphite). Le carbone agit comme une couche d'agrégation et de cache qui rend l'interface utilisateur réactive. Whisper est une «base de données de taille fixe, similaire dans la conception et le but de RRD (Round-Robin-base de données). Il permet un stockage rapide et fiable des données numériques au fil du temps. Whisper permet une résolution plus élevée (secondes par point) de données récentes à se dégrader en résolutions plus basses pour la rétention à long terme des données historiques.
Codahale: La bibliothèque de Codahale a en fait des connecteurs pour une variété de services différents (comme les ganglions). Pour nos fins, nous utilisons les connecteurs Java graphite et nous sommes bons pour aller. Les objets métriques peuvent être créés dynamiquement et vous permettent de consigner des stats de base, des histogrammes et des Timers. Nous avons configuré la bibliothèque pour qu'elle se connecte par serveur par minute pour que les appels soient batchés et que le trafic reste faible.
Seyren: Nous utilisons une version modifiée de ce projet de docker en interne avec nos composants livrés à l'intérieur. Nous le dirigeons vers le graphite et le Slack en utilisant des variables d'environnement système. Une fois dans l'interface utilisateur, nous créons des contrôles avec des métriques de graphite (souvent en utilisant certaines des fonctionnalités bien documenté) pour alerter notre chaîne Slack.
J'espère que cela vous aidera ! Joyeux piratage