服務
Instana 追蹤並分析每個要求。 會自動探索服務及端點,且服務、端點及基礎架構之間的關係會自動產生關聯並儲存在我們的 動態圖形中。
根據從追蹤程式及感應器收集的資料,計算呼叫、延遲及錯誤呼叫的 KPI。 KPI 可協助您探索每個個別服務的性能,然後探索整個基礎架構的性能。
服務是應用程式監視的一部分,並提供系統的邏輯視圖。 服務衍生自基礎架構實體,例如主機、儲存器及處理程序。 送入呼叫會與 基礎架構實體 產生關聯,並使用基礎架構資料強化; 例如, Kubernetes Pod 標籤或 SpringBoot 應用程式名稱。 在此基礎架構鏈結處理步驟之後,服務對映步驟會對映強化的呼叫,以根據一組規則為每個呼叫產生服務名稱。 Instana 隨附一組廣泛的 預先定義規則 ,可自動為您產生最佳可能的服務名稱。 若要細部調整服務對映,您可以建立自己的自訂規則,請參閱 自訂服務對映。
預先定義的規則
下列規則會以降冪來考量。 當規則相符時,會建立個別服務。
| 規則 | 標籤 |
|---|---|
| 自訂服務規則 | 使用者定義的標籤 (請參閱 自訂服務對映) |
處理程序上環境變數 INSTANA_SERVICE_NAME 中的使用者定義服務名稱 |
{instana.service.name} |
透過 HTTP 標頭 X-Instana-Service 的使用者定義服務名稱 |
{call.http.header.x-instana-service} |
sdk span 資料中的使用者定義服務名稱 (設定 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.broker.name}:{ace.server.name} |
| 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 作為服務跨距的函數 |
{faas.functionname} |
| AWS EC 叢集 ID | {aws.ec.cluster.id} |
| AWS RDS 叢集名稱 | {aws.rds.cluster.name} |
| AWS 服務類型 DynamoDB | DynamoDB |
| AWS 服務類型 S3 | AWS S3 |
| Google Cloud 服務類型儲存體 | 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、MSIS) 部署名稱 | {call.deployment.name-1} |
| 沒有副檔名 (已剖析) 的應用程式儲存器 (JBoss、Tomcat、 WebLogic、 WebSphere、MSIS) 部署名稱 | {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.host} 上的 aerospike@{aerospike.port} |
| Neo4j 埠 | {host.name} 上的 Neo4j@{neo4j.port} |
| Memcached 埠 | {host.name} 上的 Memcached@{memcached.port} |
| 清漆埠 | {host.name} 上的 varnish@{varnish.port} |
| Clickhouse 埠 | 按一下 {host.name} 上的 @{clickhouse.httpPort} |
| MongoDB 資料庫名稱 | {host.name} 上的 MongoDB@{mongo.port} |
| Zookeeper 埠 | {host.name} 上的 Zookeeper@{zookeeper.clientPort} |
| Solr 版本 | Solr-{solr.version} on {host.name} |
| 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} |
| Kafka 版本 | Kafka- {host.name} 上的{kafka.version} |
| ActiveMQ 分配管理系統名稱 | {activemq.broker.name} |
| RabbitMQ 版本 | RabbitMQ- {host.name} 上的{rabbitmq.version} |
| RocketMQ 版本 | RocketMQ- {host.name} 上的{rocketmq.version} |
| Jar 檔中的 JVM 名稱 | {jvm.app.name-1} |
| JVM 名稱 | {jvm.app.name} |
| Node.js 應用程式與主機環境 | {nodejs.app.name} |
| Python Snapshot 名稱 | {python.app.name} |
| Ruby 名稱 | {ruby.app.name} |
| Go 名稱 | {go.app.name} |
| 可用時使用 host-header 的 PHP (已剖析) | {call.http.host-1} |
| PHP | PHP |
| PHP for PHP-FPM 工作者節點儲存區 | PHP |
| CLR 名稱 | {clr.app.name} |
| .Net 核心名稱 | {netcore.app.name} |
| Haskell 名稱 | {haskell.app.name} |
| 晶體名稱 | {crystal.app.name} |
| GCP 雲端執行服務 | {gcp.cloudrun.service.name} |
| 雲端基礎架構 ID | {cloud.id} |
| Shell 跨距 | 大量產生的處理程序 |
使用 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 |
| 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 跨距 | {call.messaging.address-1} |
| 使用位址的 Apache RocketMQ 跨距 | {call.messaging.address-1} |
| 使用位址的 IBM ACE 跨距 | {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 Script 跨距 (例如 CLI) | {call.php.script.name} |
| SDK 跨距 | SDK |
RPC (RMI) 跨距,無 object |
RMI |
| GraphQL 訂閱者跨距 | GraphQL 訂閱者 |
| 事件觸發程式 | {call.event.trigger} |
| 雲端 meta 資料服務 | 雲端 meta 資料服務 |
服務可以視為邏輯元件,提供公用 API 給系統的其餘部分,其中 API 由其端點組成。 正在監視服務,並發出及接收呼叫。 對服務的要求會導致對特定端點的單一呼叫。
服務可以獨立考量,或透過應用程式視景的角度來考量。 服務通常對映至一個「部署單元」,例如套件或儲存器。 如果此的多個實例 (例如,容器) 同時運作,則它們都對映至相同的邏輯服務。
服務類型會透過來自端點的繼承自動指派。 例如,如果服務同時具有 HTTP 及 BATCH 端點,則會同時指派 HTTP 及 BATCH 類型。 不論類型為何,服務的 KPI (呼叫、錯誤、延遲) 會顯示所有呼叫的聚集。
自訂服務對映
有四種自訂預設服務對映的方法可用。
- 建立自訂服務規則。 即使已配置服務 (例如,使用
INSTANA_SERVICE_NAME環境變數) ,此規則仍優先於所有其他規則。 - 套用
service.name標籤。 - 指定
INSTANA_SERVICE_NAME環境變數。 附註: 動態語言感應器中記載了這些限制。 - 指定 HTTP 標頭
X-Instana-Service。
建立自訂服務規則
- 從資訊看板中,按一下 應用程式 ,然後選取 服務 標籤。
- 按一下 配置服務
- 按一下 新增自訂服務規則
- 從下拉清單中,選取標籤。
使用自訂服務規則的一個原因是使用基礎架構元件的現有 meta 資訊。 例如,如果您使用網域特定資訊 (例如 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。 然後,您的服務會以主機區域值的連結命名,後面接著 Docker 標籤。 這樣您就可以區隔出兩個服務,例如 prod-myservice 和 dev-myservice。
透過使用特殊標籤 service.default_name,也可以使用自訂服務規則來延伸具有更多標籤的服務預設規則。 例如,若要依主機區域分割自動建立的服務,請使用標籤 service.default_name 和 host.zone來建立自訂服務規則。

套用呼叫標籤 service.name
若要建立特定呼叫的關聯,請註釋呼叫,這會在程式碼內啟用自訂對映。 為了搜尋及分析呼叫, service 註釋會變成 service.name 標籤。
若要新增呼叫註釋,可以使用下列選項:
JavaSDK: https://github.com/instana/instana-java-sdk (
SpanSupport.annotate).OpenTracing Java: https://github.com/instana/instana-java-opentracing (
span.setTag)。Python: https://github.com/instana/python-sensor (
span.set_tag).Ruby: https://github.com/instana/ruby-sensor (
span.set_tag)。PHP: https://github.com/instana/instana-php-opentracing (
\$span->setTag)。執行: https://github.com/instana/go-sensor/ (
span.SetTag)。Node.js: 請參閱 Node.js 配置文件 (程序層面的配置,不支援提供不同呼叫的個別名稱)。
Haskell: http://hackage.haskell.org/package/instana-haskell-trace-sdk (
InstanaSDK.setServiceName)。
如需 Java 追蹤 SDK 及服務命名的相關資訊,請參閱 轉換及命名 小節。
指定 INSTANA_SERVICE_NAME 環境變數
透過在處理程序上設定 INSTANA_SERVICE_NAME 環境變數,環境變數的值會用作作為該處理程序目的地之所有呼叫的服務名稱。
如需 Instana 所辨識之環境變數的相關資訊,請參閱 一般參照文件。
指定 X-Instana-Service HTTP 標頭
透過在呼叫上設定 X-Instana-Service HTTP 標頭,目的地 (接收 HTTP 要求的服務) 會以標頭中提供的值來標示。
附註: 不會自動收集 X-Instana-Service HTTP 標頭。 若要讓它運作,必須配置 Instana 代理程式,請參閱 「擷取自訂 HTTP 標頭」。
手動服務配置 (實驗性)
在某些情況下,對於某些呼叫,自動服務對映無法現成運作。 手動服務配置可以使用呼叫標籤 (例如 call.http.host、 call.database.connection) 來識別具有標籤過濾表示式的呼叫,並且您可以:
- 將它們對映至具有自訂服務名稱的未受監視服務,
- 或將它們鏈結至從受監視基礎架構實體建立的現有資料庫或傳訊服務。
手動服務配置可以透過 API來新增、更新或刪除。
對映至具有自訂名稱的未受監視服務
對未受 Instana 監視之服務的呼叫,會使用呼叫標籤來對映至服務。
例如,對協力廠商 API (例如 www.google.com ) 的 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
}
從受監視基礎架構實體建立之現有資料庫或傳訊服務的鏈結呼叫
如果 Instana 監視資料庫或傳訊系統,則該資料庫或傳訊系統的呼叫應該根據基礎架構標籤 (例如 MySQL@3306 on demo-host) 對映至服務。 感謝 基礎架構相關性。 但有時由於存在 Proxy 或負載平衡器,基礎架構相關性可能無法運作,因為 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 標頭新增至要求 ,以設定有意義的服務名稱。
常見問題 (FAQ)
為何我看不到任何列出的服務?
未列出任何服務的原因是代理程式未在 APM 模式下執行,未安裝任何代理程式; 因此未收集任何追蹤資料,或者如果您已安裝代理程式,則在您選取的時間範圍內未收集追蹤資料。
若要檢查代理程式是否已安裝且在執行中,請按一下 基礎架構 以檢視基礎架構對映上可能具有代理程式的任何主機,或按一下 其他 > 代理程式 以查看已安裝代理程式的清單。 如果未列出任何代理程式,請參閱有關如何安裝 代理程式 或建立 應用程式視景的說明文件。
為何服務名稱有時會變更?
服務對映依賴基礎架構資料。 不過,在某些情況下,無法使用基礎架構資料來強化追蹤資料。 例如,在 Instana 代理程式或受監視程序啟動之後不久,可能不會強化追蹤資料。 在受監視應用程式完全檢測之前,以及在追蹤程式和感應器開始收集資料之前,需要一些時間。 如果在所有感應器變成作用中之前收集前幾個追蹤資料,則這些追蹤資料可能遺漏部分或甚至所有基礎架構資料。 在這種情況下,使用的服務名稱不太具體; 例如, HTTP 主機,而不是 SpringBoot 應用程式名稱。
稱為回復對映的機制用來避免與 Instana 代理程式或受監視程序重新啟動相關的服務對映問題。 如果對正確服務進行對映呼叫的基礎架構資料無法使用,則備援對映會生效。 具復原力的對映可以使用先前對映結果的快取,將呼叫指派給正確的服務。 不過,這可能會導致非預期的服務名稱,例如,如果快取包含過時的基礎架構資料。 當回復快取更新時,預期的服務會自動回復。