blob: d7066c328d13a5521c14670896f6bb650721fae6 [file] [log] [blame]
<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="twitter:site" content="skywalking.apache.org">
<meta name="twitter:image:src" content="https://skywalking.apache.org/images/skywalking_400x400.png">
<meta property="og:image" content="https://skywalking.apache.org/images/skywalking_400x400.png">
<meta name="generator" content="Hugo 0.80.0" />
<script async src="https://www.googletagmanager.com/gtag/js?id=G-GR8N6PGRJ3"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);};
gtag('js', new Date());gtag('config', 'G-GR8N6PGRJ3');
</script>
<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">
<link rel="stylesheet" href="//at.alicdn.com/t/c/font_3007530_pvozs1rz2wn.css">
<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicons/favicon-16x16.png">
<link rel="manifest" href="/favicons/site.webmanifest">
<link rel="mask-icon" href="/favicons/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<title>Query Protocol | Apache SkyWalking</title><meta property="og:title" content="Query Protocol" />
<meta property="og:description" content="Query Protocol Query Protocol defines a set of APIs in GraphQL grammar to provide data query and interactive capabilities with SkyWalking native visualization tool or 3rd party system, including Web UI, CLI or private system.
Query protocol official repository, https://github.com/apache/skywalking-query-protocol.
All deprecated APIs are moved here.
Metadata Metadata contains concise information on all services and their instances, endpoints, etc. under monitoring. You may query the metadata in different ways.
V2 APIs Provide Metadata V2 query APIs since 9." />
<meta property="og:type" content="article" />
<meta property="og:url" content="/docs/main/next/en/api/query-protocol/" />
<meta itemprop="name" content="Query Protocol">
<meta itemprop="description" content="Query Protocol Query Protocol defines a set of APIs in GraphQL grammar to provide data query and interactive capabilities with SkyWalking native visualization tool or 3rd party system, including Web UI, CLI or private system.
Query protocol official repository, https://github.com/apache/skywalking-query-protocol.
All deprecated APIs are moved here.
Metadata Metadata contains concise information on all services and their instances, endpoints, etc. under monitoring. You may query the metadata in different ways.
V2 APIs Provide Metadata V2 query APIs since 9.">
<meta itemprop="wordCount" content="971">
<meta itemprop="keywords" content="" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Query Protocol"/>
<meta name="twitter:description" content="Query Protocol Query Protocol defines a set of APIs in GraphQL grammar to provide data query and interactive capabilities with SkyWalking native visualization tool or 3rd party system, including Web UI, CLI or private system.
Query protocol official repository, https://github.com/apache/skywalking-query-protocol.
All deprecated APIs are moved here.
Metadata Metadata contains concise information on all services and their instances, endpoints, etc. under monitoring. You may query the metadata in different ways.
V2 APIs Provide Metadata V2 query APIs since 9."/>
<link rel="preload" href="/scss/main.min.592235942cb3c9f3dd697382a4e7a1fad8e1c182dad2841bdce6b43b4a346ae8.css" as="style">
<link href="/scss/main.min.592235942cb3c9f3dd697382a4e7a1fad8e1c182dad2841bdce6b43b4a346ae8.css" rel="stylesheet" integrity="">
<link rel="stylesheet" href="/css/docSearch.css" />
<script src="/js/jquery-3.6.0.min.js"></script>
<title>Query Protocol | Apache SkyWalking</title>
</head>
<body class="td-page project-doc">
<header>
<nav class="js-navbar-scroll navbar navbar-expand flex-column flex-md-row td-navbar">
<div class="sidebar-button">
<i class="iconfont icon-menu"></i>
</div>
<a class="navbar-brand" href="/">
<span class="navbar-logo"><img width="130" src="/images/logo.svg" alt="SkyWalking"></span>
</a>
<div class="td-navbar-nav-scroll navbar-nav-wrapper" id="navigation">
<ul class="navbar-nav mt-lg-0">
<li class="nav-item mr-3 mb-lg-0">
<a class="nav-link" href="/docs" ><span>Projects and Docs</span></a>
</li>
<li class="nav-item mr-3 mb-lg-0">
<a class="nav-link" href="/events" ><span>Events</span></a>
</li>
<li class="nav-item mr-3 mb-lg-0">
<a class="nav-link" href="/blog" ><span>Blogs</span></a>
</li>
<li class="nav-item mr-3 mb-lg-0">
<a class="nav-link" href="/downloads" ><span>Downloads</span></a>
</li>
<li class="nav-item mr-3 mb-lg-0">
<a class="nav-link" href="/team" ><span>Team</span></a>
</li>
<li class="nav-item mr-3 mb-lg-0">
<a class="nav-link" href="/users" ><span>Users</span></a>
</li>
<li class="nav-item mr-3 mb-lg-0">
<span class="link dropdown blog">
<a class="link-name nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">中文资料</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="/zh/">博客</a>
<a class="dropdown-item" href="https://space.bilibili.com/390683219" target="_blank" rel="noopener noreferrer">
B站
</a>
<a class="dropdown-item" href="https://juejin.cn/user/13673577331607" target="_blank" rel="noopener noreferrer">
掘金
</a>
</div>
</span>
</li>
</ul>
</div>
<div class="navbar-nav d-none d-lg-block search-input-box">
<span class="link dropdown">
<a class="link-name dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Links
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="http://www.apache.org/">Apache Software Foundation</a>
<a class="dropdown-item" href="https://github.com/apache/skywalking/issues">GitHub Issue Tracker</a>
<a class="dropdown-item" href="https://github.com/apache/skywalking/discussions">Discussion</a>
<a class="dropdown-item" href="https://lists.apache.org/list.html?dev@skywalking.apache.org">Dev Mailing List</a>
<a class="dropdown-item" href="https://cwiki.apache.org/confluence/display/SKYWALKING/Home">WIKI</a>
<a class="dropdown-item" href="http://www.apache.org/licenses/">License</a>
<a class="dropdown-item" href="http://www.apache.org/events/current-event">Apache Events</a>
<a class="dropdown-item" href="http://www.apache.org/security/">Security</a>
<a class="dropdown-item" href="http://www.apache.org/foundation/sponsorship.html">Sponsor and Donate</a>
<a class="dropdown-item" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
<a class="dropdown-item" href="https://apache.org/foundation/policies/privacy.html">Privacy</a>
</div>
</span>
<div id="docsearch"></div>
</div>
</nav>
</header>
<div class="container-fluid td-outer">
<div class="td-main">
<div class="row flex-xl-nowrap">
<div class="col-12 col-md-3 col-xl-2 d-print-none scroll-bar td-sidebar">
<div class="description-wrapper">
<h5>
<img width="26" height="26" src="/images/project/skywalking.svg">
SkyWalking
</h5>
<p>SkyWalking primary repository and docs.</p>
</div>
<div class="version-wrapper">Version:
<select class="version-select">
<option selected value="next">
next
</option>
<option ZgotmplZ value="latest">
latest
</option>
<option ZgotmplZ value="v9.7.0">
v9.7.0
</option>
<option ZgotmplZ value="v9.6.0">
v9.6.0
</option>
<option ZgotmplZ value="v9.5.0">
v9.5.0
</option>
<option ZgotmplZ value="v9.4.0">
v9.4.0
</option>
<option ZgotmplZ value="v9.3.0">
v9.3.0
</option>
<option ZgotmplZ value="v9.2.0">
v9.2.0
</option>
<option ZgotmplZ value="v9.1.0">
v9.1.0
</option>
<option ZgotmplZ value="v9.0.0">
v9.0.0
</option>
</select>
</div>
<ul class="sidebar-menu">
<li>
<a href="/docs/main/next/readme">Welcome</a>
</li>
<li>
<a href="#">Concepts and Designs<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/concepts-and-designs/overview">Overview and Core concepts</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/project-goals">Project Goals</a>
</li>
<li>
<a href="#">Agents<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/concepts-and-designs/probe-introduction">Introduction</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/service-agent">Service Auto Instrument Agent</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/manual-sdk">Manual Instrument SDK</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/service-hierarchy">Service Hierarchy</a>
</li>
</ul>
</li>
<li>
<a href="#">Setup<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="#">Quick Start<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/backend-setup">Introduction</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-docker">Run with Docker</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-k8s">Run with Kubernetes</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/configuration-vocabulary">Configuration Vocabulary</a>
</li>
<li>
<a href="#">Advanced Setup<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/service-auto-grouping">Service Grouping</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-setting-override">Overriding Settings</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-ip-port">IP And Port Setting</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-init-mode">Backend Init Mode Startup</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-cluster">Cluster Management</a>
</li>
<li>
<a href="#">Choose Storage<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/backend-storage">Introduction</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/storages/h2">H2</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/storages/elasticsearch">Elasticsearch &amp; OpenSearch</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/storages/mysql">MySQL</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/storages/postgresql">PostgreSQL</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/storages/banyandb">BanyanDB(Alpha)</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-expose">Setup External Communication Channels</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/kafka-fetcher">Kafka Fetcher</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/advanced-deployment">Advanced Deployment Options</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/ttl">Data Lifecycle. Time To Live (TTL)</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/endpoint-grouping-rules">Group Parameterized Endpoints</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/dynamical-logging">Dynamical Logging</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/grpc-security">Security(SSL/TLS/mTLS)</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-load-balancer">Setup Load Balancer</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-telemetry">OAP Self Observability Telemetry</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-health-check">OAP Health Check</a>
</li>
</ul>
</li>
<li>
<a href="#">Tracing<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/trace-sampling">Trace Sampling</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/slow-db-statement">Detect Slow Database Statement</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/slow-cache-command">Detect Slow Cache Command</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/mq">Message Queue Performance</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/uninstrumented-gateways">Uninstrumented Gateways</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/zipkin-trace">Zipkin Trace</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/otlp-trace">OpenTelemetry Trace</a>
</li>
</ul>
</li>
<li>
<a href="#">Metrics<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/guides/backend-oal-scripts">OAL Scripts</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/opentelemetry-receiver">OpenTelemetry Metrics</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/aws-firehose-receiver">AWS CloudWatch Metrics</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-zabbix">Zabbix Metrics</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-meter">Meter Analysis</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/telegraf-receiver">Telegraf Metrics</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/apdex-threshold">Apdex Threshold</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/micrometer-observations">Spring MicroMeter Observations Analysis</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-alarm">Alerting</a>
</li>
</ul>
</li>
<li>
<a href="#">Logging<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="#">Persistent Logging<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/filelog-native">Native Logging from Files</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/log-agent-native">Native Logging from Agents</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/log-otlp">OpenTelemetry Logging</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/log-analyzer">Log Analysis</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/on-demand-pod-log">On Demand Pod Logs</a>
</li>
</ul>
</li>
<li>
<a href="#">Profiling<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/backend-trace-profiling">Tracing Profiling</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-ebpf-profiling">eBPF Profiling</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-continuous-profiling">Continuous Profiling</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/event/">Event</a>
</li>
<li>
<a href="#">Extension<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/exporter">Exporter</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/dynamic-config">Dynamic Configuration</a>
</li>
<li>
<a href="#">AI Pipeline<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/ai-pipeline/introduction">Introduction</a>
</li>
<li>
<a href="/docs/main/next/en/setup/ai-pipeline/http-restful-uri-pattern">HTTP Restful URI recognition</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#">UI Setup<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="#">Native UI<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/ui-setup">Setup</a>
</li>
<li>
<a href="/docs/main/next/en/ui/readme">Customization</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/ui-grafana">Grafana UI</a>
</li>
</ul>
</li>
<li>
<a href="#">Official Dashboards<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="#">General Service<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/service-agent/server-agents">Server Agents</a>
</li>
<li>
<a href="/docs/main/next/en/setup/service-agent/agent-compatibility">Compatibility</a>
</li>
<li>
<a href="/docs/main/next/en/setup/service-agent/virtual-database">Virtual Database</a>
</li>
<li>
<a href="/docs/main/next/en/setup/service-agent/virtual-cache">Virtual Cache</a>
</li>
<li>
<a href="/docs/main/next/en/setup/service-agent/virtual-mq">Virtual MQ</a>
</li>
</ul>
</li>
<li>
<a href="#">Service Mesh<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/envoy/als_setting">Observe Service Mesh through Access Log Service (ALS)</a>
</li>
<li>
<a href="/docs/main/next/en/setup/zipkin/tracing">Observe Service Mesh through Zipkin traces</a>
</li>
<li>
<a href="/docs/main/next/en/setup/istio/readme">Observe Control Plane (Istio)</a>
</li>
<li>
<a href="/docs/main/next/en/setup/envoy/metrics_service_setting">Observe Data Plane (Envoy)</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-k8s-network-monitoring">Profile Pod&#39;s Network</a>
</li>
</ul>
</li>
<li>
<a href="#">Kubernetes<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/backend-k8s-monitoring">Observe Kubernetes</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-k8s-monitoring-metrics-cadvisor">kube-state-metrics &#43; cAdvisor</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-k8s-monitoring-rover">Rover</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-k8s-network-monitoring">Profile Pod&#39;s Network</a>
</li>
</ul>
</li>
<li>
<a href="#">Infrastructure Monitoring<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/backend-vm-monitoring">Linux Monitoring</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-win-monitoring">Windows Monitoring</a>
</li>
</ul>
</li>
<li>
<a href="#">AWS Cloud Monitoring<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/backend-aws-eks-monitoring">EKS Monitoring</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-aws-s3-monitoring">S3 Monitoring</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-aws-dynamodb-monitoring">AWS DynamoDB</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-aws-api-gateway-monitoring">AWS API Gateway</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/setup/service-agent/browser-agent">Browser Monitoring</a>
</li>
<li>
<a href="#">Gateway Monitoring<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/backend-nginx-monitoring">Nginx Monitoring</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-apisix-monitoring">APISIX Monitoring</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-aws-api-gateway-monitoring">AWS API Gateway</a>
</li>
</ul>
</li>
<li>
<a href="#">Database Monitoring<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/backend-mysql-monitoring">MySQL/MariaDB Server</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-postgresql-monitoring">PostgreSQL Server</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-aws-dynamodb-monitoring">AWS DynamoDB</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-redis-monitoring">Redis</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-elasticsearch-monitoring">Elasticsearch</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-mongodb-monitoring">MongoDB</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-bookkeeper-monitoring">BookKeeper</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-clickhouse-monitoring">ClickHouse</a>
</li>
</ul>
</li>
<li>
<a href="#">MQ Monitoring<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/backend-rabbitmq-monitoring">RabbitMQ</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-kafka-monitoring">Kafka</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-pulsar-monitoring">Pulsar</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-rocketmq-monitoring">RocketMQ</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-activemq-monitoring">ActiveMQ</a>
</li>
</ul>
</li>
<li>
<a href="#">Self Observability<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/setup/backend/dashboards-so11y">OAP self telemetry</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/dashboards-so11y-satellite">Satellite self telemetry</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="https://github.com/apache/skywalking-cli">CLI Setup</a>
</li>
<li>
<a href="/docs/main/next/en/setup/backend/backend-data-generator">Mock Data Generator Setup</a>
</li>
</ul>
</li>
<li>
<a href="#">APIs<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="#">Telemetry APIs/Protocols<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="#">Tracing<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/api/trace-data-protocol-v3">Spans APIs</a>
</li>
<li>
<a href="/docs/main/next/en/api/x-process-propagation-headers-v3">Tracing Context Propagation</a>
</li>
<li>
<a href="/docs/main/next/en/api/x-process-correlation-headers-v1">Tracing Correlation Correlation</a>
</li>
</ul>
</li>
<li>
<a href="#">Metrics APIs<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/api/meter">Meter APIs</a>
</li>
<li>
<a href="/docs/main/next/en/api/browser-protocol">Browser performance APIs</a>
</li>
<li>
<a href="/docs/main/next/en/api/jvm-protocol">JVM metrics APIs</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/api/log-data-protocol">Logging</a>
</li>
<li>
<a href="/docs/main/next/en/api/instance-properties">Service Instance Properties APIs</a>
</li>
<li>
<a href="/docs/main/next/en/api/event">Event</a>
</li>
<li>
<a href="/docs/main/next/en/api/profiling-protocol">Profiling</a>
</li>
</ul>
</li>
<li>
<a href="#">Query APIs<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="#">GraphQL APIs<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/api/query-protocol">GraphQL APIs</a>
</li>
<li>
<a href="/docs/main/next/en/api/metrics-query-expression">MQE Syntax</a>
</li>
<li>
<a href="/docs/main/next/en/api/query-protocol-deprecated">Deprecated APIs</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/api/promql-service">PromQL APIs</a>
</li>
<li>
<a href="/docs/main/next/en/api/logql-service">LogQL APIs</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#">Customization<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/concepts-and-designs/backend-overview">Overview</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/oal">Analysis Traces and Mesh Traffic</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/mal">Analysis Metrics and Meters</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/lal">Analysis Logs</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/profiling">Profiling</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/service-hierarchy-configuration">Service Hierarchy Configuration</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/security/readme">Security Notice</a>
</li>
<li>
<a href="#">Debugging<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/debugging/config_dump">Scratch The OAP Config Dump</a>
</li>
</ul>
</li>
<li>
<a href="#">Academy<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/academy/scaling-with-apache-skywalking">Scaling SkyWalking server automatically in kubernetes</a>
</li>
<li>
<a href="/docs/main/next/en/papers/stam">STAM Paper, Streaming Topology Analysis Method</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/sdk-profiling">SDK Profiling to Fix the Blind Spot</a>
</li>
<li>
<a href="/docs/main/next/en/concepts-and-designs/ebpf-cpu-profiling">eBPF CPU Profiling to pinpoint Service Mesh Critical Performance Impact</a>
</li>
<li>
<a href="/docs/main/next/en/academy/diagnose-service-mesh-network-performance-with-ebpf">Diagnose Service Mesh Network Performance with eBPF</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/faq/readme">FAQs</a>
</li>
<li>
<a href="#">Contributing Guides<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/guides/community">Contact the community</a>
</li>
<li>
<a href="/docs/main/next/en/guides/asf/committer">Become A Committer</a>
</li>
<li>
<a href="/docs/main/next/en/guides/how-to-release/">Release Guide</a>
</li>
<li>
<a href="/docs/main/next/en/guides/how-to-build">Compiling Guide</a>
</li>
<li>
<a href="#">Contribute<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/guides/it-guide">Integration Tests</a>
</li>
<li>
<a href="/docs/main/next/en/guides/benchmark">Benchmark Tests</a>
</li>
<li>
<a href="/docs/main/next/en/guides/e2e">End to End Tests</a>
</li>
<li>
<a href="#">Project Extensions<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/guides/component-library-settings">Component Library Settings</a>
</li>
<li>
<a href="/docs/main/next/en/guides/source-extension">Extend An OAL Source</a>
</li>
</ul>
</li>
<li>
<a href="#">Dependencies<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/guides/dependencies">Project Dependencies Check</a>
</li>
<li>
<a href="/docs/main/next/en/guides/how-to-bump-up-zipkin">Zipkin dependency</a>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/guides/i18n">I18n</a>
</li>
</ul>
</li>
</ul>
</li>
<li>
<a href="/docs/main/next/en/swip/readme">SWIP</a>
</li>
<li>
<a href="#">Changelog<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/changes/changes">Current Version</a>
</li>
<li>
<a href="#">9.x Releases<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/changes/changes-9.6.0">9.6.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-9.5.0">9.5.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-9.4.0">9.4.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-9.3.0">9.3.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-9.2.0">9.2.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-9.1.0">9.1.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-9.0.0">9.0.0</a>
</li>
</ul>
</li>
<li>
<a href="#">Archived Releases<i class="iconfont icon-arrow-right pull-right"></i></a>
<ul class="sidebar-submenu">
<li>
<a href="/docs/main/next/en/changes/changes-8.9.1">8.9.1</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.9.0">8.9.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.8.1">8.8.1</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.8.0">8.8.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.7.0">8.7.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.6.0">8.6.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.5.0">8.5.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.4.0">8.4.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.3.0">8.3.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.2.0">8.2.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.1.0">8.1.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.0.1">8.0.1</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-8.0.0">8.0.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-7.0.0">7.0.0</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-6.x">6.x</a>
</li>
<li>
<a href="/docs/main/next/en/changes/changes-5.x">5.x</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<script src="/js/sidebar-menu.js"></script>
<script>
(function (){
$.sidebarMenu($('.sidebar-menu'))
var path = window.location.pathname;
var hash = window.location.hash;
var $a = $('.sidebar-menu a')
$a.each(function (e){
if($(this).attr('href')+'/' === path || $(this).attr('href').replace('#','/#') === path+hash){
$(this).parents('li').addClass('active').show()
}
})
$a.on('click',function (){
var url = $(this).attr('href')
if(url!=='#'){
window.location.href = url
}
})
})()
</script>
<div class="commit-id">Commit Id: a636013</div>
</div>
<main class="col-12 col-md-9 col-xl-8 pl-md-5 pr-md-4" role="main">
<i class="iconfont icon-menu-doc doc-menu-button"></i>
<div class="td-content">
<h1 id="query-protocol">Query Protocol</h1>
<p>Query Protocol defines a set of APIs in GraphQL grammar to provide data query and interactive capabilities with SkyWalking
native visualization tool or 3rd party system, including Web UI, CLI or private system.</p>
<p>Query protocol official repository, <a href="https://github.com/apache/skywalking-query-protocol">https://github.com/apache/skywalking-query-protocol</a>.</p>
<p>All deprecated APIs are moved <a href="./../query-protocol-deprecated">here</a>.</p>
<h3 id="metadata">Metadata</h3>
<p>Metadata contains concise information on all services and their instances, endpoints, etc. under monitoring.
You may query the metadata in different ways.</p>
<h4 id="v2-apis">V2 APIs</h4>
<p>Provide Metadata V2 query APIs since 9.0.0, including Layer concept.</p>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Read all available layers</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># UI could use this list to determine available dashboards/panels</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># The available layers would change with time in the runtime, because new service could be detected in any time.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># This list should be loaded periodically.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>listLayers:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">String</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Read the service list according to layer.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>listServices(layer:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">Service</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Find service according to given ID. Return null if not existing.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getService(serviceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Service</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Search and find service according to given name. Return null if not existing.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>findService(serviceName:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Service</span><span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Read service instance list.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>listInstances(duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!,<span style="color:#bbb"> </span>serviceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">ServiceInstance</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Search and find service instance according to given ID. Return null if not existing.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getInstance(instanceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ServiceInstance</span><span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Search and find matched endpoints according to given service and keyword(optional)</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># If no keyword, randomly choose endpoint based on `limit` value.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>findEndpoint(keyword:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>,<span style="color:#bbb"> </span>serviceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>limit:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Int</span>!):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">Endpoint</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span>getEndpointInfo(endpointId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EndpointInfo</span><span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Read process list.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>listProcesses(duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!,<span style="color:#bbb"> </span>instanceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">Process</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Find process according to given ID. Return null if not existing.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getProcess(processId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Process</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Get the number of matched processes through serviceId, labels</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Labels: the matched process should contain all labels</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic">#</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># The return is not a precise number, the process has its lifecycle, as it reboots and shutdowns with time.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># The return number just gives an abstract of the scale of profiling that would be applied.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>estimateProcessScale(serviceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>labels:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">String</span>!]!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Long</span>!<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getTimeInfo:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">TimeInfo</span><span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><h3 id="topology">Topology</h3>
<p>The topology and dependency graphs among services, instances and endpoints. Includes direct relationships or global maps.</p>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Query the global topology</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># When layer is specified, the topology of this layer would be queried</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getGlobalTopology(duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!,<span style="color:#bbb"> </span>layer:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Topology</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Query the topology, based on the given service</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getServiceTopology(serviceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Topology</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Query the topology, based on the given services.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># `#getServiceTopology` could be replaced by this.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getServicesTopology(serviceIds:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">ID</span>!]!,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Topology</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Query the instance topology, based on the given clientServiceId and serverServiceId</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getServiceInstanceTopology(clientServiceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>serverServiceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ServiceInstanceTopology</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Query the topology, based on the given endpoint</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getEndpointTopology(endpointId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Topology</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># v2 of getEndpointTopology</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getEndpointDependencies(endpointId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EndpointTopology</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Query the topology, based on the given instance</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getProcessTopology(serviceInstanceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ProcessTopology</span><span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><h3 id="metrics">Metrics</h3>
<p>Metrics query targets all objects defined in <a href="../../concepts-and-designs/oal">OAL script</a> and <a href="../../concepts-and-designs/mal">MAL</a>.</p>
<h4 id="v3-apis">V3 APIs</h4>
<p>Provide Metrics V3 query APIs since 9.5.0, including metadata and MQE.
SkyWalking Metrics Query Expression(MQE) is an extension query mechanism. MQE allows users to do simple query-stage calculation like well known PromQL
through GraphQL. The expression&rsquo;s syntax can refer to <a href="./../metrics-query-expression">here</a>.</p>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Metrics definition metadata query. Response the metrics type which determines the suitable query methods.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#458;font-weight:bold">OfMetrics</span>(name:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">MetricsType</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Get the list of all available metrics in the current OAP server.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Param, regex, could be used to filter the metrics by name.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>listMetrics(regex:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">MetricDefinition</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span>execExpression(expression:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!,<span style="color:#bbb"> </span>entity:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Entity</span>!,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ExpressionResult</span>!<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ExpressionResult</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span>:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ExpressionResultType</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># When the type == TIME_SERIES_VALUES, the results would be a collection of MQEValues.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># In other legal type cases, only one MQEValues is expected in the array.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">results</span>:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">MQEValues</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># When type == ExpressionResultType.UNKNOWN,</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># the error message includes the expression resolving errors.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>error:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span><span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">enum</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ExpressionResultType</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Can&#39;t resolve the type of the given expression.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>UNKNOWN<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># A single value</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>SINGLE_VALUE<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># A collection of time-series values.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># The value could have labels or not.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>TIME_SERIES_VALUES<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># A collection of aggregated values through metric sort function</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>SORTED_LIST<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># A collection of sampled records.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># When the original metric type is sampled records</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>RECORD_LIST<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><h3 id="logs">Logs</h3>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Return true if the current storage implementation supports fuzzy query for logs.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>supportQueryLogsByKeywords:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Boolean</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">Logs</span>(condition:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">LogQueryCondition</span>):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Logs</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Test the logs and get the results of the LAL output.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>test(requests:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">LogTestRequest</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">LogTestResponse</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Read the list of searchable keys</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">LogTagAutocompleteKeys</span>(duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):[<span style="color:#458;font-weight:bold">String</span>!]<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Search the available value options of the given key.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">LogTagAutocompleteValues</span>(tagKey:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!<span style="color:#bbb"> </span>,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):[<span style="color:#458;font-weight:bold">String</span>!]<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><p>Log implementations vary between different database options. Some search engines like ElasticSearch and OpenSearch can support
full log text fuzzy queries, while others do not due to considerations related to performance impact and end user experience.</p>
<p><code>test</code> API serves as the debugging tool for native LAL parsing.</p>
<h3 id="trace">Trace</h3>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Search segment list with given conditions</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">BasicTraces</span>(condition:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">TraceQueryCondition</span>):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">TraceBrief</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Read the specific trace ID with given trace ID</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">Trace</span>(traceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Trace</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Read the list of searchable keys</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">TraceTagAutocompleteKeys</span>(duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):[<span style="color:#458;font-weight:bold">String</span>!]<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Search the available value options of the given key.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">TraceTagAutocompleteValues</span>(tagKey:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!<span style="color:#bbb"> </span>,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):[<span style="color:#458;font-weight:bold">String</span>!]<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><p>Trace query fetches trace segment lists and spans of given trace IDs.</p>
<h3 id="alarm">Alarm</h3>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span>getAlarmTrend(duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">AlarmTrend</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span>getAlarm(duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>!,<span style="color:#bbb"> </span>scope:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Scope</span>,<span style="color:#bbb"> </span>keyword:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>,<span style="color:#bbb"> </span>paging:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Pagination</span>!,<span style="color:#bbb"> </span>tags:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">AlarmTag</span>]):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Alarms</span><span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><p>Alarm query identifies alarms and related events.</p>
<h3 id="event">Event</h3>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">Events</span>(condition:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EventQueryCondition</span>):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Events</span><span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><p>Event query fetches the event list based on given sources and time range conditions.</p>
<h3 id="profiling">Profiling</h3>
<p>SkyWalking offers two types of <a href="../../concepts-and-designs/profiling">profiling</a>, in-process and out-process, allowing users to create tasks and check their execution status.</p>
<h4 id="in-process-profiling">In-process profiling</h4>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Mutation</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># crate new profile task</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>createProfileTask(creationRequest:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ProfileTaskCreationRequest</span>):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ProfileTaskCreationResult</span>!<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># query all task list, order by ProfileTask#startTime descending</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getProfileTaskList(serviceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>,<span style="color:#bbb"> </span>endpointName:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">ProfileTask</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># query all task logs</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getProfileTaskLogs(taskID:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">ProfileTaskLog</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># query all task profiled segment list</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getProfileTaskSegments(taskID:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">ProfiledTraceSegments</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># analyze multiple profiled segments, start and end time use timestamp(millisecond)</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getSegmentsProfileAnalyze(queries:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">SegmentProfileAnalyzeQuery</span>!]!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ProfileAnalyzation</span>!<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><h4 id="out-process-profiling">Out-process profiling</h4>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Mutation</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># create a new eBPF fixed time profiling task</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>createEBPFProfilingFixedTimeTask(request:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EBPFProfilingTaskFixedTimeCreationRequest</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EBPFProfilingTaskCreationResult</span>!<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># create a new eBPF network profiling task</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>createEBPFNetworkProfiling(request:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EBPFProfilingNetworkTaskRequest</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EBPFProfilingTaskCreationResult</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># keep alive the eBPF profiling task</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>keepEBPFNetworkProfiling(taskId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EBPFNetworkKeepProfilingResult</span>!<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># query eBPF profiling data for prepare create task</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">PrepareCreateEBPFProfilingTaskData</span>(serviceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EBPFProfilingTaskPrepare</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># query eBPF profiling task list</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># query `triggerType == FIXED_TIME` when triggerType is absent</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">EBPFProfilingTasks</span>(serviceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>,<span style="color:#bbb"> </span>serviceInstanceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>,<span style="color:#bbb"> </span>targets:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">EBPFProfilingTargetType</span>!],<span style="color:#bbb"> </span>triggerType:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EBPFProfilingTriggerType</span>,<span style="color:#bbb"> </span>duration:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span>):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">EBPFProfilingTask</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># query schedules from profiling task</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">query</span><span style="color:#458;font-weight:bold">EBPFProfilingSchedules</span>(taskId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!):<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">EBPFProfilingSchedule</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># analyze the profiling schedule</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># aggregateType is &#34;EBPFProfilingAnalyzeAggregateType#COUNT&#34; as default. </span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>analysisEBPFProfilingResult(scheduleIdList:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">ID</span>!]!,<span style="color:#bbb"> </span>timeRanges:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">EBPFProfilingAnalyzeTimeRange</span>!]!,<span style="color:#bbb"> </span>aggregateType:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EBPFProfilingAnalyzeAggregateType</span>):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">EBPFProfilingAnalyzation</span>!<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><h3 id="on-demand-pod-logs">On-Demand Pod Logs</h3>
<p>Provide APIs to query <a href="../../setup/backend/on-demand-pod-log">on-demand pod logs</a> since 9.1.0.</p>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span>listContainers(condition:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">OndemandContainergQueryCondition</span>):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">PodContainers</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">on</span>demandPodLogs(condition:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">OndemandLogQueryCondition</span>):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Logs</span><span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><h3 id="hierarchy">Hierarchy</h3>
<p>Provide <a href="../../concepts-and-designs/service-hierarchy">Hierarchy</a> query APIs since 10.0.0, including service and instance hierarchy.</p>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#000;font-weight:bold">extend</span><span style="color:#bbb"> </span><span style="color:#000;font-weight:bold">type</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Query</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Query the service hierarchy, based on the given service. Will recursively return all related layers services in the hierarchy.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getServiceHierarchy(serviceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>layer:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ServiceHierarchy</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># Query the instance hierarchy, based on the given instance. Will return all direct related layers instances in the hierarchy, no recursive.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>getInstanceHierarchy(instanceId:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">ID</span>!,<span style="color:#bbb"> </span>layer:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!):<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">InstanceHierarchy</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span><span style="color:#998;font-style:italic"># List layer hierarchy levels. The layer levels are defined in the `hierarchy-definition.yml`.</span><span style="color:#bbb">
</span><span style="color:#bbb"> </span>listLayerLevels:<span style="color:#bbb"> </span>[<span style="color:#458;font-weight:bold">LayerLevel</span>!]!<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div><h2 id="condition">Condition</h2>
<h3 id="duration">Duration</h3>
<p>Duration is a widely used parameter type as the APM data is time-related. See the following for more details.
Step relates to precision.</p>
<div class="highlight"><pre style="background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-graphql" data-lang="graphql"><span style="color:#998;font-style:italic"># The Duration defines the start and end time for each query operation.</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># Fields: `start` and `end`</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># represents the time span. And each of them matches the step.</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># ref https://www.ietf.org/rfc/rfc3339.txt</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># The time formats are</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># `SECOND` step: yyyy-MM-dd HHmmss</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># `MINUTE` step: yyyy-MM-dd HHmm</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># `HOUR` step: yyyy-MM-dd HH</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># `DAY` step: yyyy-MM-dd</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># `MONTH` step: yyyy-MM</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># Field: `step`</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># represents the accurate time point.</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># e.g.</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># if step==HOUR , start=2017-11-08 09, end=2017-11-08 19</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># then</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># metrics from the following time points expected</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># 2017-11-08 9:00 -&gt; 2017-11-08 19:00</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#998;font-style:italic"># there are 11 time points (hours) in the time span.</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#000;font-weight:bold">input</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Duration</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span>start:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span>end:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">String</span>!<span style="color:#bbb">
</span><span style="color:#bbb"> </span>step:<span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Step</span>!<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span><span style="color:#bbb">
</span><span style="color:#bbb"></span><span style="color:#000;font-weight:bold">enum</span><span style="color:#bbb"> </span><span style="color:#458;font-weight:bold">Step</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
</span><span style="color:#bbb"> </span>MONTH<span style="color:#bbb">
</span><span style="color:#bbb"> </span>DAY<span style="color:#bbb">
</span><span style="color:#bbb"> </span>HOUR<span style="color:#bbb">
</span><span style="color:#bbb"> </span>MINUTE<span style="color:#bbb">
</span><span style="color:#bbb"> </span>SECOND<span style="color:#bbb">
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
</span></code></pre></div>
</div>
<div>
<div id="edit-github">
<svg
fill="currentColor"
height="20"
width="20"
viewBox="0 0 40 40"
aria-hidden="true"
style="margin-right: 0.1em;vertical-align: sub; color: #3176d9">
<g>
<path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z" />
</g>
</svg>
<a class="github-link" title="Edit this page" href="" target="_blank">
<span id="edit-github-text">Edit this page</span>
</a>
</div>
</div>
<script>
let reg = /\/docs\/[a-zA-Z\-]+\/([\w|\.]+)\//;
let res = reg.exec(location.href);
let version = res && res[1];
let editGithub = document.getElementById("edit-github");
if (editGithub) {
editGithub.style.display = version === "next" ? "block" : "none";
}
if (version === "next") {
reg = /\/docs\/(.+?)\//;
let repoRes = reg.exec(location.href);
let repo = repoRes && repoRes[1];
if (repo === "main") {
repo = "skywalking"
}
reg = /\/next\/(.+)/;
let docs = reg.exec(location.href);
let docsUrl = docs && docs[1];
if (docsUrl) {
docsUrl = docsUrl.replace(/readme/i, 'README');
}
let prefixUrl = "https://github.com/apache/" + repo + "/blob/master/docs/";
let editGithubLink = document.querySelector("#edit-github a");
if (editGithubLink) {
editGithubLink.href = prefixUrl + docsUrl.replace(/\/$/, ".md");
}
}
</script>
</main>
<div id="toc" class="d-none d-xl-block col-xl-2 td-toc d-print-none">
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
</div>
<nav id="TableOfContents">
<ul>
<li><a href="#query-protocol">Query Protocol</a>
<ul>
<li>
<ul>
<li><a href="#metadata">Metadata</a></li>
<li><a href="#topology">Topology</a></li>
<li><a href="#metrics">Metrics</a></li>
<li><a href="#logs">Logs</a></li>
<li><a href="#trace">Trace</a></li>
<li><a href="#alarm">Alarm</a></li>
<li><a href="#event">Event</a></li>
<li><a href="#profiling">Profiling</a></li>
<li><a href="#on-demand-pod-logs">On-Demand Pod Logs</a></li>
<li><a href="#hierarchy">Hierarchy</a></li>
</ul>
</li>
<li><a href="#condition">Condition</a>
<ul>
<li><a href="#duration">Duration</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
<script>
$(function () {
var $toc = $("#TableOfContents");
if (!$toc || !$toc.length) {
return;
}
var top = $toc.offset().top;
$(window).on("scroll", debounce(setTop, 100))
$(window).on("scroll", debounce(addActive, 30))
function addActive() {
var scrollValue = $(window).scrollTop();
var topEle = null;
$.each($('main h1, main h2, main h3'), function (index, item) {
if ($(item).offset().top - 70 > scrollValue) {
return
}
if (!topEle) {
topEle = item
} else if ($(item).offset().top >= $(topEle).offset().top) {
topEle = item
}
if (topEle) {
var id = $(item).attr('id');
$toc.find('a').removeClass("active").end().find('a[href="' + '#' + id + '"]').addClass("active")
}
})
}
function setTop() {
var scrollValue = $(window).scrollTop();
if (scrollValue >= top - 70) {
$toc.addClass('fixed')
} else {
$toc.removeClass('fixed')
}
}
function debounce(fn, wait) {
var timeout = null;
return function () {
clearTimeout(timeout);
timeout = setTimeout(() => {
fn.apply(this, arguments);
}, wait);
};
}
})
</script>
</div>
</div>
</div>
<footer class="py-5 sky-row">
<div class="container-fluid text-center">
<div class="">
<ul class="list-inline mb-0">
<li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="Twitter" aria-label="Twitter">
<a class="text-color" target="_blank" href="https://twitter.com/asfskywalking">
<i class="iconfont icon-twitter"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="Slack" aria-label="Slack">
<a class="text-color" target="_blank" href="http://s.apache.org/slack-invite">
<i class="iconfont icon-slack"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="Mailing list" aria-label="Mailing list">
<a class="text-color" target="_blank" href="https://lists.apache.org/list.html?dev@skywalking.apache.org">
<i class="iconfont icon-email"></i>
</a>
</li>
<li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="GitHub" aria-label="GitHub">
<a class="text-color" target="_blank" href="https://github.com/apache/skywalking">
<i class="iconfont icon-github"></i>
</a>
</li>
</ul>
</div>
<div class="">
<small class="text-color">&copy; 2017 - 2024 The Apache Software Foundation All Rights Reserved</small>
</div>
<div class="">
<small class="text-color mt-4">Apache SkyWalking, SkyWalking, Apache, the Apache feather logo, and the Apache SkyWalking project logo are either registered trademarks or trademarks of the Apache Software Foundation.</small>
</div>
</div>
</footer>
</div>
<div id="popup">
<div class="mask">
<img src=""/>
</div>
</div>
<div class="sidebar-mask"></div>
<div class="sidebar">
<nav class="nav-links">
<div class="nav-item"><a href="/docs/" class="nav-link">Projects and Documentation</a></div>
<div class="nav-item"><a href="/events/" class="nav-link">Events</a></div>
<div class="nav-item"><a href="/blog/" class="nav-link router-link-exact-active router-link-active">Blog</a>
</div>
<div class="nav-item"><a href="/downloads/" class="nav-link">Downloads</a></div>
<div class="nav-item"><a href="/team/" class="nav-link">Team</a></div>
<div class="nav-item"><a href="/users/" class="nav-link">Users</a></div>
<div class="nav-item">
<div class="dropdown-wrapper open">
<a class="dropdown-title"><span>中文资料</span>
<span class="arrow down"></span>
</a>
<ul class="nav-dropdown">
<li class="dropdown-item">
<a href="/zh/" class="nav-link external">博客</a>
</li>
<li class="dropdown-item">
<a href="https://space.bilibili.com/390683219" target="_blank"
rel="noopener noreferrer" class="nav-link external">B站</a>
</li>
<li class="dropdown-item">
<a href="https://juejin.cn/user/13673577331607" target="_blank"
rel="noopener noreferrer" class="nav-link external">掘金</a>
</li>
</ul>
</div>
</div>
<div class="nav-item">
<div class="dropdown-wrapper open">
<a class="dropdown-title">
<span>Links</span>
<span class="arrow down"></span>
</a>
<ul class="nav-dropdown">
<li class="dropdown-item">
<a href="http://www.apache.org/" target="_blank"
rel="noopener noreferrer" class="nav-link external">
Apache Software Foundation
</a>
</li>
<li class="dropdown-item">
<a href="https://github.com/apache/skywalking/issues"
target="_blank" rel="noopener noreferrer"
class="nav-link external">
GitHub Issue Tracker
</a>
</li>
<li class="dropdown-item">
<a href="https://lists.apache.org/list.html?dev@skywalking.apache.org" target="_blank"
rel="noopener noreferrer" class="nav-link external">
Dev Mailing List
</a>
</li>
<li class="dropdown-item">
<a href="http://www.apache.org/licenses/" target="_blank"
rel="noopener noreferrer" class="nav-link external">
License
</a>
</li>
<li class="dropdown-item">
<a href="http://www.apache.org/events/current-event"
target="_blank" rel="noopener noreferrer"
class="nav-link external">
Apache Events
</a>
</li>
<li class="dropdown-item">
<a href="http://www.apache.org/security/" target="_blank"
rel="noopener noreferrer" class="nav-link external">
Security
</a>
</li>
<li class="dropdown-item">
<a href="http://www.apache.org/foundation/sponsorship.html"
target="_blank" rel="noopener noreferrer"
class="nav-link external">
Sponsorship and Donate
</a>
</li>
<li class="dropdown-item">
<a href="http://www.apache.org/foundation/thanks.html"
target="_blank" rel="noopener noreferrer"
class="nav-link external">
Thanks
</a>
</li>
</ul>
</div>
</div>
</nav>
</div>
<script src="/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@docsearch/js@3"></script>
<script src="/js/main.min.dc00f5ca911ee5aa105ea6de6b3b7e8d8169ba5a3bf156b1fcfe23dfe3e62b0a.js" integrity="sha256-3AD1ypEe5aoQXqbeazt&#43;jYFpulo78Vax/P4j3&#43;PmKwo=" crossorigin="anonymous"></script>
<script src="/js/mermaid.min.js"></script>
<script>
window.onload = () => mermaid.init(undefined, ".language-mermaid");
</script>
<script defer
src="https://widget.kapa.ai/kapa-widget.bundle.js"
data-website-id="8a08392b-9c4d-4816-8bc4-f93e0ecdd2a7"
data-project-name="SkyWalking"
data-project-color="#2B74B8"
data-button-text="Ask AI"
data-search-mode-enabled="true"
data-modal-open-on-command-k="true"
data-modal-disclaimer="The AI supports multiple languages, but it may not be accessible in China, a proxy is required."
data-project-logo="https://miro.medium.com/v2/resize:fit:2400/0*kmS-5BQ8ShAhZ_F4.jpg"
data-modal-example-questions="What is Apache SkyWalking?,How to deploy SkyWalking?,How to inject agents non-intrusively?,How to setup trace sampling?"
data-button-position-top=""
data-button-position-right="20px"
data-button-position-bottom="200px"
data-button-position-left=""
></script>
</body>
<script>
$(function (){
$('.doc-menu-button').on('click',function (){
$('.td-sidebar').toggleClass('active')
})
$('.version-select').on('change', function (){
var selectVersion = $(this).val().toLowerCase();
var prefix = '';
var url = location.href.replace(/(\/docs\/[a-zA-Z\-]+\/)([\w|\.]+)(\/.*)/, function (match, p1, p2, p3){
prefix = p1 + selectVersion;
return p1 + selectVersion + p3
})
go2SelectVersion(url, prefix)
})
function go2SelectVersion(url, prefix){
$.ajax({
url: url,
type: "get",
success:function(){
location.href = url;
},
statusCode: {
404:function(){
location.href = prefix + '/readme/';
}
}
});
}
})
</script>
</html>