example of nixos module/systemd service

main
Daniel Barlow 2022-09-16 22:43:21 +01:00
parent d795d5a4a1
commit 07ee2a1b0e
2 changed files with 34 additions and 9 deletions

View File

@ -1,25 +1,28 @@
# Grafana SMS alert # Grafana SMS alert
Send Grafana alerts via SMS to a mobile phone, using a GSM modem that Send Grafana alerts via SMS to a mobile phone, using a GSM modem that
understands AT commands, such as the Huawei E3131 broadband USB dongle. understands AT commands, such as the Huawei E3131 broadband USB dongle.
Fancy SaaS alerting services are great, but what if you want to know Fancy SaaS alerting services are great, but what if you want to know
that the internet is down? that the internet is down?
This runs as a service on `localhost:8201` - once you've started it, This runs as a service on `localhost:8201` - once you've started it,
create a "Webhook" type contact point in your Grafana instance create a "Webhook" type contact point in your Grafana instance,
with the url `http://localhost:8201`. with the url `http://localhost:8201`.
See Grafana [alerting contact points](https://grafana.com/docs/grafana/latest/alerting/contact-points/) documentation for background See Grafana [alerting contact points](https://grafana.com/docs/grafana/latest/alerting/contact-points/) documentation for background.
## Installation (Nix) ## Building and use (Nix)
TBD ### Try it quickly
## Testing $ nix-build build.nix
$ cp config.json.example config.json # and edit it
$ ./result/bin/grafana-sms-alert config.json
Use the sample-alert.json in this repo to simulate the Grafana webhook $ curl -v --data @sample-alert.json http://localhost:8201
invocation and check it's operational
### Install it meaningfully
curl -v --data @sample-alert.json http://localhost:8201 The derivation in `default.nix` works with `callPackage`, so see
`module-example.nix` for a sketch.

22
module-example.nix Normal file
View File

@ -0,0 +1,22 @@
{ config, lib, pkgs, ... }:
let
grafana-sms-alert = pkgs.callPackage (fetchTarball "https://gti.telent.net/dan/grafana-sms-alert/archive/main.tar.gz") {};
smsConfig = builtins.toFile "config.json"
(builtins.toJSON {
smsc = "+447958879879";
number = "447000123456";
device = "/dev/serial/by-id/usb-HUAWEI_HUAWEI_HiLink-if00-port0";
});
in {
config.systemd.services.grafana-sms = {
description = "SMS webhook for Grafana";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Restart = "always";
SyslogIdentifier = "grafana-sms";
ExecStart = ''
${grafana-sms-alert}/bin/grafana-sms-alert ${smsConfig}
'';
};
};
}