2017-09-21 26 views
0

名前に.のフィールドを抽出する方法がないようです。Splunk - ドット/ピリオドでフィールドを抽出する

新しいデータのJSONフィールドに一致するフィールドを作成するために、以前のデータにフィールド抽出機能を使用しようとしています。行うにすることができますこれをテストするには

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

pirate.say = "Shiver me timbers" 

は次のようなものです:

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

しかし、私は私の努力のために得るすべては、上記の「レックス」のプロトタイプと「フィールドの両方で同じエラーメッセージです抽出ページ。

私が手に「レックス」のプロトタイプから:「レックス」コマンドで

エラー:正規表現「(?[^、] +)」をコンパイル中に以下のエラーが発生しました:正規表現:構文エラーでサブパターン名(行方不明ターミネーター)

から「フィールド»フィールド抽出»新しいを追加」私が手:正規表現を::保存しようとしているときに

は、次のようなエラーが発生しましたサブパターン名の構文エラー(Mターミネーターを発行する)

私はこの問題をどのように解決することができますか?

答えて

1

ここではいくつかの異なることが起こっています。

まず、いいえ、フィールド名にドットを抽出して正規表現を作成することはできません。 (regex101.comでテストしても機能しません)

JSONから抽出すると、splunkはドットが入ったフィールドを作成して、JSONの階層を示します。

一方、通常のデータから自動抽出する場合、splunkは通常無効な文字を下線で置き換えます。

JSONを抽出するには、通常spathコマンドを使用します。

正規表現を引き出すには、有効な名前を付けて、名前を変更してそのドットを含むようにします。

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

私はあなたが奇妙な名前のために、単一または二重引用符が必要かどうかを忘れてしまったので、それが動作しない場合は、これを試してきました。

| rename piratesays as 'pirate.say' 
+0

明らかに私の質問に対する答えはノーです。しかし、私はあなたの答えは非常に良いと思うし、他の人を助けるかもしれないので、あなたの答えを編集し、 'フィールドの抽出'パートに私は答えを受け入れるといいます。 – thro

関連する問題