edits from Scott
parent
107bf14825
commit
c50ded3713
|
@ -11,18 +11,18 @@ related:
|
|||
- /v2.0/monitor-alert/checks/
|
||||
---
|
||||
|
||||
Send an alert email using a third party service, such as SendGrid, AWS Simple Email Service (SES), Mailjet, or Mailgun. To send an alert email, complete the following steps:
|
||||
Send an alert email using a third party service, such as [SendGrid](https://sendgrid.com/), [Amazon Simple Email Service (SES)](https://aws.amazon.com/ses/), [Mailjet](https://www.mailjet.com/), or [Mailgun](https://www.mailgun.com/). To send an alert email, complete the following steps:
|
||||
|
||||
1. [Create a check](/v2.0/monitor-alert/checks/create/#create-a-check-in-the-influxdb-ui) to identify the data to monitor and the status to alert on.
|
||||
2. Set up your preferred email service (sign up, retrieve API key, and send test email):
|
||||
2. Set up your preferred email service (sign up, retrieve API credentials, and send test email):
|
||||
- **SendGrid**: See [Getting Started With the SendGrid API](https://sendgrid.com/docs/API_Reference/api_getting_started.html)
|
||||
- **AWS Simple Email Service (SES)**: See [Using the Amazon SES API](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email.html). Your AWS SES request, including the url (endpoint), authentication, and the structure of the request may vary. For more information, see [Amazon SES API requests](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-requests.html) and [Authenticating requests to the Amazon SES API](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-authentication.html).
|
||||
- **AWS Simple Email Service (SES)**: See [Using the Amazon SES API](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email.html). Your AWS SES request, including the `url` (endpoint), authentication, and the structure of the request may vary. For more information, see [Amazon SES API requests](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-requests.html) and [Authenticating requests to the Amazon SES API](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-authentication.html).
|
||||
- **Mailjet**: See [Getting Started](https://dev.mailjet.com/email/guides/getting-started/)
|
||||
- **Mailgun**: See [Mailgun Signup](https://signup.mailgun.com/new/signup)
|
||||
3. [Create an alert email task](#create-an-alert-email-task) to call your email service and send an alert email.
|
||||
|
||||
{{% note %}}
|
||||
In the procedure below, we use the **Task UI** to create a task. Explore other ways to [create a task](/v2.0/process-data/manage-tasks/create-task/).
|
||||
In the procedure below, we use the **Task** page in the InfluxDB UI (user interface) to create a task. Explore other ways to [create a task](/v2.0/process-data/manage-tasks/create-task/).
|
||||
{{% /note %}}
|
||||
|
||||
### Create an alert email task
|
||||
|
@ -36,8 +36,8 @@ Send an alert email using a third party service, such as SendGrid, AWS Simple Em
|
|||
|
||||
4. In the right panel, enter the following detail in your **task script** (see [examples below](#examples)):
|
||||
- Import the [Flux HTTP package](/v2.0/reference/flux/stdlib/http/).
|
||||
- (Optional) Store your API key as a secret for reuse. First, import the [Flux InfluxDB Secrets package](/v2.0/reference/flux/stdlib/secrets/), and then [add your API key as a secret](/v2.0/security/secrets/manage-secrets/add/).
|
||||
- Specify the `_monitoring` bucket and `statuses` measurement. InfluxDB stores all [check](/v2.0/reference/glossary/#check) output data in this bucket and measurement.
|
||||
- (Optional) Store your API key as a secret for reuse. First, [add your API key as a secret](/v2.0/security/secrets/manage-secrets/add/), and then import the [Flux InfluxDB Secrets package](/v2.0/reference/flux/stdlib/secrets/).
|
||||
- Query the `statuses` measurement in the `_monitoring` bucket to retrieve all statuses generated by your check.
|
||||
- Set the time range to monitor; use the same interval that the task is scheduled to run. For example, `range (start: -task.every)`.
|
||||
- Set the `_level` to alert on, for example, `crit`, `warn`, `info`, or `ok`.
|
||||
- Use the `map()` function to evaluate the criteria to send an alert using `http.post()`.
|
||||
|
@ -56,7 +56,7 @@ Send an alert email using a third party service, such as SendGrid, AWS Simple Em
|
|||
<!-------------------------------- BEGIN SendGrid -------------------------------->
|
||||
{{% tab-content %}}
|
||||
|
||||
The example below uses the SendGrid API to send an alert email when more than 3 critical statuses occur within 10 minutes.
|
||||
The example below uses the SendGrid API to send an alert email when more than 3 critical statuses occur since the previous task run.
|
||||
|
||||
```js
|
||||
import "http"
|
||||
|
@ -70,15 +70,15 @@ import "influxdata/influxdb/secrets"
|
|||
SENDGRID_APIKEY = secrets.get(key: "SENDGRID_APIKEY")
|
||||
|
||||
numberOfCrits = from(bucket: "_monitoring")
|
||||
|> range(start: -10m)
|
||||
|> filter(fn: (r) => (r["_measurement"] == "statuses"))
|
||||
|> filter(fn: (r) => (r["_level"] == "crit"))
|
||||
|> range(start: -task.every)
|
||||
|> filter(fn: (r) => r.measurement == "statuses" and r.level == "crit")
|
||||
|> count()
|
||||
|
||||
numberOfCrits
|
||||
|> map(fn: (r) =>
|
||||
(if r._value > 3 then {r with _value: http.post(url: "https://api.sendgrid.com/v3/mail/send",
|
||||
headers: {"Content-Type": "application/json", "Authorization": "Bearer ${SENDGRID_APIKEY}",
|
||||
|> map(fn: (r) => (if r._value > 3 then {
|
||||
r with _value: http.post(
|
||||
url: "https://api.sendgrid.com/v3/mail/send",
|
||||
headers: {"Content-Type": "application/json", Authorization: "Bearer ${SENDGRID_APIKEY}",
|
||||
data: bytes(v: "{
|
||||
\"personalizations\": [{
|
||||
\"to\": [{
|
||||
|
@ -98,32 +98,35 @@ numberOfCrits
|
|||
<!-------------------------------- BEGIN AWS SES -------------------------------->
|
||||
{{% tab-content %}}
|
||||
|
||||
The example below uses the AWS SES API v2 to send an alert email when more than 3 critical statuses occur within 10 minutes.
|
||||
The example below uses the AWS SES API v2 to send an alert email when more than 3 critical statuses occur since the last task run.
|
||||
|
||||
{{% note %}} Your AWS SES request, including the url (endpoint), authentication, and the structure of the request may vary. For more information, see [Amazon SES API requests](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-requests.html) and [Authenticating requests to the Amazon SES API](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-authentication.html). We recommend signing your AWS API requests using the [Signature Version 4 signing process](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html).
|
||||
{{% note %}}
|
||||
Your AWS SES request, including the `url` (endpoint), authentication, and the structure of the request may vary. For more information, see [Amazon SES API requests](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-requests.html) and [Authenticating requests to the Amazon SES API](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-authentication.html). We recommend signing your AWS API requests using the [Signature Version 4 signing process](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html).
|
||||
{{% /note %}}
|
||||
|
||||
```js
|
||||
import "http"
|
||||
|
||||
// Import the Secrets package if you store your API key as a secret.
|
||||
// Import the Secrets package if you store your API credentials as secrets.
|
||||
// For detail on how to do this, see Step 4 above.
|
||||
import "influxdata/influxdb/secrets"
|
||||
|
||||
// Retrieve the secret if applicable. Otherwise, skip this line
|
||||
// Retrieve the secrets if applicable. Otherwise, skip this line
|
||||
// and add the API key as the Bearer token in the Authorization header.
|
||||
SENDGRID_APIKEY = secrets.get(key: "SENDGRID_APIKEY")
|
||||
AWS_AUTH_ALGORITHM = secrets.get(key: "AWS_AUTH_ALGORITHM")
|
||||
AWS_CREDENTIAL = secrets.get(key: "AWS_CREDENTIAL")
|
||||
AWS_SIGNED_HEADERS = secrets.get(key: "AWS_SIGNED_HEADERS")
|
||||
AWS_CALCULATED_SIGNATURE = secrets.get(key: "AWS_CALCULATED_SIGNATURE")
|
||||
|
||||
numberOfCrits = from(bucket: "_monitoring")
|
||||
|> range(start: -10m)
|
||||
|> filter(fn: (r) => (r["_measurement"] == "statuses"))
|
||||
|> filter(fn: (r) => (r["_level"] == "crit"))
|
||||
|> range(start: -task.every)
|
||||
|> filter(fn: (r) => (r.measurement == "statuses" and r._level == "crit")
|
||||
|> count()
|
||||
|
||||
numberOfCrits
|
||||
|> map(fn: (r) =>
|
||||
(if r._value > 3 then {r with _value: http.post(url: "https://email.your-aws-region.amazonaws.com/sendemail/v2/email/outbound-emails",
|
||||
headers: {"Content-Type": "application/json", "Authorization": "AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE,SignedHeaders=Datex-amz-date,Signature=9d63c3b5b7623d1fa3dc7fd1547313b9546c6d0fbbb6773a420613b7EXAMPLE"},
|
||||
|> map(fn: (r) => (if r._value > 3 then {
|
||||
r with _value: http.post(url: "https://email.your-aws-region.amazonaws.com/sendemail/v2/email/outbound-emails",
|
||||
headers: {"Content-Type": "application/json", Authorization: "Bearer ${AWS_AUTH_ALGORITHM}${AWS_CREDENTIAL}${AWS_SIGNED_HEADERS}${AWS_CALCULATED_SIGNATURE}"},
|
||||
data: bytes(v: "{
|
||||
\"personalizations\": [{
|
||||
\"to\": [{
|
||||
|
@ -143,31 +146,34 @@ numberOfCrits
|
|||
<!-------------------------------- BEGIN Mailjet ------------------------------->
|
||||
{{% tab-content %}}
|
||||
|
||||
The example below uses the Mailjet Send API to send an alert email when more than 3 critical statuses occur within 10 minutes.
|
||||
The example below uses the Mailjet Send API to send an alert email when more than 3 critical statuses since the last task run.
|
||||
|
||||
{{% note %}} To view your Mailjet API credentials, sign in to Mailjet and open the [API Key Management page](https://app.mailjet.com/account/api_keys).
|
||||
{{% note %}}
|
||||
To view your Mailjet API credentials, sign in to Mailjet and open the [API Key Management page](https://app.mailjet.com/account/api_keys).
|
||||
{{% /note %}}
|
||||
|
||||
```js
|
||||
import "http"
|
||||
|
||||
// Import the Secrets package if you store your API key as a secret.
|
||||
// Import the Secrets package if you store your API keys as secrets.
|
||||
// For detail on how to do this, see Step 4 above.
|
||||
import "influxdata/influxdb/secrets"
|
||||
|
||||
// Retrieve the secret if applicable. Otherwise, skip this line
|
||||
// and add the API key as the Bearer token in the Authorization header.
|
||||
SENDGRID_APIKEY = secrets.get(key: "SENDGRID_APIKEY")
|
||||
// Retrieve the secrets if applicable. Otherwise, skip this line
|
||||
// and add the API keys as Basic credentials in the Authorization header.
|
||||
MAILJET_APIKEY = secrets.get(key: "MAILJET_APIKEY")
|
||||
MAILJET_SECRET_APIKEY = secrets.get(key: "MAILJET_SECRET_APIKEY")
|
||||
|
||||
numberOfCrits = from(bucket: "_monitoring")
|
||||
|> range(start: -10m)
|
||||
|> filter(fn: (r) => (r["_measurement"] == "statuses"))
|
||||
|> filter(fn: (r) => (r["_level"] == "crit"))
|
||||
|> range(start: -task.every)
|
||||
|> filter(fn: (r) => (r.measurement == "statuses" and "r.level" == "crit")
|
||||
|> count()
|
||||
|
||||
numberOfCrits
|
||||
|> map(fn: (r) =>
|
||||
(if r._value > 3 then {r with _value: http.post(url: "https://api.mailjet.com/v3.1/send", headers: {"Content-type": "application/json", Authorization: "Basic <your-api-key>:<your-secret-key"}, data: bytes(v: "{
|
||||
|> map(fn: (r) => (if r._value > 3 then {
|
||||
r with _value: http.post(url: "https://api.mailjet.com/v3.1/send",
|
||||
headers: {"Content-type": "application/json", Authorization: "Basic ${MAILJET_APIKEY}:${MAILJET_SECRET_APIKEY}"},
|
||||
data: bytes(v: "{
|
||||
\"Messages\": [{
|
||||
\"From\": {\"Email\": \”jane.doe@example.com\"},
|
||||
\"To\": [{\"Email\": \"john.doe@example.com\"]},
|
||||
|
@ -184,10 +190,11 @@ numberOfCrits
|
|||
|
||||
{{% tab-content %}}
|
||||
|
||||
The example below uses the Mailgun API to send an alert email when more than 3 critical statuses occur within 10 minutes.
|
||||
The example below uses the Mailgun API to send an alert email when more than 3 critical statuses occur since the last task run.
|
||||
|
||||
{{% note %}} To view your Mailgun API keys, sign in to Mailjet and open [Account Security - API security](https://app.mailgun.com/app/account/security/api_keys). <br>
|
||||
Mailgun requires that a domain be specified via Mailgun. A domain is automatically created for you when you first set up your account. You must include this domain in your url endpoint (for example, `https://api.mailgun.net/v3/YOUR_DOMAIN` or `https://api.eu.mailgun.net/v3/YOUR_DOMAIN`. If you're using a free version of Mailgun, you can set up a maximum of five authorized recipients (to receive email alerts) for your domain. To view your Mailgun domains, sign in to Mailgun and view the [Domains page](https://app.mailgun.com/app/sending/domains).
|
||||
{{% note %}}
|
||||
To view your Mailgun API keys, sign in to Mailjet and open [Account Security - API security](https://app.mailgun.com/app/account/security/api_keys). <br>
|
||||
Mailgun requires that a domain be specified via Mailgun. A domain is automatically created for you when you first set up your account. You must include this domain in your `url` endpoint (for example, `https://api.mailgun.net/v3/YOUR_DOMAIN` or `https://api.eu.mailgun.net/v3/YOUR_DOMAIN`. If you're using a free version of Mailgun, you can set up a maximum of five authorized recipients (to receive email alerts) for your domain. To view your Mailgun domains, sign in to Mailgun and view the [Domains page](https://app.mailgun.com/app/sending/domains).
|
||||
{{% /note %}}
|
||||
|
||||
```js
|
||||
|
@ -199,22 +206,22 @@ import "influxdata/influxdb/secrets"
|
|||
|
||||
// Retrieve the secret if applicable. Otherwise, skip this line
|
||||
// and add the API key as the Bearer token in the Authorization header.
|
||||
SENDGRID_APIKEY = secrets.get(key: "SENDGRID_APIKEY")
|
||||
MAILGUN_APIKEY = secrets.get(key: "MAILGUN_APIKEY")
|
||||
|
||||
numberOfCrits = from(bucket: "_monitoring")
|
||||
|> range(start: -10m)
|
||||
|> range(start: -task.every)
|
||||
|> filter(fn: (r) => (r["_measurement"] == "statuses"))
|
||||
|> filter(fn: (r) => (r["_level"] == "crit"))
|
||||
|> count()
|
||||
|
||||
numberOfCrits
|
||||
|> map(fn: (r) =>
|
||||
(if r._value > 1 then {r with _value: http.post(url: "https://api.mailgun.net/v3/YOUR_DOMAIN/messages", headers: {Authorization: "Basic api:your-private-api-key"}, data: bytes(v: "{
|
||||
from='Excited User <mailgun@YOUR_DOMAIN_NAME>' \
|
||||
to=YOU@YOUR_DOMAIN_NAME \
|
||||
to=bar@example.com \
|
||||
subject='Hello' \
|
||||
text='Testing some Mailgun awesomeness!’
|
||||
(if r._value > 1 then {r with _value: http.post(url: "https://api.mailgun.net/v3/YOUR_DOMAIN/messages", headers: {"Content-type": "application/json", Authorization: "Basic api:${MAILGUN_APIKEY}"}, data: bytes(v: "{
|
||||
\"from\": \"Username <mailgun@YOUR_DOMAIN_NAME>\",
|
||||
\"to\"=\"YOU@YOUR_DOMAIN_NAME\",
|
||||
\"to\"=\"email@example.com\",
|
||||
\"subject\"=\"Critical InfluxData alert\",
|
||||
\"text\"=\"You have critical alerts to review\"
|
||||
|
||||
}\""))} else {r with _value: 0}))
|
||||
```
|
||||
|
|
Loading…
Reference in New Issue