Nous envisageons de mettre au point un outil permettant de capturer et d’analyser les données netflow, dont nous rassemblons d’énormes quantités. Chaque jour, nous enregistrons environ 1,4 milliard d’enregistrements de flux qui ressemblent à ceci au format JSON:
{
"tcp_flags": "0",
"src_as": "54321",
"nexthop": "1.2.3.4",
"unix_secs": "1352234521",
"src_mask": "23",
"tos": "0",
"prot": "6",
"input": "105",
"doctets": "186",
"engine_type": "0",
"exaddr": "2.3.4.5",
"engine_id": "2",
"srcaddr": "9.8.7.6",
"dst_as": "12345",
"unix_nsecs": "752265174",
"sysuptime": "2943529544",
"dst_mask": "24",
"dstport": "80",
"last": "2943523241",
"srcport": "52672",
"dpkts": "4",
"output": "111",
"dstaddr": "6.5.4.3",
"first": "2943517993"
}
Nous aimerions pouvoir effectuer des recherches rapides (moins de 10 secondes) sur le jeu de données, le plus souvent sur des tranches de temps étroites (intervalles de 10 à 30 minutes). Nous souhaitons également indexer la majorité des points de données afin de pouvoir effectuer des recherches sur chacun d’eux rapidement. Nous aimerions également avoir une vue à jour des données lorsque les recherches sont exécutées. Ce serait bien de rester dans le monde de l'open source, mais nous ne sommes pas opposés à la recherche de solutions propriétaires pour ce projet.
L'idée est de conserver environ un mois de données, ce qui représenterait environ 43,2 milliards d'enregistrements. Une estimation approximative selon laquelle chaque enregistrement contiendrait environ 480 octets de données, équivaudrait à environ 18,7 téraoctets de données par mois, et peut-être trois fois plus qu'un index. Nous voudrions éventuellement augmenter la capacité de ce système pour stocker des milliards de disques.
Nous avons (très fondamentalement) évalué dans la mesure du possible les candidats couchbase, cassandra et mongodb pour ce projet, mais chacun propose ses propres défis. Avec couchbase, l'indexation est effectuée à intervalles réguliers et non lors de l'insertion des données; les vues secondaires ne sont donc pas à jour. Les index secondaires de Cassandra ne sont pas très efficaces pour renvoyer les résultats, car ils nécessitent généralement une analyse de l'ensemble du cluster pour obtenir des résultats. semble être beaucoup plus difficile à mettre en œuvre car il est maître / esclave / fragmenté. Parmi les autres candidats que nous prévoyons d’évaluer, on citera elasticsearch, mysql (je ne sais pas si cela est même applicable) et quelques bases de données relationnelles orientées colonnes. Toute suggestion ou expérience du monde réel serait appréciée.