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.