コンセプト

正式にはDynamic Focusと呼ばれるInstanaの検索およびフィルター機能は、複数のデータコンテキストを同時に検索できる堅牢で本格的なエディターです。 マイクロサービスアーキテクチャは、複雑なさまざまなデータコンテキストを利用します。これらはすべて、ひとつのフードの下で一緒にクラスター化されます。 Dynamic Focusはこれらをフィルタリングして、ユーザーにシステム全体の強力な理解を提供します。

このクロスコンテキスト化により、次のような強力なクエリが公開されます。

  • 未解決の問題があるフィルターインフラストラクチャ
  • 定の技術のフィルターインフラストラクチャ
  • 特定のサービスのインフラストラクチャをフィルタリングし、イベントを変更する
  • 特定のサービスとインフラストラクチャの組み合わせのイベントをフィルタリングする
  • 特定のコンテナーおよびテクノロジーでイベントをフィルター処理する
  • 特定のインフラストラクチャでイベントをフィルタリングする

この機能は、当社独自のアーキテクチャと機能を活用しています

  • ダイナミックグラフ ー すべての履歴属性とメトリックを含む、物理的および論理的コンポーネントの凝集モデル。 ダイナミックグラフには、分散されたトレースとイベントも含まれます。 グラフ内のすべてのノードは、依存関係に基づいて接続されます。 Instanaのさまざまなビューはグラフのデータを視覚化し、ダイナミックフォーカスは実際にグラフをフィルタリングして特定のサブビューとフォーカスを提供します。
  • 自動検出 ー グラフに保持されているすべてのコンポーネントとその依存関係は、エージェントによってリアルタイムで自動検出されます。 保存されたフィルターは、手動で変更したり構成したりすることなく、システムやアプリケーションの現在の状況に適応します。
  • インシデント ー インシデントはKPIと機械学習に基づいており、インシデントに関する要約情報を提供します。 これには、サービス、トレース、および物理コンポーネントへの依存関係が含まれます。これらをDynamic Focusで使用して、特定のインシデントの一部であるコンポーネントのみをフィルタリングできます。

アプリケーションコンポーネントに焦点を当てる

ダイナミックフォーカスの概念を理解するために、簡単な例を使用して紹介します。 それぞれ4つのコンテナを持つ2つのホストで実行されているゾーンアプリケーションのグラフ表現を使用します。 すべてのコンテナで実行されているJVMがあります。 2つのホストはそれぞれ、ホストごとにサービスを提供する2つのTomcatと2つのElasticsearchインスタンスを実行します。 ダイナミックグラフモデルの簡易バージョンは次のようになります。

Dynamic-Focus_Dynamic-Graph-1

新しいフィルタリング機能により、検索クエリに基づいてグラフ内のノードを削減できます。

entity.type:tomcat のクエリは、グラフ内のすべてのTomcatインスタンスに一致します。 これは、標準ビューでインフラストラクチャ、アプリケーション、トレースを視覚化するときに、Elasticsearchエンティティと対応するサービスを含むコンテナが表示されなくなることを意味します。

Dynamic-Focus_Dynamic-Graph-2

Instanaのチャート、変更、問題、またはインシデントは、縮小されたグラフのコンテキストでのみ表示されます。

別のクエリ例は、バージョン1.8のすべてのJVMを検索するものです:entity.jvm.version:1.8.*

この場合、グラフは次のようになります。

Dynamic-Focus_Dynamic-Graph-3

これは、特定の条件に一致するグラフ内の単一のエンティティまたはエンティティのグループにユーザーの注意を集中させるための強力なツールです。

管理属性に焦点を当てる

Instanaには、ダイナミックグラフの外部にある構造もありますが、たとえば、イベント(変更など)、問題、インシデントなど、ダイナミックグラフを参照します。 インシデントには、InstanaがKPIの外れ値を見つけたサービスや、CPU負荷が高いなどの問題のあるエンティティを含めることができます。

新しい検索機能を使用して、event.state:open event.type:incident などのインシデントをクエリおよびフィルタリングできます。 これにより、現在選択されている時間枠内のすべてのアクティブなインシデントがフィルタリングされます。 この例では、Elasticsearchサービスの低下がTomcatサービスのその後の低下を引き起こす場合、アクティブなインシデントはひとつだけであると想定しています。

Dynamic-Focus_Dynamic-Graph-4

一致するインシデントには2つのサービスへの参照があるため、クエリは関連するエンティティのみにフィルターします。

これは逆の方法でも機能します。 サービスを検索すると、このサービスを含むインシデントのみが表示されます。

用語

ダイナミックフォーカス

Instanaのすべてのデータコンテキストを同時に検索できる検索およびフィルター機能。

フィルタ

保存されたダイナミックフォーカスクエリ。

使用法

構文

Instanaは、Luceneクエリ構文を使用して、アプリケーションコンポーネントとブール演算子にマッピングされた用語から複雑なクエリを構築します。 これにより、フリーテキスト検索、タグフィルタリング、CPUカウントクエリなど、さまざまなクエリタイプがサポートされます。 検索バーは、文字列の残りの部分から有効な個々の用語を自動的に強調表示することにより、ユーザーがクエリを作成するのを支援します。 これにより、フリーテキストクエリ「and」とブール演算子ANDを混同するなど、一般的な文字列構文の落とし穴を回避できます。

Luceneクエリが取る形式は、実装によって異なります。 Instanaでは、すべてのクエリはフィールドからフィールド修飾子、数量詞に進みます。 両方のフィールド値はピリオドで区切られ、量指定子はコロンで区切られます。 たとえば、ユーザーがアプリケーション内のすべてのTomcatインスタンスを除外したいとします。 検索バーでのクエリは、entity.type:tomcat になります。 これにより、Instanaは、「tomcat」というラベルが付いたタイプのすべてのエンティティを除くすべてをビューから削除します。

もちろん、entity.type:tomcat は単なるクエリフレーズです。 AND、OR、NOTなどのブール演算子を使用してさまざまなフレーズをつなげて、クライアントに必要なものを正確に示す柔軟で複雑なフィルターを構築できます。 例:

dynamic-focus-1

デフォルトの演算子

AND 演算子は、デフォルトの接続演算子です。 これは、2つの用語の間にブール演算子がない場合、AND 演算子が使用されることを意味します。

例:entity.type:tomcat event.state:open は、entity.type:tomcat AND event.state:open と同等です。

これは、デフォルトでORを使用するlucene標準とは異なることに注意してください。

オートコンプリート

Luceneクエリ用語の強調表示に加えて、Instanaの検索バーは、未完成の検索可能な値に対するIDEグレードの提案も可能です。 これは、新規および経験のあるInstanaユーザーの両方にとって非常に大きな助けとなります。 Lucene構文のコマンドを持たないユーザーは自動ヘルプを利用できますが、経験豊富なユーザーは複雑な検索をはるかに高速に実行できます。 すべてのクエリ提案は、検索バーの下のドロップダウンボックスに表示されます。 必要な提案が表示されている場合は、矢印キーを使用してクリックするか、ナビゲートします。

dynamic-focus-2

Instanaの検索機能はゼロタイムです。つまり、検索条件に入力すると結果が表示されます。 また、フィルターを保存、編集、削除して、ワークフローを高速化することもできます。

EUMトレースキーワード

EUMトレースを検索するときに、追加の検索コンテキストtracespan を使用できます。
いくつの例:

  • span.http.host – ホストヘッダーを検索します
  • span.http.parameters – 「products = 123」のようなパラメーターを検索します
  • span.http.path – 特定のパスを検索します
  • span.http.url – 要求されたURLを検索します
  • trace.duration – 特定の期間を検索します
  • trace.erroneous – エラーの有無にかかわらずトレースを検索します

構文の制約

    • と否定されるクエリの間に空白を入れることはできません。  代わりに !<query> または NOT <query> を使用してください。
    • 同じentity.application.nameentity.service.nameentity.endpoint.name の複数のDynamic Focusキーワードを一緒に使用する場合、OR 演算子でのみ結合できます。 たとえば、クエリ entity.application.name:foo AND entity.application.name:barentity.application.name:foo entity.application.name:bar はサポートされていません。 クエリ entity.application.name:foo OR entity.application.name:bar がサポートされています。
    • 複数の異なるentity.application.nameentity.service.nameentity.endpoint.name Dynamic Focus キーワードを一緒に使用する場合、それらは AND 演算子でのみ結合できます。 たとえば、クエリentity.application.name:foo OR entity.service.name:bar はサポートされていませんが、クエリ entity.application.name:foo AND entity.service.name:bar はサポートされています。
    • アプリケーション、サービス、またはエンドポイント名の否定を含むクエリはサポートされていません。 したがって、NOT entity.application.name:foo!entity.service.name:barNOT entity.endpoint.name:foobar はいずれも無効です。 ただし、NOT event.entity.label:foo を代わりに使用することにより、アプリケーション、サービス、またはエンドポイントのイベントをフィルターで除外することも可能です。
    • ダイナミックフォーカスクエリentity.application.name:<term>entity.service.name:<term> およびentity.endpoint.name:<term> は、ストリングを含むロジックを使用して評価されます。たとえば、ダイナミックフォーカスクエリentity.application.name: shopentity.application.name:shop-frontend にも一致します。
    • ダイナミックフォーカスクエリキーワードentity.application.nameentity.service.nameentity.endpoint.name は、ブールクエリ(上記のブール論理制約を参照)、用語クエリ、フレーズクエリ、プレフィックスクエリでのみサポートされています。

よくある質問

二重引用符(””)内でワイルドカード(*)を使用しても、期待される結果は得られません。

この場合、* 記号はワイルドカードとしてではなく文字として評価されるため、一致は返されません。 luceneの仕様によれば、フレーズクエリでの単一および複数文字のワイルドカード検索はサポートされていません。 フレーズクエリは、event.text: “something bad happened” など、二重引用符で囲まれた単語のグループです。

一貫性がないように見える検索結果の数を取得しています。

結果カウントが混乱する場合があります。 たとえば、インフラストラクチャマップ内で検索する場合、ビュー内の検索は、インフラストラクチャマップでは表示されないサービスなど、ビュー内で実際に表示されるよりも多くのエンティティと一致する可能性があることに注意してください。

フィールド修飾子とフィールド修飾子の後に使用する量指定子を知るにはどうすればよいですか?

測定可能なメトリックは、フィールド数量詞になります。 エンティティの場合は名前、イベントの場合は分類になります。 また、Instanaのオートコンプリート機能は、クエリの各部分に有効な入力を提供するのに役立ちます。

検索クエリでフィールドを指定しない場合に検索されるフィールド 

検索クエリでフィールドを指定しない場合、ダイナミックフォーカスは現在のコンテキストをターゲットにして意味のある結果を提供します。 つまり、インフラストラクチャマップ上にある場合はエンティティフィールドを検索し、イベントビュー上にある場合はイベントデータを検索します。

entity.selfTypeentity.type の違いは何ですか?

entity.selfType を検索すると、検索結果が検索対象エンティティに制限されますが、entity.type には検索対象エンティティのすべての子が含まれます。 たとえば、entity.selfType:host を検索すると、インフラストラクチャマップにはホストエンティティ(およびゾーンなどのすべての親エンティティ)のみが表示されます。 ただし、entity.type:host を検索すると、検索結果にはホスト上で実行されているもの(Webサーバー、データベースなど)も含まれます。ただし、entity.typeentity.selfType の両方は、アプリケーションの視点。 例として、イベントビューでクエリentity.type:endpoint を使用する場合、リストにはエンドポイントエンティティで検出されたイベントのみが含まれます。