Zum Hauptinhalt springen
Die GraphQL-API von AppSignal unterstützt Mutations ebenso wie Queries. Während eine Query Daten liest, schreibt eine Mutation sie: Sie können einen benutzerdefinierten Marker erstellen, einen Incident schließen, einen Uptime-Monitor hinzufügen und vieles mehr. Mutations verwenden denselben Endpunkt und dasselbe persönliche API-Token wie Queries. Einzelheiten zum Endpunkt und zur Authentifizierung finden Sie auf der GraphQL-API-Seite. Die meisten Mutations sind app-bezogen und nehmen ein appId-Argument entgegen, das die Änderung auf eine einzelne App eingrenzt. Sie finden Ihre App-ID im Einstellungsbildschirm Ihrer App. Einige Mutations sind organisationsbezogen und nehmen stattdessen ein organizationSlug-Argument entgegen, wie z. B. createApp und createStatusPage. Diese Seite behandelt die häufigsten Mutations. Die vollständige, automatisch generierte Liste aller Mutations und ihrer Argumente finden Sie in der GraphQL-Schema-Referenz.
Mutations verändern Daten in Ihrem Konto. Testen Sie eine Mutation gegen eine Nicht-Produktiv-App, bevor Sie sie gegen Produktionsdaten automatisieren.

Incidents

Einen Incident aktualisieren

Ändern Sie den Status, den Schweregrad, die zugewiesenen Personen oder die Benachrichtigungseinstellungen eines Incidents. Die number ist die in AppSignal angezeigte Incident-Nummer. state akzeptiert OPEN, WIP oder CLOSED. severity akzeptiert UNTRIAGED, CRITICAL, HIGH, LOW, NONE oder INFORMATIONAL.
mutation UpdateIncident(
  $appId: String!
  $number: Int!
  $state: IncidentStateEnum
  $severity: IncidentSeverityEnum
  $assigneeIds: [String!]
) {
  updateIncident(
    appId: $appId
    number: $number
    state: $state
    severity: $severity
    assigneeIds: $assigneeIds
  ) {
    ... on ExceptionIncident {
      id
      number
      state
      severity
    }
    ... on PerformanceIncident {
      id
      number
      state
      severity
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "number": 42,
  "state": "CLOSED",
  "severity": "LOW"
}

Mehrere Incidents gesammelt aktualisieren

Aktualisieren Sie mehrere Incidents in einer einzigen Anfrage. Anders als updateIncident nimmt diese Mutation Incident-IDs statt Incident-Nummern entgegen.
mutation BulkUpdateIncidents(
  $appId: String!
  $ids: [String]!
  $state: IncidentStateEnum
  $severity: IncidentSeverityEnum
) {
  bulkUpdateIncidents(
    appId: $appId
    ids: $ids
    state: $state
    severity: $severity
  ) {
    ... on ExceptionIncident {
      id
      number
      state
    }
    ... on PerformanceIncident {
      id
      number
      state
    }
    ... on AnomalyIncident {
      id
      number
      state
    }
    ... on LogIncident {
      id
      number
      state
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "ids": ["INCIDENT-ID-1", "INCIDENT-ID-2"],
  "state": "CLOSED"
}

Eine Notiz zu einem Incident erstellen

Fügen Sie eine Notiz zum Logbuch eines Incidents hinzu. Dieselben Felder sind für Performance-, Anomaly- und Log-Incidents verfügbar.
mutation CreateIncidentNote(
  $appId: String!
  $incidentNumber: Int!
  $content: String!
) {
  createIncidentNote(
    appId: $appId
    incidentNumber: $incidentNumber
    content: $content
  ) {
    ... on ExceptionIncident {
      id
      number
      logbook {
        items {
          ... on Note {
            id
            content
            createdAt
          }
        }
      }
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "incidentNumber": 42,
  "content": "Investigating, deploy reverted."
}

Aus einem Incident ein Issue erstellen

Erstellen Sie ein verknüpftes Issue in einer verbundenen Integration. Dieses Beispiel verwendet GitHub; entsprechende Mutations existieren für andere Integrationen: createGitlabIssue, createJiraIssue, createLinearIssue, createShortcutStory, createAsanaTask und createTrelloCard.
mutation CreateGithubIssue(
  $appId: String!
  $incidentNumber: Int!
  $title: String!
  $description: String!
) {
  createGithubIssue(
    appId: $appId
    incidentNumber: $incidentNumber
    title: $title
    description: $description
  ) {
    ... on ExceptionIncident {
      id
      number
      integrations {
        ... on GitHub {
          name
          issues {
            url
            title
          }
        }
      }
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "incidentNumber": 42,
  "title": "NoMethodError in OrdersController#create",
  "description": "Tracked in AppSignal incident #42."
}

Eine Integration aus einem Incident entfernen

Entfernen Sie ein zuvor verknüpftes Integrations-Issue aus einem Incident.
mutation RemoveIntegration(
  $appId: String!
  $incidentNumber: Int!
  $id: String!
) {
  removeIntegration(
    appId: $appId
    incidentNumber: $incidentNumber
    id: $id
  ) {
    ... on ExceptionIncident {
      id
      number
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "incidentNumber": 42,
  "id": "YOUR-INTEGRATION-ID"
}

Marker

Einen benutzerdefinierten Marker erstellen oder aktualisieren

Erstellen Sie einen benutzerdefinierten Marker, um einen Zeitpunkt zu kennzeichnen, etwa eine Konfigurationsänderung oder eine manuelle Aktion. Übergeben Sie eine id, um einen bestehenden Marker zu aktualisieren. Lassen Sie id weg, um einen neuen Marker zu erstellen.
mutation CreateCustomMarker(
  $appId: String!
  $id: String
  $icon: String!
  $message: String
  $createdAt: DateTime
) {
  createOrUpdateCustomMarker(
    appId: $appId
    id: $id
    icon: $icon
    message: $message
    createdAt: $createdAt
  ) {
    id
    icon
    message
    createdAt
  }
}
{
  "appId": "YOUR-APP-ID",
  "icon": "🚀",
  "message": "Ran database migration"
}

Einen benutzerdefinierten Marker löschen

Löschen Sie einen benutzerdefinierten Marker anhand seiner ID.
mutation DeleteCustomMarker($appId: String!, $id: String!) {
  deleteCustomMarker(appId: $appId, id: $id) {
    id
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-MARKER-ID"
}

Alerts und Trigger

Einen Trigger erstellen

Erstellen Sie einen metrikbasierten Alert-Trigger. field akzeptiert einen Wert aus MetricFieldEnum (z. B. MEAN, P90, P95, COUNT, GAUGE oder COUNTER). kind ist eine Zeichenkette, die den Triggertyp beschreibt. Die GraphQL-Quelldokumentation nennt ExceptionRate und Throughput als Beispiele. Die condition legt den Schwellenwert zum Vergleich fest. Um einen bestehenden Trigger zu ersetzen, übergeben Sie dessen ID als previousTriggerId. comparisonOperator akzeptiert LESS_THAN, GREATER_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN_OR_EQUAL, EQUAL oder NOT_EQUAL.
mutation CreateTrigger(
  $appId: String!
  $previousTriggerId: String
  $name: String
  $metricName: String!
  $kind: String!
  $field: MetricFieldEnum!
  $condition: ThresholdConditionInput!
  $warmupDuration: Int!
  $cooldownDuration: Int!
  $notifierIds: [String!]
) {
  createTrigger(
    appId: $appId
    previousTriggerId: $previousTriggerId
    name: $name
    metricName: $metricName
    kind: $kind
    field: $field
    condition: $condition
    warmupDuration: $warmupDuration
    cooldownDuration: $cooldownDuration
    notifierIds: $notifierIds
  ) {
    id
    name
    metricName
    field
    thresholdCondition {
      value
      comparisonOperator
    }
    warmupDuration
    cooldownDuration
  }
}
{
  "appId": "YOUR-APP-ID",
  "name": "High error rate",
  "metricName": "transaction_exception_count",
  "kind": "ExceptionRate",
  "field": "COUNTER",
  "condition": { "value": 10, "comparisonOperator": "GREATER_THAN" },
  "warmupDuration": 0,
  "cooldownDuration": 5,
  "notifierIds": ["YOUR-NOTIFIER-ID"]
}

Einen Trigger archivieren

Archivieren Sie einen Trigger, sodass er keine Metriken mehr auswertet und keine Alerts mehr versendet.
mutation ArchiveTrigger($appId: String!, $id: String!) {
  archiveTrigger(appId: $appId, id: $id) {
    id
    name
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-TRIGGER-ID"
}

Einen Alert archivieren

Archivieren Sie einen einzelnen ausgelösten Alert. Diese Mutation gibt bei Erfolg true zurück.
mutation ArchiveAlert($appId: String!, $id: String!) {
  archiveAlert(appId: $appId, id: $id)
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-ALERT-ID"
}

Den letzten Alert für einen Anomaly-Incident schließen

Schließen Sie den jüngsten offenen Alert für einen Anomaly-Incident, identifiziert über seine Incident-Nummer.
mutation EndLastAlert($appId: String!, $number: Int!) {
  endLastAlert(appId: $appId, number: $number) {
    id
    number
    alertState
  }
}
{
  "appId": "YOUR-APP-ID",
  "number": 42
}

Uptime-Monitore

Einen Uptime-Monitor erstellen

Erstellen Sie einen Uptime-Monitor aus einem UptimeMonitorInput. regions akzeptiert einen oder mehrere der Werte EUROPE, NORTH_AMERICA, ASIA_PACIFIC oder SOUTH_AMERICA.
mutation CreateUptimeMonitor(
  $appId: String!
  $uptimeMonitor: UptimeMonitorInput!
) {
  createUptimeMonitor(appId: $appId, uptimeMonitor: $uptimeMonitor) {
    id
    name
    url
    regions
    warmupDuration
  }
}
{
  "appId": "YOUR-APP-ID",
  "uptimeMonitor": {
    "name": "Marketing site",
    "url": "https://example.com",
    "regions": ["EUROPE", "NORTH_AMERICA"],
    "warmupDuration": 1,
    "notifierIds": ["YOUR-NOTIFIER-ID"]
  }
}

Einen Uptime-Monitor aktualisieren

Aktualisieren Sie einen bestehenden Monitor. Die uptimeMonitor-Eingabe hat dieselbe Struktur wie beim Erstellen.
mutation UpdateUptimeMonitor(
  $appId: String!
  $id: String!
  $uptimeMonitor: UptimeMonitorInput!
) {
  updateUptimeMonitor(
    appId: $appId
    id: $id
    uptimeMonitor: $uptimeMonitor
  ) {
    id
    name
    url
    regions
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-UPTIME-MONITOR-ID",
  "uptimeMonitor": {
    "name": "Marketing site",
    "url": "https://example.com/health",
    "regions": ["EUROPE"]
  }
}

Einen Uptime-Monitor löschen

Löschen Sie einen Monitor anhand seiner ID. Diese Mutation gibt den gelöschten Monitor zurück.
mutation DeleteUptimeMonitor($appId: String!, $id: String!) {
  deleteUptimeMonitor(appId: $appId, id: $id) {
    id
    name
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-UPTIME-MONITOR-ID"
}

Check-ins

Einen Check-in-Trigger erstellen

Erstellen Sie einen Cron- oder Heartbeat-Check-in-Trigger. kind akzeptiert CRON oder HEARTBEAT. Für einen Cron-Trigger setzen Sie syntax auf den Cron-Ausdruck. Verwenden Sie nach Möglichkeit UTC für timezone.
mutation CreateCheckInTrigger(
  $appId: String!
  $identifier: String!
  $kind: CheckInTriggerKindEnum!
  $waitTimeMinutes: Int!
  $syntax: String
  $timezone: String
  $notifierIds: [String!]
) {
  createCheckInTrigger(
    appId: $appId
    identifier: $identifier
    kind: $kind
    waitTimeMinutes: $waitTimeMinutes
    syntax: $syntax
    timezone: $timezone
    notifierIds: $notifierIds
  ) {
    id
    identifier
    kind
    syntax
    timezone
    waitTimeMinutes
  }
}
{
  "appId": "YOUR-APP-ID",
  "identifier": "nightly-backup",
  "kind": "CRON",
  "syntax": "0 2 * * *",
  "timezone": "UTC",
  "waitTimeMinutes": 5,
  "notifierIds": ["YOUR-NOTIFIER-ID"]
}

Einen Check-in-Trigger aktualisieren

Aktualisieren Sie einen bestehenden Check-in-Trigger. Nur die Felder, die Sie übergeben, werden geändert.
mutation UpdateCheckInTrigger(
  $appId: String!
  $id: String!
  $syntax: String
  $waitTimeMinutes: Int
  $notifierIds: [String!]
) {
  updateCheckInTrigger(
    appId: $appId
    id: $id
    syntax: $syntax
    waitTimeMinutes: $waitTimeMinutes
    notifierIds: $notifierIds
  ) {
    id
    identifier
    syntax
    waitTimeMinutes
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-CHECK-IN-TRIGGER-ID",
  "syntax": "0 3 * * *",
  "waitTimeMinutes": 10
}

Einen Check-in-Trigger löschen

Löschen Sie einen Check-in-Trigger anhand seiner ID.
mutation DeleteCheckInTrigger($appId: String!, $id: String!) {
  deleteCheckInTrigger(appId: $appId, id: $id) {
    id
    identifier
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-CHECK-IN-TRIGGER-ID"
}

Dashboards

Ein Dashboard erstellen

Erstellen Sie ein leeres Dashboard. Fügen Sie ihm mit den Mutations createVisualTimeseries und createVisualNumber Visuals hinzu oder importieren Sie ein komplettes Dashboard mit importDashboard. Dashboard-Visuals werden ebenfalls über createVisualTimeseries, createVisualNumber, updateVisualTimeseries, updateVisualNumber, updateVisualLayouts und deleteVisual verwaltet. Um ein eigenständiges gespeichertes Visual für den späteren Abruf über die REST-Endpunkte für gespeicherte Visuals zu erstellen, verwenden Sie createSavedVisual.
mutation CreateDashboard(
  $appId: String!
  $title: String!
  $description: String
) {
  createDashboard(appId: $appId, title: $title, description: $description) {
    id
    title
    description
  }
}
{
  "appId": "YOUR-APP-ID",
  "title": "Background jobs",
  "description": "Throughput and queue time for worker jobs."
}

Ein Dashboard aktualisieren

Aktualisieren Sie Titel oder Beschreibung eines Dashboards. Der title ist erforderlich.
mutation UpdateDashboard(
  $appId: String!
  $id: String!
  $title: String!
  $description: String
) {
  updateDashboard(
    appId: $appId
    id: $id
    title: $title
    description: $description
  ) {
    id
    title
    description
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-DASHBOARD-ID",
  "title": "Background jobs",
  "description": "Updated description."
}

Ein Dashboard löschen

Löschen Sie ein Dashboard anhand seiner ID.
mutation DeleteDashboard($appId: String!, $id: String!) {
  deleteDashboard(appId: $appId, id: $id) {
    id
    title
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-DASHBOARD-ID"
}

Ein Dashboard importieren

Importieren Sie ein Dashboard aus einer JSON-Definition. Das Argument json ist eine JSON-kodierte Zeichenkette, daher müssen Sie sie beim Senden als Variable escapen.
mutation ImportDashboard($appId: String!, $json: String!) {
  importDashboard(appId: $appId, json: $json) {
    id
    title
  }
}
{
  "appId": "YOUR-APP-ID",
  "json": "{\"title\":\"Imported dashboard\",\"visuals\":[]}"
}

Logs

Einen Log-Trigger erstellen

Erstellen Sie einen Trigger, der einen Incident öffnet, wenn Log-Zeilen einer Abfrage entsprechen. severities akzeptiert Log-Schweregradnamen wie error, warn oder info.
mutation CreateLogTrigger(
  $appId: String!
  $name: String!
  $query: String!
  $sourceIds: [String!]
  $severities: [String!]
  $notifierIds: [String!]
) {
  createLogTrigger(
    appId: $appId
    name: $name
    query: $query
    sourceIds: $sourceIds
    severities: $severities
    notifierIds: $notifierIds
  ) {
    id
    name
    query
    severities
  }
}
{
  "appId": "YOUR-APP-ID",
  "name": "Payment errors",
  "query": "payment failed",
  "severities": ["error"],
  "notifierIds": ["YOUR-NOTIFIER-ID"]
}
Logs werden über GraphQL auch über Trigger hinaus verwaltet. Verwenden Sie createLogSource, updateLogSource und deleteLogSource für Quellen; createLogView, updateLogView und deleteLogView für gespeicherte Ansichten; createLogLineAction, updateLogLineAction, deleteLogLineAction und reorderLogLineActions für Ingestion-Regeln; updateLogTrigger und deleteLogTrigger für Log-Trigger; und createLogExport, updateLogExport und deleteLogExport für S3-Exporte.

Organisationsbezogene Mutations

Manche Mutations beziehen sich auf eine Organisation statt auf eine einzelne App und nehmen daher ein organizationSlug-Argument anstelle von appId entgegen. Das Slug finden Sie in der URL Ihrer Organisation in AppSignal.

Eine App erstellen

Erstellen Sie eine neue App innerhalb einer Organisation.
mutation CreateApp(
  $organizationSlug: String!
  $name: String!
  $environment: String!
) {
  createApp(
    organizationSlug: $organizationSlug
    name: $name
    environment: $environment
  ) {
    id
    name
    environment
  }
}
{
  "organizationSlug": "YOUR-ORGANIZATION-SLUG",
  "name": "My app",
  "environment": "production"
}

Eine Statusseite erstellen

Erstellen Sie eine öffentliche Statusseite aus einem CreateStatusPageInput. title und hostname sind erforderlich.
mutation CreateStatusPage(
  $organizationSlug: String!
  $statusPage: CreateStatusPageInput!
) {
  createStatusPage(
    organizationSlug: $organizationSlug
    statusPage: $statusPage
  ) {
    id
    title
    hostname
    state
  }
}
{
  "organizationSlug": "YOUR-ORGANIZATION-SLUG",
  "statusPage": {
    "title": "Service status",
    "hostname": "status.example.com",
    "uptimeMonitorIds": ["YOUR-UPTIME-MONITOR-ID"],
    "threshold": 1
  }
}
Statusseiten unterstützen außerdem createStatusPageUpdate, updateStatusPage, updateStatusPageUpdate, deleteStatusPage und deleteStatusPageUpdate. Für CSV-Exporte verwenden Sie createCsvExport, um einen Export zu starten, und createCsvExportUrl, um eine Download-URL für einen abgeschlossenen Export zu erzeugen.

Weitere Mutations

Diese Beispiele decken die häufigsten Operationen ab. Die API enthält noch weitere, gruppiert in der Schema-Referenz unter Core (App- und Hosted-Collector-Verwaltung), Dashboards (Visuals und Layouts), Logs (Quellen, Ansichten und Exporte), Exports (CSV), Statusseiten (Updates) und Benutzereinstellungen. Die vollständige Liste der Mutations und ihrer Argumente finden Sie in der GraphQL-Schema-Referenz.