[解決済み】Splunk : JSON配列を検索するSpath
質問
以下の2つのJSONイベントがあり、"appliedConditionalAccessPolicies"で、一方のイベントでpolicy1が結果=failure、policy2が結果=notAppliedとなっています。もう一方のイベントでは、値が逆になっています。
今度は、policy1 が status="failure" であるイベントを取得しようとすると、両方のイベントが表示されます。
index=test
| spath path="appliedConditionalAccessPolicies{}" | search "appliedConditionalAccessPolicies{}.displayName"="policy1" "appliedConditionalAccessPolicies{}.result"="failure"
配列のすべての要素内を検索しているように見えます。 配列の各要素に対して両方の条件を検索し、両方の条件を満たす要素を持つイベントを返すようにするには、どうすればよいのでしょうか?
イベント :
appDisplayName: App1
appId: aaaa-1111-111aeff-aad222221111
appliedConditionalAccessPolicies: [
{
displayName: policy1
enforcedGrantControls: [
Block
]
enforcedSessionControls: [
SignInFrequency
ContinuousAccessEvaluation
]
id: f111113-111-400c-a251-2123bbe4233e1
result: failure
}
{ [-]
displayName: policy2
enforcedGrantControls: [ [-]
Block
]
enforcedSessionControls: [ [-]
]
id: sdsds-8c92-45ef-sdsds-c0b2e006d39b
result: notApplied
}
]
appDisplayName: App1
appId: aaaa-1111-111aeff-aad222221111
appliedConditionalAccessPolicies: [
{
displayName: policy1
enforcedGrantControls: [
Block
]
enforcedSessionControls: [
SignInFrequency
ContinuousAccessEvaluation
]
id: f111113-111-400c-a251-2123bbe4233e1
result: notApplied
}
{ [-]
displayName: policy2
enforcedGrantControls: [ [-]
Block
]
enforcedSessionControls: [ [-]
]
id: sdsds-8c92-45ef-sdsds-c0b2e006d39b
result: failure
}
]
解決方法は?
問題は
appliedConditionalAccessPolicies{}.displayName
と
appliedConditionalAccessPolicies{}.result
は複数値フィールドなので、検索が両方の複数値フィールドの同じインデックスにマッチするかどうかを判断する処理をする必要があります。
以下は
mvfind
:
そして
mvfind
は複数値のフィールドのインデックスを与えるので、それらを比較することができますが、私のテストでは、mvfind は以下のようなフィールド名を嫌います。
appliedConditionalAccessPolicies{}.displayName
と
appliedConditionalAccessPolicies{}.result
で使用する前に、名前を変更する必要があります。
mvfind
. これは私の場合、うまくいきました。
| rename "appliedConditionalAccessPolicies{}.displayName" as displayName
| rename "appliedConditionalAccessPolicies{}.result" as result
| where mvfind(displayName,"policy1")=mvfind(result,"failure")
以下は、あなたが遊べる完全な例です。
| makeresults
| eval data="
{\"appDisplayName\":\"App1\",\"appId\":\"aaaa-1111-111aeff-aad222221111\",\"appliedConditionalAccessPolicies\":[{\"displayName\":\"policy1\",\"enforcedGrantControls\":[\"Block1\"],\"enforcedSessionControls\":[\"SignInFrequency\",\"ContinuousAccessEvaluation\"],\"id\":\"f111113-111-400c-a251-2123bbe4233e1\",\"result\":\"failure\"},{\"displayName\":\"policy2\",\"enforcedGrantControls\":[\"Block2\"],\"enforcedSessionControls\":[],\"id\":\"sdsds-8c92-45ef-sdsds-c0b2e006d39b\",\"result\":\"notApplied\"}]}
###
{\"appDisplayName\":\"App2\",\"appId\":\"aaaa-1111-111aeff-aad222221112\",\"appliedConditionalAccessPolicies\":[{\"displayName\":\"policy1\",\"enforcedGrantControls\":[\"Block1\"],\"enforcedSessionControls\":[\"SignInFrequency\",\"ContinuousAccessEvaluation\"],\"id\":\"f111113-111-400c-a251-2123bbe4233e1\",\"result\":\"notApplied\"},{\"displayName\":\"policy2\",\"enforcedGrantControls\":[\"Block2\"],\"enforcedSessionControls\":[],\"id\":\"sdsds-8c92-45ef-sdsds-c0b2e006d39b\",\"result\":\"failure\"}]}
"
| makemv data delim="###"
| mvexpand data
| spath input=data
| fields - data
| rename "appliedConditionalAccessPolicies{}.displayName" as displayName
| rename "appliedConditionalAccessPolicies{}.result" as result
| where mvfind(displayName,"policy1")=mvfind(result,"failure")
を使った方法を紹介します。
mvzip
:
(@warren に感謝)
複数の値を持つフィールドを結合して、両方の値を含む文字列を検索すればよいのです。 mvzip は、以下のようなフィールド名も嫌うようです。
appliedConditionalAccessPolicies{}.displayName
と
appliedConditionalAccessPolicies{}.result
で使用する前に、名前を変更する必要があります。
mvzip
. これは私の場合、うまくいきました。
| rename "appliedConditionalAccessPolicies{}.displayName" as displayName
| rename "appliedConditionalAccessPolicies{}.result" as result
| where mvzip(displayName,result)="policy1,failure"
以下は、あなたが遊べる完全な例です。
| makeresults
| eval data="
{\"appDisplayName\":\"App1\",\"appId\":\"aaaa-1111-111aeff-aad222221111\",\"appliedConditionalAccessPolicies\":[{\"displayName\":\"policy1\",\"enforcedGrantControls\":[\"Block1\"],\"enforcedSessionControls\":[\"SignInFrequency\",\"ContinuousAccessEvaluation\"],\"id\":\"f111113-111-400c-a251-2123bbe4233e1\",\"result\":\"failure\"},{\"displayName\":\"policy2\",\"enforcedGrantControls\":[\"Block2\"],\"enforcedSessionControls\":[],\"id\":\"sdsds-8c92-45ef-sdsds-c0b2e006d39b\",\"result\":\"notApplied\"}]}
###
{\"appDisplayName\":\"App2\",\"appId\":\"aaaa-1111-111aeff-aad222221112\",\"appliedConditionalAccessPolicies\":[{\"displayName\":\"policy1\",\"enforcedGrantControls\":[\"Block1\"],\"enforcedSessionControls\":[\"SignInFrequency\",\"ContinuousAccessEvaluation\"],\"id\":\"f111113-111-400c-a251-2123bbe4233e1\",\"result\":\"notApplied\"},{\"displayName\":\"policy2\",\"enforcedGrantControls\":[\"Block2\"],\"enforcedSessionControls\":[],\"id\":\"sdsds-8c92-45ef-sdsds-c0b2e006d39b\",\"result\":\"failure\"}]}
"
| makemv data delim="###"
| mvexpand data
| spath input=data
| fields - data
| rename "appliedConditionalAccessPolicies{}.displayName" as displayName
| rename "appliedConditionalAccessPolicies{}.result" as result
| where mvzip(displayName,result)="policy1,failure"
関連
-
[解決済み】Splunk : JSON配列を検索するSpath
-
[解決済み] Splunkです。複数のイベントから統計情報を取得し、1つの結合された出力を期待する
-
[解決済み] Splunk Alert - IP アドレスを時間範囲のみから除外する。
-
[解決済み] splunk のタイムチャートテーブルで、ある行の値に基づいて降順でソートすること
-
[解決済み] Splunk で複数のフィールドでイベントをグループ化する
-
[解決済み] Splunk でユニークな検索を行う方法
-
[解決済み] Splunk : ユニークフィールドを使用したレコードの重複排除
-
[解決済み] Splunk アクセス可能なインデックスとソースを一覧表示する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Splunk : JSON配列を検索するSpath
-
[解決済み] Splunkです。複数のイベントから統計情報を取得し、1つの結合された出力を期待する
-
[解決済み] Splunk Alert - IP アドレスを時間範囲のみから除外する。
-
[解決済み] splunk のタイムチャートテーブルで、ある行の値に基づいて降順でソートすること
-
[解決済み] Splunk で複数のフィールドでイベントをグループ化する
-
[解決済み] Splunk でユニークな検索を行う方法
-
[解決済み] Splunk : ユニークフィールドを使用したレコードの重複排除
-
[解決済み] Splunk アクセス可能なインデックスとソースを一覧表示する