Difference between revisions of "Rackspace API/Cloud Monitoring"
Line 6: | Line 6: | ||
Note: This article assumes you already have the [http://www.rackspace.com/knowledge_center/article/install-the-cloud-monitoring-agent Cloud Monitoring Agent] installed on the Cloud Server for which you will be setting up Cloud Monitoring checks. | Note: This article assumes you already have the [http://www.rackspace.com/knowledge_center/article/install-the-cloud-monitoring-agent Cloud Monitoring Agent] installed on the Cloud Server for which you will be setting up Cloud Monitoring checks. | ||
− | + | ;Step #0 — Setup your environment variables (and authenticate to receive your 24-hour valid token): | |
$ ACCOUNT=<RAX_ACCOUNT> | $ ACCOUNT=<RAX_ACCOUNT> | ||
Line 16: | Line 16: | ||
python -c 'import sys,json;data=json.loads(sys.stdin.read());print data["access"]["token"]["id"]'` | python -c 'import sys,json;data=json.loads(sys.stdin.read());print data["access"]["token"]["id"]'` | ||
− | + | ;Step #1 — Get the entity ID for the Cloud Server in question: | |
$ ENDPOINT=<nowiki>https://monitoring.api.rackspacecloud.com/${ACCOUNT}</nowiki> | $ ENDPOINT=<nowiki>https://monitoring.api.rackspacecloud.com/${ACCOUNT}</nowiki> | ||
Line 25: | Line 25: | ||
$ ENTITY_ID=<FROM_OUTPUT_ABOVE> | $ ENTITY_ID=<FROM_OUTPUT_ABOVE> | ||
− | + | ;Step #2 — Create notification destinations for Cloud Monitoring alerts/"alarms": | |
$ # Create notification for 1st phone number: | $ # Create notification for 1st phone number: | ||
Line 47: | Line 47: | ||
$ NOTIFICATION_ID2=ntxxxxxxxx # See the "X-Object-ID:" header response | $ NOTIFICATION_ID2=ntxxxxxxxx # See the "X-Object-ID:" header response | ||
− | + | ;Step #3 — Create a notification plan: | |
Note: Here we will have Cloud Monitoring alert us for three different states: "WARNING", "CRITICAL", and when back to normal/"OK". | Note: Here we will have Cloud Monitoring alert us for three different states: "WARNING", "CRITICAL", and when back to normal/"OK". | ||
Line 62: | Line 62: | ||
$ NOTIFICATION_PLAN_ID=npxxxxxxxx # See the "X-Object-ID:" header response | $ NOTIFICATION_PLAN_ID=npxxxxxxxx # See the "X-Object-ID:" header response | ||
− | + | ;Step #4 — Create a Cloud Monitoring check: | |
Note: Here we will create a remote ping check (remote servers located in DFW, ORD, and LON) on the Cloud Server's public IPv4 address. Also note that '{ "count": 5 }' is the number of pings to send within a single check (this is optional and the maximum value allowed is 15). The Cloud Monitoring service will run the ping check every 60 seconds and timeout (i.e., fail) after 30 seconds. | Note: Here we will create a remote ping check (remote servers located in DFW, ORD, and LON) on the Cloud Server's public IPv4 address. Also note that '{ "count": 5 }' is the number of pings to send within a single check (this is optional and the maximum value allowed is 15). The Cloud Monitoring service will run the ping check every 60 seconds and timeout (i.e., fail) after 30 seconds. | ||
Line 89: | Line 89: | ||
python -mjson.tool | python -mjson.tool | ||
− | + | ;Step #5 — Create the Cloud Monitoring alert/"alarm": | |
Note: In this example, I will have the Cloud Monitoring service alert me if the remote ping check returns a packet loss of greater than 5% ("WARNING") or greater than 20% ("CRITICAL"). | Note: In this example, I will have the Cloud Monitoring service alert me if the remote ping check returns a packet loss of greater than 5% ("WARNING") or greater than 20% ("CRITICAL"). |
Revision as of 04:24, 31 December 2015
This article will show various examples and techniques for working with Rackspace's Cloud Monitoring (MaaS) RESTful API.
HOWTO: send Cloud Monitoring SMS alerts to multiple phone numbers
In this article, I will show you how to create a Cloud Monitoring check and send the alerts ("alarms") as an SMS to multiple phone numbers. This must be done either via direct API calls or you can use the raxmon utility. In this article, I will use direct API calls via cURL.
Note: This article assumes you already have the Cloud Monitoring Agent installed on the Cloud Server for which you will be setting up Cloud Monitoring checks.
- Step #0 — Setup your environment variables (and authenticate to receive your 24-hour valid token)
$ ACCOUNT=<RAX_ACCOUNT> $ USERNAME=<RAX_USERNAME> $ APIKEY=<RAX_API_KEY> $ TOKEN=`curl -sXPOST https://identity.api.rackspacecloud.com/v2.0/tokens \ -d'{"auth":{"RAX-KSKEY:apiKeyCredentials": "username":"'$USERNAME'","apiKey":"'$APIKEY'"}}}' \ -H"Content-type:application/json" | \ python -c 'import sys,json;data=json.loads(sys.stdin.read());print data["access"]["token"]["id"]'`
- Step #1 — Get the entity ID for the Cloud Server in question
$ ENDPOINT=https://monitoring.api.rackspacecloud.com/${ACCOUNT} $ curl -H "X-Auth-Token: $TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ "$ENDPOINT/entities" $ ENTITY_ID=<FROM_OUTPUT_ABOVE>
- Step #2 — Create notification destinations for Cloud Monitoring alerts/"alarms"
$ # Create notification for 1st phone number: $ PHONE_N1="+12065550001" $ curl -XPOST -H "X-Auth-Token: $TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d "{\"details\": {\"phone_number\": \"$PHONE_N1\"}, \"type\": \"sms\", \"label\": \"sms\"}' \ "$ENDPOINT/notifications" | python -mjson.tool $ NOTIFICATION_ID1=ntxxxxxxxx # See the "X-Object-ID:" header response $ # Create notification for 2nd phone number: $ PHONE_N2="+12065550002" $ curl -XPOST -H "X-Auth-Token: $TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d "{\"details\": {\"phone_number\": \"$PHONE_N2\"}, \"type\": \"sms\", \"label\": \"sms\"}' \ "$ENDPOINT/notifications" | python -mjson.tool $ NOTIFICATION_ID2=ntxxxxxxxx # See the "X-Object-ID:" header response
- Step #3 — Create a notification plan
Note: Here we will have Cloud Monitoring alert us for three different states: "WARNING", "CRITICAL", and when back to normal/"OK".
$ curl -iXPOST \ -H "X-Auth-Token: $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"label\": \"SMS Notification\", \"warning_state\": [\"$NOTIFICATION_ID1\", \"$NOTIFICATION_ID2\"], \"critical_state\": [\"$NOTIFICATION_ID1\", \"$NOTIFICATION_ID2\"], \"ok_state\": [\"$NOTIFICATION_ID1\", \"$NOTIFICATION_ID2\"] }" \ "$ENDPOINT/notification_plans" $ NOTIFICATION_PLAN_ID=npxxxxxxxx # See the "X-Object-ID:" header response
- Step #4 — Create a Cloud Monitoring check
Note: Here we will create a remote ping check (remote servers located in DFW, ORD, and LON) on the Cloud Server's public IPv4 address. Also note that '{ "count": 5 }' is the number of pings to send within a single check (this is optional and the maximum value allowed is 15). The Cloud Monitoring service will run the ping check every 60 seconds and timeout (i.e., fail) after 30 seconds.
$ curl -iXPOST \ -H "X-Auth-Token: $TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "details" : { "count": 5 }, "label" : "ping-check", "monitoring_zones_poll" : [ "mzdfw", "mzord", "mzlon" ], "period" : 60, "target_alias" : "public0_v4", "timeout" : 30, "type" : "remote.ping" }' \ "${ENDPOINT}/entities/${ENTITY_ID}/checks" $ CHECK_ID=chxxxxxxxx # See the "X-Object-ID:" header response
You can test this check with the following:
$ curl -sXPOST \ -H "X-Auth-Token: $TOKEN" \ -H "Accept: application/json" \ "$ENDPOINT/entities/${ENTITY_ID}/checks/chw3sYBsFz/test"|\ python -mjson.tool
- Step #5 — Create the Cloud Monitoring alert/"alarm"
Note: In this example, I will have the Cloud Monitoring service alert me if the remote ping check returns a packet loss of greater than 5% ("WARNING") or greater than 20% ("CRITICAL").
$ curl -iXPOST \ -H "X-Auth-Token: $TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d "{\"label\": \"ping-check-sms\", \"notification_plan_id\": \"$NOTIFICATION_PLAN_ID\", \"check_id\": \"$CHECK_ID\", \"criteria\": \"if (metric['available'] < 80) {\n return new AlarmStatus(CRITICAL, 'Packet loss is greater than 20%');\n}\n\nif (metric['available'] < 95) {\n return new AlarmStatus(WARNING, 'Packet loss is greater than 5%');\n}\n\nreturn new AlarmStatus(OK, 'Packet loss is normal');\"}" \ "$ENDPOINT/entities/$ENTITY_ID/alarms"
That's it! Now, every time your Cloud Server fails the remote ping test for the criteria given, the Cloud Monitoring service will send SMS alerts to those two phone numbers.