サービス
Instana では、すべての要求がトレースおよび分析されます。
サービスとエンドポイントは自動的に検出され、サービス、エンドポイント、およびお客様のインフラストラクチャ間の関係は自動的に相関付けられ、 当社のダイナミックグラフに保存されます。
トレーサーおよびセンサーから収集されたデータに基づいて、呼び出し、待ち時間、およびエラーのある呼び出しについて KPI が計算されます。 KPI は、個々のサービスの正常性と、インフラストラクチャー全体の正常性を検出するのに役立ちます。
サービスは、アプリケーション・モニターの一部であり、システムの論理ビューを提供します。 サービスは、ホスト、コンテナー、プロセスなどのインフラストラクチャー・エンティティーから派生します。 着信はインフラストラクチャ・エンティティと関連付けられ、インフラストラクチャ・データ(例: Kubernetes のポッドラベルや SpringBoot のアプリケーション名など)が追加されます。 このインフラストラクチャー・リンク処理ステップの後、サービス・マッピング・ステップは、強化された呼び出しをマップして、一連のルールに基づいて呼び出しごとにサービス名を生成します。 Instana 豊富な事前定義ルールが搭載されており、最適なサービス名を自動的に生成します。 サービス・マッピングを微調整するには、独自のカスタム・ルールを作成できます。 サービス・マッピングのカスタマイズを参照してください。
事前定義ルール
各呼び出しにおいて、以下のルールは優先度の高い順に適用されます。 コールのサービス名は、一致するルールの中で優先順位が最も高いものに基づいて割り当てられます。
| ルール | タグ |
|---|---|
| カスタム・サービス・ルール | ユーザーによって定義されたタグ ( カスタム・サービス・マッピングを参照) |
プロセスの環境変数 INSTANA_SERVICE_NAME からのユーザー定義サービス名 |
{instana.service.name} |
HTTP ヘッダー X-Instana-Service によるユーザー定義サービス名 |
{call.http.header.x-instana-service} |
sdk スパン・データ内のユーザー定義サービス名 (設定されている service タグ) |
{call.tag.service} |
| OpenTelemetry 定義のサービス名 | {otel_resource.service.name} |
| リモート・サービスの OpenTelemetry サービス名 | {otel.peer.service} |
| Jaeger 定義のサービス名 | {jaeger.service.name} |
| Zipkin 定義のサービス名 | {zipkin.service.name} |
| IBM MQ キュー・マネージャー | {ibmmq.queuemanager.name} |
| ACEサーバー名 | {ace.integrationnode.name}:{ace.server.name} |
| Consul クラスター名 | Consul@{consul.cluster.name} |
| Cassandra クラスター名 | {cassandra.cluster.name} |
| ElasticSearch クラスター名 | {elasticsearch.cluster.name} |
| Couchbase クラスター名 | {couchbase.cluster.name} |
| MongoDB レプリカ・セット名 | {mongo.replicaSetName} |
| Kafka クラスター名 | {kafka.cluster.name} |
| ClickHouse クラスター名 | クリック・ハウス @{clickhouse.cluster.name} |
functionname を使用する Function as a Service スパン |
{faas.functionname} |
| AWS EC クラスター ID | {aws.ec.cluster.id} |
| AWS RDS クラスター名 | {aws.rds.cluster.name} |
| AWS サービス・タイプ DynamoDB | DynamoDB |
| AWS サービス・タイプ S3 | AWS S3 |
| Google Cloud サービス・タイプ Storage | Google Cloud Storage |
| Azure App Service 名 | {azure.appservice.name} |
| AWS ECS コンテナー名 | {container.label.com.amazonaws.ecs.container-name} |
| AWS ECS タスク・ファミリー | {container.label.com.amazonaws.ecs.task-definition-family} |
| Kubernetes コンテナー名 | {kubernetes.container.name} |
| Cloud Foundry アプリケーション名 | {cloudfoundry.application.name} |
| Docker Swarm サービス名 | {docker.label.com.docker.swarm.service.name} |
| Marathon アプリケーション ID (解析済み) | {marathon.app.id-1} |
| Nomad タスク名 | {nomad.task.name} |
| Rancher 1 プロジェクト・サービス名 | {container.label.io.rancher.project_service.name} |
| コンテナー・イメージ名 (解析済み) | {container.image.name-1} |
| アプリケーション コンテナー (JBoss, Tomcat, WebLogic, WebSphere, MSIIS) のデプロイメント名と拡張子 (解析済み) | {call.deployment.name-1} |
| アプリケーション コンテナー (JBoss、Tomcat、WebLogic, WebSphere, MSIIS) のデプロイメント名でファイル拡張子がないもの (解析済み) | {call.deployment.name-1} |
| Dropwizard 名 | {dropwizard.name} |
| Spring Boot 名 | {springboot.name} |
| JBoss 名 | {jboss.server.name} {jboss.node.name?} |
| WebSphere 名 | {websphere.server.name} |
| WebLogic 名 | {weblogic.server.name} |
| Redis ポート | {host.name} 上の Redis@{redis.port} |
| Aerospike ポート | {aerospike.host} 上の Aerospike@{aerospike.port} |
| Neo4j ポート | {host.name} 上の Neo4j@{neo4j.port} |
| Memcached ポート | {host.name} 上の Memcached@{memcached.port} |
| Varnish ポート | {host.name} 上の Varnish@{varnish.port} |
| Clickhouse ポート | {host.name} 上の Clickhouse@{clickhouse.httpPort} |
| MongoDB データベース名 | {host.name} 上の MongoDB@{mongo.port} |
| Zookeeper ポート | {host.name} 上の Zookeeper@{zookeeper.clientPort} |
| Solr バージョン | {host.name} 上の Solr-{solr.version} |
| Solr | {host.name} 上の Solr |
| Solr Zookeeper | Solr Zookeeper-{solr.zk_host} |
| PostgreSQL ポート | {host.name} 上の PostgreSQL@{postgresql.port} |
| CockroachDB ポート | {host.name} 上の CockroachDB@{cockroachdb.port} |
| MySQL ポート | {host.name} 上の MySQL@{mysql.port} |
| OracleDB ポート | {host.name} 上の OracleDB@{oracledb.port} |
| MSSQL データベース SID | MSSQL@{mssql.instance} |
| MariaDB ポート | {host.name} 上の MariaDB@{mariadb.port} |
| Db2 ポート | Db2@{db2.port} ( {host.name} ) |
| Kafka バージョン | {host.name} 上の Kafka-{kafka.version} |
| ActiveMQ ブローカー名 | {activemq.broker.name} |
| RabbitMQ バージョン | {host.name} 上の RabbitMQ-{rabbitmq.version} |
| RocketMQ バージョン | RocketMQ-{rocketmq.version} について {host.name} |
| jar ファイルからの JVM 名 | {jvm.app.name-1} |
| JVM 名 | {jvm.app.name} |
| ホスト環境での Node.js アプリケーション | {nodejs.app.name} |
| Python スナップショット名 | {python.app.name} |
| Ruby 名 | {ruby.app.name} |
| Go 名 | {go.app.name} |
| 使用可能な場合にホスト・ヘッダーを使用する PHP (解析済み) | {call.http.host-1} |
| PHP | PHP |
| PHP-FPM ワーカー・プール用の PHP | PHP |
| CLR 名 | {clr.app.name} |
| .Net Core 名 | {netcore.app.name} |
| Haskell 名 | {haskell.app.name} |
| Crystal 名 | {crystal.app.name} |
| GCP Cloud Run サービス | {gcp.cloudrun.service.name} |
| クラウド・インフラストラクチャー ID | {cloud.id} |
| シェル・スパン | spawn されたプロセス |
object を使用する RPC サービス・スパン (解析済み、WSDL 名前空間付き) |
{call.rpc.object-1} |
object を使用する RPC サービス・スパン |
{call.rpc.object} |
| データベース FTP スパン | {call.database.connection} |
connection を使用するデータベース・キャッシュ・タイプ・スパン (解析済み) |
{call.database.type} @ {call.database.connection-1} |
| データベース・キャッシュ・タイプ・スパン | {call.database.type} |
| MongoDB データベース・スパン (解析済み) | {call.database.schema-1} |
| ElasticSearch データベース・スパン (解析済み) | {call.database.connection-1} |
| Couchbase / Redis データベース・スパン (解析済み) | {call.database.connection-1} |
| AWS S3 データベース・スパン | AWS S3 |
| DynamoDB データベース・スパン | DynamoDB |
| Google Cloud Storage スパン | Google Cloud Storage |
| Azure Storage span | Azure Storage |
| CosmosDB データベース・スパン (解析済み) | {call.database.schema-1} |
| 汎用データベース・スパン | {call.database.schema} |
connection からのスキーマを使用する汎用データベース・スパン (解析済み) |
{call.database.connection-1} |
connection からのホストを使用する汎用データベース・スパン (解析済み) |
{call.database.connection-1} |
汎用データベース・スパンのフォールバック type |
{call.database.type} |
| 一時キュー用のメッセージング・スパン | {call.messaging.type} |
| IBM MQ アドレスを使用したspan | {call.messaging.address-1} |
| Apache RocketMQ アドレスを使用したspan | {call.messaging.address-1} |
| IBM ACE アドレスを使用したspan | {call.messaging.address-1} |
| アドレスを使用する JMS スパン (解析済み) | {call.messaging.address-1} |
| アドレスを使用するメッセージング・スパン (フル) | {call.messaging.address} |
| アドレスなしのメッセージング・スパン | {call.messaging.type} |
| z/OS Connect スパン | {call.zcee.serviceName} |
| ホストを使用する HTTP スパン (解析済み) | {call.http.host-1} |
| URL を使用する HTTP スパン (解析済み) | {call.http.url-1} |
| PHP スクリプト・スパン (CLI など) | {call.php.script.name} |
| SDK スパン | SDK |
object なしの RPC (RMI) スパン |
RMI |
| GraphQL サブスクライバー・スパン | GraphQL サブスクライバー |
| イベント・トリガー | {call.event.trigger} |
| クラウド・メタデータ・サービス | クラウド・メタデータ・サービス |
サービスは、システムの残りの部分に公開 API を提供する論理コンポーネントと見なすことができます。API は、そのエンドポイントで構成されます。 サービスはモニターされ、呼び出しの実行と受信を行います。 サービスに対する要求により、特定のエンドポイントに対する単一の呼び出しが行われます。
サービスは、分離して考えることも、アプリケーションの観点から考えることもできます。 サービスは多くの場合、パッケージやコンテナーなどの 1 つの「デプロイメント単位」にマップされます。 このインスタンスが複数ある場合 (例えば、コンテナーが同時に作動する場合)、それらはすべて同じ論理サービスにマップされます。
サービス・タイプは、エンドポイントからの継承によって自動的に割り当てられます。 例えば、サービスに HTTP エンドポイントと BATCH エンドポイントの両方がある場合は、HTTP と BATCH の両方のタイプが割り当てられます。 サービスの KPI (呼び出し、エラー、待ち時間) では、タイプに関係なく、すべての呼び出しの集約が表示されます。
サービス・マッピングのカスタマイズ
デフォルトのサービス・マッピングをカスタマイズするには、4 つの方法があります。
- カスタム・サービス・ルールを作成します。 例えば、
INSTANA_SERVICE_NAME環境変数を使用してサービスが構成されている場合でも、このルールは他のすべてのルールより優先されます。 - タグ
service.nameを適用します。 - 環境
INSTANA_SERVICE_NAME変数を指定してください。 これらの制限事項については、『Dynamic Language Sensors』 に記載されています。 - HTTP
X-Instana-Serviceヘッダーを指定してください。
カスタム・サービス・ルールの作成
- サイドバーから、 「アプリケーション」 をクリックし、 「サービス」 タブを選択します。
- 「サービスの構成」 をクリックします
- 「カスタム・サービス・ルールの追加」をクリックします。
- ドロップダウン・リストからタグを選択します。
事前定義されたルールと同様に、カスタムサービスルールも、各コールに対して優先順位の低いものから順に適用されます。 コールのサービス名は、一致するルールの中で優先順位が最も高いものに基づいて割り当てられます。
カスタム・サービス・ルールを使用する理由の 1 つは、インフラストラクチャー・コンポーネントの既存のメタ情報を使用することです。 例えば、このラベルからサービスをマップするために、 com.acme.service-name:myserviceなどのドメイン固有の情報で Docker コンテナーにラベルを付ける場合は、 docker.label タグと com.acme.service-name タグを選択します。 ラベル com.acme.service-name を持つコンテナーを渡すすべての呼び出しは、その値によって名前が指定されるサービス (例えば、 myservice) に関連付けられます。 カスタム・サービス・マッピングを作成するために使用できるタグは複数あります。
サービス・マッピングに複数のキーを追加することもできます。 複数のタグはダッシュで連結されます。 すべてのキーが一致する必要があることに注意してください。例えば、ホスト・ゾーンに基づいてステージング・サービスを分離する場合は、 host.zone + docker.label:com.acme.service-nameという 2 つのキーを追加できます。 これにより、サービスには、ホスト・ゾーンの値と docker ラベルを連結した名前が付けられます。 これにより、2 つのサービス (例えば、 prod-myservice と dev-myservice) が分離されます。
特殊なタグ service.default_nameを使用することにより、カスタム・サービス・ルールを使用して、より多くのタグを持つサービス・デフォルト・ルールを拡張することもできます。 例えば、自動的に作成されたサービスをホスト・ゾーンごとに分割するには、タグ service.default_name および host.zoneを使用してカスタム・サービス・ルールを作成します。

サービス名をグローバルに設定する
サービスに関連付けられているすべての呼び出しのサービス名を設定できます。 サービス名は、 Instana トレーサーによって監視されているプロセスに対してのみ設定できます。
サービスからのすべての着信呼び出しおよび発信呼び出しのサービス名を設定するには、プロセスで INSTANA_SERVICE_NAME 環境変数を設定します。
サービス名を設定しても、プロセスの名前は変更されません。 プロセスの名前を変更するには、 INSTANA_PROCESS_NAME 環境変数を使用します。
コード内の構成を使用して、以下のトレーサーのグローバル・サービス名を設定できます。
Instana で認識される環境変数に関する詳細については、 「環境変数」 を参照してください。
呼び出しごとにサービス名を設定する
OpenTelemetry または OpenTracing でサービス名を設定する
setTagOpenTelemtry または OpenTracing でサービス名を設定するには、関数を使用します。
例: span.setTag('service', 'my-service')
X-Instana-Service HTTP ヘッダーの指定
呼び出しで X-Instana-Service HTTP ヘッダーを設定すると、宛先 (HTTP 要求を受信するサービス) にヘッダーで指定された値のタグが付けられます。
X-Instana-Service HTTP ヘッダーは自動的には収集されません。 ヘッダー X-Instana-Service を取得するには、 Instanaconfiguration.yamlのエージェント設定ファイルで設定を行う必要があります。 詳細については、 「 HTTP のカスタムヘッダーの取得」 を参照してください。手動サービス構成 (試験段階)
場合によっては、一部の呼び出しで自動サービス・マッピングがすぐに機能しないことがあります。 手動サービス構成では、呼び出しタグ ( call.http.host、 call.database.connectionなど) を使用して、タグ・フィルター式によって呼び出しを識別できます。また、以下を行うことができます。
- カスタム・サービス名を使用して、それらをモニター対象外のサービスにマップします。
- または、モニター対象のインフラストラクチャー・エンティティーから作成された既存のデータベースまたはメッセージング・サービスにリンクします。
API を通じて、手動によるサービス設定の追加、更新、削除を行うことができます。
カスタム名のモニター対象外サービスへのマップ
Instana によってモニターされていないサービスへの呼び出しは、呼び出しタグを使用してサービスにマップされます。
例えば、 www.google.com などのサード・パーティー API への HTTP 呼び出しは、HTTP host ヘッダー (call.http.host タグ) に基づいてサービス www.google.com にマップされます。 www.google.fr または www.google.de への呼び出しは、HTTP の host ヘッダーが異なるため、異なるサービスにマップされます。
以下の手動サービス構成を追加することで、異なるドメインへのすべての呼び出しを「Google」という名前のサービスにマップできます。
{
"tagFilterExpression": {
"type": "TAG_FILTER",
"name": "call.http.host",
"value": "www.google.",
"operator": "STARTS_WITH",
"entity": "NOT_APPLICABLE"
},
"unmonitoredServiceName": "Google",
"description": "Map calls to different google domains to Google service",
"enabled": true
}
Linkは、監視対象のインフラストラクチャ・エンティティから作成された既存のデータベースまたはメッセージング・サービスに接続します
Instana によってデータベースやメッセージングシステムが監視されている場合、そのデータベースやメッセージングシステムへの呼び出しは、インフラストラクチャタグに基づいてサービスにマッピングする必要があります(例: MySQL@3306 on demo-host) インフラの連携のおかげで。 ただし、場合によってはプロキシーまたはロード・バランサーの存在により、Instana がそのコンポーネントをモニターまたはインスツルメントせず、要求のルーティング方法がわからないため、インフラストラクチャー相関が機能しないことがあります。 結果として、コールはコール・タグに基づいてサービスにマップされます (例: call.database.schema、 call.database.connection または call.messaging.address) は、宛先サービスがモニターされていないかのようになります。
この場合、呼び出しがないインフラストラクチャー・エンティティーから作成された別のサービスが検出されます。 次の手動サービス構成を使用して、呼び出しを目的の既存サービスにマップできます。
{
"tagFilterExpression": {
"type": "TAG_FILTER",
"name": "call.database.connection",
"value": "jdbc:mysql://10.128.0.1:3306",
"operator": "CONTAINS",
"entity": "NOT_APPLICABLE"
},
"existingServiceId": "a880d1875389b78b49b19387ef7ab815b313764f", // service id of "MySQL@3306 on demo-host" service, can be found in the "serviceId" url parameter of the service dashboard
"description": "Link calls to MySQL@3306 on demo-host service",
"enabled": true
}
「指定なし」サービス
Unspecified サービスは、 カスタム または 事前定義 のいずれのサービス・マッピング・ルールにもマッチングできなかった呼び出しに対するフォールバック・サービスとして機能する特別サービスです。
サービス・ダッシュボードから、エンドポイントのリストを使用して、 Analyze Calls にジャンプし、それらの呼び出しの内容を call.name でグループ化することができます。
通常、これは Instana のバックエンドで一時的に発生する問題であり、ごく短時間、呼び出しの宛先を基盤となるプロセスに関連付けることができない状態になります(例えば、プロセスが起動したばかりで Instana エージェントがまだそれを検出していない一方で、 Instana の計測機能がすでに呼び出しを捕捉している場合など)。そのため、サービスマッピングルールで使用される必要なタグを抽出することができません。 インフラストラクチャの相関関係とサービスマッピングの役割に関する詳細については、こちらをご覧ください。
ただし、時として、当社の既定のルールに不備が露呈することがあります。そのような場合は、ルールを改善するため、皆様からのご意見をお待ちしております。
なお、宛先をプロセスにリンクできず、Host ヘッダーが IP である HTTP 呼び出しは、「指定なし」サービスにマップされます。 その場合は、 X-Instana-Service ヘッダーを要求に追加 して、意味のあるサービス名を設定できます。
サービスフロー図
サービス・フロー・マップには、サービスのアップストリーム・サービスとダウンストリーム・サービスが表示されます。
サービスフロー図の制限事項
サービス・フロー・マップには、現在、20 秒以内に終了する短期実行同期トレースについてのみ正確なデータが表示されます。 それ以外のすべての場合、サービス・フロー・マップに不正確なデータが表示される可能性があります。
FAQ
サービスが何もリスト表示されないのはなぜですか?
リストされているサービスがないのは、エージェントが APM モードで実行されていない、あるいはエージェントがインストールされていないことによってレースが収集されていないか、エージェントはインストールされているが、選択した時間フレームにトレースが収集されなかった場合です。
エージェントがインストールされ、実行されているかどうかを確認するには、 「インフラストラクチャー」 をクリックして、エージェントが存在する可能性があるインフラストラクチャー・マップ上のすべてのホストを表示するか、 「詳細」 > 「エージェント」 をクリックして、インストールされているエージェントのリストを表示します。 エージェントが一覧に表示されていない場合は、 エージェントのインストール方法またはアプリケーション・パースペクティブの作成方法に関するドキュメントを参照してください。
なぜサービス名が時々変わるのですか?
サービス・マッピングは、インフラストラクチャー・データに依存します。 ただし、一部のシナリオでは、インフラストラクチャー・データを使用してトレース・データをエンリッチすることができません。 たとえば、 Instana エージェントや監視対象のプロセスが起動された直後は、トレースデータが十分に蓄積されていない可能性があります。 モニター対象アプリケーションが完全にインスツルメントされるまで、およびトレーサーとセンサーがデータの収集を開始するまで、しばらく時間がかかります。 すべてのセンサーがアクティブになる前に最初のいくつかのトレースが収集された場合、これらのトレースの一部またはすべてのインフラストラクチャー・データが欠落している可能性があります。 このような場合、使用されるサービス名はより一般的なものになります。例えば、` SpringBoot `というアプリケーション名ではなく、` HTTP `というホスト名になります。
Instana エージェントや監視対象プロセスの再起動に伴うサービスマッピングの問題を回避するために、「レジリエントマッピング」と呼ばれるメカニズムが使用されます。 Resilient マッピングは、呼び出しを正しいサービスにマップするためのインフラストラクチャー・データが使用できない場合に有効になります。 レジリエント・マッピングは、過去のマッピング結果のキャッシュを利用して、呼び出しを適切なサービスに割り当てることができます。 ただし、これにより、キャッシュに古いインフラストラクチャー・データが含まれている場合など、予期しないサービス名が発生する可能性があります。 回復力のあるキャッシュが更新されると、予期されるサービスが自動的に戻されます。