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¶
- Gå til api.slack.com/apps og opprett en ny app i Oslo kommunes Slack-workspace. Gi den et beskrivende navn.
- Åpne Incoming Webhooks i menyen til appen og skru på Activate Incoming Webhooks.
- Klikk Add New Webhook to Workspace, velg kanalen varslene skal gå til, og klikk Authorize.
- 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¶
- Klikk brukernavnet ditt øverst til høyre i workspacet og velg Settings.
- Under Workspace admin, åpne fanen Notifications og klikk Manage.
- 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:
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:
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 listviser typen idestination_type, som skal væreSLACK. 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_runser 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:
- Feilsøke med logger
- Gjenopprette etter feil i pipelines
- Sette opp ferskhetsvarsel — varsel når en tabell ikke får nye data
Forklaringer og referanser:
Ekstern dokumentasjon: