Gå til innhold

Sette opp Slack-varsler

Denne guiden viser hvordan du kan få varsler i Slack når en jobb feiler. Først lager du en webhook for kanalen i Slack, deretter oppretter du en notification destination i workspacet, et objekt som lagrer URL-en til webhooken. Det er et engangsoppsett per workspace, og det må gjøres av en workspace-admin. Til slutt peker du på destinasjonen fra jobben i bundlen, og det kan alle som deployer bundlen gjøre.

Før du begynner

Sørg for at du har:

  • En bundle med en jobb, se Ta i bruk bundles.
  • En Slack-kanal teamet følger med på.
  • En workspace-admin på teamet til trinn 2, enten deg selv eller noen som kan gjøre det for deg. Se Roller og rettigheter.

Trinn 1: Lag en webhook i Slack

  1. Gå til api.slack.com/apps og opprett en ny app i Oslo kommunes Slack-workspace. Gi den et beskrivende navn.
  2. Åpne Incoming Webhooks i menyen til appen og skru på Activate Incoming Webhooks.
  3. Klikk Add New Webhook to Workspace, velg kanalen varslene skal gå til, og klikk Authorize.
  4. Kopier URL-en under Webhook URLs for Your Workspace. Den begynner med https://hooks.slack.com/services/.

Jobber med pause_status: UNPAUSED i tidsplanen kjører etter tidsplanen også i stage og varsler derfra. Vil du ha meldingene fra stage i en annen kanal enn prod, legger du til en egen webhook for stage i samme app.

URL-en til webhooken er en hemmelighet

Den som har URL-en, kan poste i kanalen. Ikke legg den i git eller i bundlen. Slack trekker tilbake URL-er som lekker ut, for eksempel til et offentlig repo.

Trinn 2: Opprett en notification destination i workspacet

  1. Klikk brukernavnet ditt øverst til høyre i workspacet og velg Settings.
  2. Under Workspace admin, åpne fanen Notifications og klikk Manage.
  3. Klikk Add destination, velg Slack som type, gi destinasjonen et navn, lim inn URL-en fra trinn 1, og klikk Create.

Databricks lagrer URL-en kryptert. Alle i workspacet kan bruke destinasjonen når den er opprettet.

Du trenger navnet på destinasjonen i trinn 3. Du ser det i lista under Notifications, eller ved å liste destinasjonene i workspacet:

databricks notification-destinations list -p MY_TEAM_STAGE

Gjenta trinnet for prod-workspacet. ID-en er forskjellig i hvert workspace, så bundlen slår den opp fra navnet.

Trinn 3: Pek jobben på destinasjonen i bundlen

Legg til en variabel i databricks.yml, og slå opp destinasjonen på navn for hvert target. Er bundlen generert med ferskhetsvarselet, finnes variabelen allerede med plassholderen REPLACE_WITH_DESTINATION_NAME. Da bytter du bare ut verdiene, og de andre jobbene bruker den samme variabelen.

variables:
  slack_destination_id:
    description: Notification destination for Slack-varsler

targets:
  stage:
    # ...
    variables:
      slack_destination_id:
        lookup:
          notification_destination: <navn i stage-workspacet>

  prod:
    # ...
    variables:
      slack_destination_id:
        lookup:
          notification_destination: <navn i prod-workspacet>

lookup gjør om navnet til ID-en ved databricks bundle validate og deploy. Et navn som ikke finnes i workspacet, stopper kommandoen før noe blir deployet.

Legg så til webhook_notifications på jobben i resources/*.job.yml:

resources:
  jobs:
    paddeobservasjoner_job:
      name: paddeobservasjoner_job
      # ...
      webhook_notifications:
        on_success: # Midlertidig, fjernes i trinn 4
          - id: ${var.slack_destination_id}
        on_failure:
          - id: ${var.slack_destination_id}
      notification_settings:
        no_alert_for_skipped_runs: true

webhook_notifications er feltet for alle notification destinations, også Slack. De andre hendelsene du kan varsle på, og hva no_alert_for_skipped_runs gjør, står i Varsling og alarmer.

Trinn 4: Deploy og test

Deploy bundlen til stage og kjør jobben:

databricks bundle validate -t stage -p MY_TEAM_STAGE
databricks bundle deploy -t stage -p MY_TEAM_STAGE
databricks bundle run -t stage -p MY_TEAM_STAGE paddeobservasjoner_job

Når kjøringen er ferdig, skal meldingen dukke opp i kanalen. Fjern så on_success fra jobben og deploy på nytt:

databricks bundle deploy -t stage -p MY_TEAM_STAGE

Bekreft resultatet

Åpne jobben under Jobs & Pipelines i workspacet. I stage heter den [dev <brukernavn>] paddeobservasjoner_job. I panelet Job details, under Job notifications, skal destinasjonen stå oppført for Failure.

Feilsøking

Ingen melding i Slack når jobben feiler
  • Sjekk at navnet i targeten hører til en destinasjon i samme workspace som jobben kjører i.
  • Sjekk at destinasjonen er av typen Slack. databricks notification-destinations list viser typen i destination_type, som skal være SLACK. En destinasjon av typen Webhook poster et format Slack ikke viser som melding.
  • Kjøringen kan ha blitt hoppet over i stedet for å feile. Slike kjøringer varsles ikke når no_alert_for_skipped_runs er satt.
  • Feiler en task og prøver på nytt, kommer jobbvarselet først når hele kjøringen har feilet.
  • Webhooken kan være trukket tilbake fordi URL-en har lekket ut. Lag en ny webhook i Slack og oppdater destinasjonen.
  • Kanalen kan være arkivert. Da avviser Slack meldingene.
Pipelinen feiler, men det kommer ikke noe varsel

En pipeline kan bare varsle på e-post. Kjører den på egen tidsplan, utenom jobben, får du derfor ikke noe Slack-varsel. Legg pipelinen inn som en task i jobben, se Skrive transformasjoner. Da feiler jobben når pipelinen feiler, og jobbvarselet sendes.

Feilmelding ved validate eller deploy: failed to resolve notification-destination

Workspacet har ingen destinasjon med navnet i targeten, for eksempel fordi plassholderen fra bundle-malen står igjen:

Error: failed to resolve notification-destination: REPLACE_WITH_DESTINATION_NAME, err: notification destination named "REPLACE_WITH_DESTINATION_NAME" does not exist

Navnet må være helt likt navnet i workspacet, med store og små bokstaver og mellomrom. Sett navnet fra trinn 2 i targeten, og prøv på nytt.

Finner ikke fanen Notifications under Settings

Fanen vises bare for workspace-admins. Be en workspace-admin på teamet om å gjøre trinn 2.

Relatert innhold

Guider:

Forklaringer og referanser:

Ekstern dokumentasjon: