2017-09-21 4 views
0

Il semble qu'il n'y ait aucun moyen d'extraire des champs avec un . dans le nom. J'essaie d'utiliser des extracteurs de champs sur nos anciennes données pour créer des champs correspondant aux champs JSON de données plus récents.Splunk - extrait un champ avec point/période

{ "pirate": { "say ": "Shiver me timbers" } } 

pirate.say = "Shiver me timbers" 

Pour tester cela, vous pouvez faire quelque chose comme ceci:

| metadata type=hosts index=_internal 
| head 1 
| eval message="Shiver me timbers, goes the pirate" 
| table message 
| rex field=message "(?<pirate.say>[^,]+)" 

Mais tout ce que je reçois de mes efforts est le même message d'erreur à la fois le prototype « Rex » décrit ci-dessus et « Champ page des extractions.

de la 'rex' prototype je reçois:

erreur dans la commande 'Rex': Rencontrés l'erreur suivante lors de la compilation du regex ([^,] +?) ': Regex: erreur de syntaxe dans nom subpattern (terminateur manquant)

des « champs» extractions sur le terrain »Ajouter je reçois:

rencontrés l'erreur suivante en essayant de sauver: Regex: erreur de syntaxe dans le nom subpattern (m issing terminator)

Vous ne savez pas comment résoudre ce problème?

Répondre

1

Il y a plusieurs choses différentes ici. Tout d'abord, non, vous ne pouvez pas créer une regex avec un point dans le nom de champ en cours d'extraction. (testé sur regex101.com, et il ne fonctionne pas.)

Lorsqu'il est extrait d'un JSON, Splunk peut créer des champs qui ont un point, ce qui signifie la hiérarchie du JSON. D'autre part, lors de l'extraction automatique à partir de données normales, splunk remplacera normalement les caractères non valides par des traits de soulignement.

Pour extraire un fichier JSON, vous utilisez normalement la commande spath.

Pour extraire une expression régulière, donnez-lui simplement un nom valide, puis renommez-la pour qu'elle contienne le point.

| makeresults 
| eval message="Shiver me timbers, goes the pirate" 
| table message 
| rex field=message "(?<piratesays>[^,]+)" 
| rename piratesays as "pirate.say" 

J'ai oublié si vous avez besoin des guillemets simples ou doubles pour le nom étrange, donc si cela ne fonctionne pas, essayez ceci.

| rename piratesays as 'pirate.say' 
+0

Apparemment, la réponse à ma question est non. Mais je pense que votre réponse est très bonne et pourrait aider quelqu'un d'autre, donc si vous éditez votre réponse et dites non à la partie 'Extracteur de champ', j'accepterai la réponse. – thro