Passer au contenu principal
AppSignal fournit une API GraphQL qui vous permet d’interroger de manière programmatique les données de votre application. Sur cette page, vous trouverez des exemples de requêtes pour vous aider à démarrer. Pour les opérations d’écriture, consultez la page exemples de mutations. Consultez la page de l’API GraphQL pour en savoir plus sur le point de terminaison GraphQL et l’authentification.
La lecture de données en masse — métriques, journaux et traces — via l’API GraphQL est obsolète. Utilisez plutôt l’API REST (V2), comme metrics et recherche de journaux. L’API GraphQL n’expose pas les lignes de journal. Les exemples de métriques sur cette page sont conservés pour les intégrations existantes.

Récupérer les déploiements

Requête

query MarkersIndexQuery(
  $appId: String!
  $limit: Int
  $offset: Int
  $start: DateTime
  $end: DateTime
) {
  app(id: $appId) {
    id
    deployMarkers(limit: $limit, offset: $offset, start: $start, end: $end) {
      id
      createdAt
      shortRevision
      revision
      gitCompareUrl
      user
      liveForInWords
      liveFor
      exceptionCount
      exceptionRate
      __typename
    }
    __typename
  }
}

Variables de requête

{
  "appId": "YOUR-APP-ID",
  "limit": 25
}

Récupérer les incidents d’un déploiement

Requête

query ExceptionIncidentsQuery(
  $appId: String!
  $namespaces: [String]
  $markerId: String
  $limit: Int
  $offset: Int
  $state: IncidentStateEnum
  $order: IncidentOrderEnum
) {
  app(id: $appId) {
    id
    exceptionIncidents(
      namespaces: $namespaces
      marker: $markerId
      limit: $limit
      state: $state
      offset: $offset
      order: $order
    ) {
      ...ExceptionIncidentRow
      __typename
    }
    __typename
  }
}

fragment ExceptionIncidentRow on ExceptionIncident {
  id
  number
  count
  perMarkerCount(marker: $markerId)
  lastOccurredAt
  actionNames
  exceptionName
  state
  namespace
  firstBacktraceLine
  errorGroupingStrategy
  severity
}

Variables de requête

{
  "appId": "YOUR-APP-ID",
  "markerId": "YOUR-DEPLOY-MARKER-ID",
  "limit": 200
}

Rechercher des incidents par tag

Requête

query Search(
  $organizationSlug: String!
  $query: String
  $namespace: String
  $sampleType: SampleTypeEnum
) {
  organization(slug: $organizationSlug) {
    search(query: $query, namespace: $namespace, sampleType: $sampleType) {
      ... on ExceptionSample {
        id
        time
        action
        namespace
        overview {
          key
          value
        }
        exception {
          name
          message
        }
        incident {
          ... on ExceptionIncident {
            number
          }
        }
        app {
          name
          environment
          id
        }
      }
      ... on PerformanceSample {
        id
        appId
        time
        action
        namespace
        duration
        overview {
          key
          value
        }
        incident {
          ... on PerformanceIncident {
            number
          }
        }
        app {
          name
          environment
          id
        }
      }
    }
  }
}

Variables de requête

{
  "organizationSlug": "YOUR-ORGANIZATION-SLUG", // taken from the organization URL
  "sampleType": "EXCEPTION",
  "query": "tag:value" // replace the word value with the values you are searching for
}
Les exemples suivants utilisent l’API de métriques GraphQL héritée et sont conservés ici pour les intégrations existantes.

Récupérer le nombre d’erreurs

Cet exemple utilise l’API de métriques GraphQL obsolète. Pour les nouvelles intégrations, utilisez plutôt le point de terminaison REST metrics list.

Requête

query MetricsListQuery(
  $appId: String!
  $start: DateTime
  $end: DateTime
  $timeframe: TimeframeEnum
  $query: [MetricAggregation!]!
) {
  app(id: $appId) {
    id
    metrics {
      list(start: $start, end: $end, query: $query, timeframe: $timeframe) {
        start
        end
        rows {
          name
          tags {
            key
            value
          }
          fields {
            key
            value
          }
        }
      }
    }
  }
}

Variables de requête

{
  "appId": "YOUR-APP-ID",
  "start": "2021-06-04T13:00:00.000Z", // change this to the date of your preference
  "end": "2021-12-21T14:00:00.000Z",   // change this to the date of your preference
  "query": [
    {
    "name": "transaction_exception_count",
    "tags": [{ "key": "namespace", "value": "*" }],
    "fields": [{ "field": "COUNTER", "aggregate": "SUM" }]
    }
  ]
}

Récupérer la moyenne (séries temporelles)

Cet exemple utilise l’API de métriques GraphQL obsolète. Pour les nouvelles intégrations, utilisez plutôt le point de terminaison REST metrics timeseries.

Requête

query MetricTimeseriesQuery(
  $appId: String!
  $start: DateTime
  $end: DateTime
  $timeframe: TimeframeEnum
  $query: [MetricTimeseries]
) {
  app(id: $appId) {
    id
    metrics {
      timeseries(
        start: $start
        end: $end
        timeframe: $timeframe
        query: $query
      ) {
        start
        end
        resolution
        keys {
          name
          fields
          tags {
            key
            value
          }
        }
        points {
          timestamp
          values {
            value
          }
        }
      }
    }
  }
}

Variables de requête

{
  "appId": "YOUR-APP-ID",
  "start": "2022-01-10T11:00:00Z", // Start data and time you want to fetch the Mean for
  "end": "2022-01-10T11:05:00Z",   // End data and time you want to fetch the Mean for
  "query": [
    {
      "name": "transaction_duration",
      "tags": [ // You can add more namespaces here, this example just fetches the Mean for web namespace.
        {
          "key": "namespace",
          "value": "web"
        }
      ],
      "fields": [
        {
          "field": "MEAN"
        }
      ]
    }
  ]
}

Récupérer la moyenne (agrégée)

Cet exemple utilise l’API de métriques GraphQL obsolète. Pour les nouvelles intégrations, utilisez plutôt le point de terminaison REST metrics list.

Requête

query MetricAggregationQuery(
  $appId: String!
  $start: DateTime
  $end: DateTime
  $timeframe: TimeframeEnum
  $query: [MetricAggregation!]!
) {
  app(id: $appId) {
    id
    metrics {
      list(start: $start, end: $end, timeframe: $timeframe, query: $query) {
        start
        end
        rows {
          name
          tags {
            key
            value
          }
          fields {
            key
            value
          }
        }
      }
    }
  }
}

Variables de requête

{
  "appId": "YOUR-APP-ID",
  "start": "2022-01-10T11:00:00Z", // Start data and time you want to fetch the Mean for
  "end": "2022-01-10T11:05:00Z",   // End data and time you want to fetch the Mean for
  "query": [
    {
      "name": "transaction_duration",
      "tags": [ // You can add more namespaces here, this example just fetches the Mean for web namespace.
        {
          "key": "namespace",
          "value": "web"
        }
      ],
      "fields": [
        {"field":"mean","aggregate":"AVG"}
      ]
    }
  ]
}

Récupérer un incident avec un échantillon

Requête

query IncidentQuery(
  $appId: String!
  $incidentNumber: Int!
  $sampleId: String
  $timestamp: String
  $timerange: [DateTime]
) {
  app(id: $appId) {
    id
    incident(incidentNumber: $incidentNumber) {
      ... on ExceptionIncident {
        ...ExceptionIncident
      }
      ... on PerformanceIncident {
        ...PerformanceIncident
      }
    }
  }
}
fragment ExceptionIncident on ExceptionIncident {
  id
  number
  lastOccurredAt
  actionNames
  exceptionName
  notificationFrequency
  state
  namespace
  firstBacktraceLine
  errorGroupingStrategy
  sample(id: $sampleId, timestamp: $timestamp, timerange: $timerange) {
    ...ExceptionSample
  }
}
fragment ExceptionSample on ExceptionSample {
  id
  appId
  time
  revision
  action
  namespace
  queueDuration
  originallyRequested
  overview {
    key
    value
  }
  params
  sessionData
  customData
  environment {
    key
    value
  }
  exception {
    name
    message
    backtrace {
      original
      line
      column
      path
      method
      url
      type
      code {
        line
        source
      }
      error {
        class
        message
      }
    }
  }
}
fragment PerformanceIncident on PerformanceIncident {
  id
  number
  lastOccurredAt
  actionNames
  state
  notificationFrequency
  notificationThreshold
  namespace
  description
  severity
  sample(id: $sampleId, timestamp: $timestamp, timerange: $timerange) {
    ...PerformanceSample
    __typename
  }
  __typename
}
fragment PerformanceSample on PerformanceSample {
  id
  appId
  time
  revision
  action
  namespace
  originallyRequested
  hasNPlusOne
  timelineTruncatedEvents
  overview {
    key
    value
    __typename
  }
  params
  sessionData
  customData
  environment {
    key
    value
    __typename
  }
  duration
  queueDuration
  timeline {
    ...TimelineEvent
    __typename
  }
  version
  __typename
}
fragment TimelineEvent on TimelineEvent {
  action
  duration
  childDuration
  group
  name
  payload {
    name
    body
    __typename
  }
  time
  end
  digest
  count
  level
  allocationCount
  childAllocationCount
  __typename
}

Variables de requête

{
  "appId": "YOUR-APP-ID",
  "incidentNumber": 42,
  "sampleId": "SAMPLE-ID-STRING", // optional
  "timestamp": "2026-06-22T12:00:00Z", // optional
  "timerange": ["2026-06-22T00:00:00Z", "2026-06-22T23:59:59Z"] // optional
}

Récupérer les moniteurs de disponibilité et leurs alertes

Requête

query uptimeMonitorsQuery($appId: String!) {
  app(id: $appId) {
    id
    uptimeMonitors {
      ...UptimeMonitor
    }
  }
}

fragment UptimeMonitor on UptimeMonitor {
  id
  name
  url
  description
  notifierIds
  warmupDuration
  checkBodyContent
  regions
  headers {
    key
    value
  }
  alerts {
    ...Alert
  }
  statusPages {
    ...StatusPage
  }
}

fragment Alert on Alert {
  id
  state
  message
  metricDigest
  createdAt
  openedAt
  resolvedAt
  closedAt
  timeframeStartAt
  timeframeEndAt
  lastValue
  peakValue
  mean
  tags {
    key
    value
  }
}

fragment StatusPage on StatusPage {
  id
  title
  subdomain
  hostname
  description
  threshold
  uptimeMonitorIds
}

Variables de requête

{
  "appId": "YOUR-APP-ID"
}

Récupérer l’état d’un moniteur de disponibilité

Cet exemple utilise l’API de métriques GraphQL obsolète. Pour les nouvelles intégrations, utilisez plutôt le point de terminaison REST metrics timeseries.

Requête

query MetricTimeseriesQuery(
  $appId: String!
  $start: DateTime
  $end: DateTime
  $timeframe: TimeframeEnum
  $query: [MetricTimeseries]
) {
  app(id: $appId) {
    id
    metrics {
      timeseries(
        start: $start
        end: $end
        timeframe: $timeframe
        query: $query
      ) {
        start
        end
        resolution
        keys {
          digest
          name
          fields
          tags {
            key
            value
          }
        }
        points {
          timestamp
          values {
            key
            value
          }
        }
      }
    }
  }
}

Variables de requête

{
  "appId": "YOUR-APP-ID",
  "timeframe": "R1H", // for example: R1H, R4H, R8H, R12H, R24H, R48H, R7D, or R30D
  "query": [
    {
      "name": "uptime_monitor_error_count",
      "tags": [
        {
          "key": "name",
          "value": "NAME-OF-UPTIME-MONITOR"
        },
        {
          "key": "region",
          "value": "*" // You can filter this to a specific region.
        }
      ],
      "fields": [
        {
          "field": "COUNTER"
        }
      ]
    }
  ]
}