Automated Diagnostics and Sub-minute Intervals

We’ve added a couple of new features to help you reduce downtime by keeping a closer eye on your services and getting you the information you need to troubleshoot when they fail.

Sub-minute Intervals

You can now set your check interval to 15 or 30 seconds. Shorter check intervals can detect and alert you to problems more quickly. The faster we detect it, the faster you can respond, the faster your service recovers.

Additional fees apply.

  • 30 second intervals – $0.20/check/month – only applies to enabled checks set to 30-second interval.
  • 15 second intervals – $0.40/check/month – only applies to enabled checks set to 15-second interval.

Sub-minute interval costs are calculated on active peak-usage, are post-paid, and will be charged on your next month’s invoice.

When seconds count, use sub-minute check intervals.

Automated Diagnostics

When a service fails, the first thing you want know is why.

When you enable Automated Diagnostics for a check, as soon as we detect it down, we’ll give you as much information about the failure as we have in the email notification.

For all check types, we provide any DNS resolution and full error message.

Each check type will have the most relevant data for that type. For example: HTTP-type checks, we give you the full request and response headers along with the first 250kb of data returned, SMTP checks, we provide the full SMTP conversation (commands and responses).

That info is sent in the ‘down’ email notification and saved to the event data so you can see it in the check status report.

We also trigger appropriate diagnostics based on the failure.

For timeouts and connection issues, we run an MTR from each probe that verified the failure so you can quickly see if it’s packet-loss, routing issues, or a firewall causing your service to fail.

For DNS issues, we run dig queries against all the listed nameservers for the FQDN so you can see if any are responding with expired or wrong data.

These automated diagnostic results are recorded in the event data for the check and optionally emailed to the contacts listed on the check as soon as we get the results.

This means you get fast and accurate info to help you troubleshoot, which means quicker interventions and less downtime.

Pricing and Plan Changes

Introduced with these new features is our new NodePing pricing changes and plans.

  • Personal – $10/month
  • Professional – $25/month
  • Premiere – $80/month

Additional pricing info can be found on our pricing page.

This is the second plan/pricing change in NodePing’s 10-year history. The last change was 9 years ago (2012). Our costs have risen over the years and the new features are pricey for us to offer.

Existing customers are grandfathered into their current plans/pricing but can upgrade at any time to get access to these new features.

If you do not yet have a NodePing account, please sign up for our free 15-day trial and see for yourself how these great new features reduce your downtime.

Status Reports Update

At NodePing, our emphasis has always been on solid reliability, and building the monitoring system that we would want to use. That means it does what it should, cost effectively, consistently and without fuss, and provides the variety of monitoring people need. We’ve never been the prettiest. We think we’re one of the best.

But even we agree that attractive status reporting is important. So we’re releasing a significant update to our status reporting that allows our customers to have both public and private status reporting that is rich, dynamic, informative, and detailed, all while hopefully being nice to look at.

All of the plan levels at NodePing have supported multiple public status reports for a long time. In addition to being prettier, the new report adds a ton of customization options that allow you to use the status reporting in a way that fits your particular need. That includes turning on and off each category of information that the report supports and customizing how it all looks.

Status ReportEvery check on NodePing now also has an individual check status page, which you can make public or keep private (the default). Private reports mean that people need a login to your account on NodePing to access the report. Of course, you can have unlimited logins for your account, and give users logins to subaccounts, which makes this really flexible as well.

The enhanced status reporting can show check properties, uptime, results (charted and listings of individual results), events, and custom notes. Each category of information can be shown or removed from the report, and all of them have options you can configure. All of that is designed to hopefully work the way you need it to, for your specific use case.

The new reporting is described more fully in our documentation, and all of the switches, toggles, and labels are described in help text in the settings panels of the reports. Give it a try and let us know what you think!

If you don’t have a NodePing account yet, now’s a good time to take advantage of our 15-day, free trial. Once you sign up and have some monitoring checks set up, go to Account Settings, then Reporting to add your first Status Report.

Auditing IP Resolution with DNS Checks

How would you know if your DNS account had been compromised?  If tampered with, an attacker could point your web and email traffic to their own controlled servers, enabling them to intercept potentially confidential information from you or your customers without your knowledge.

Emergency Directive 19-01

Recently, the US Department of Homeland Security issued its first ever Emergency Directive with a list of actions to mitigate DNS account tampering, an issue they report is on the raise.

The first recommended actions in their directive is to verify DNS resolution.

Action One: Audit DNS Records … audit public DNS records on all authoritative and secondary DNS servers to verify they resolve to the intended location.

In this post, I’ll show you how to continually monitor your DNS resolution using NodePing DNS checks to ensure your important domain names are resolving to the expected IP addresses. If anyone tamplers with your DNS records, you’ll quickly receive actionable notifications from NodePing.

Some of the record types you may want to verify with DNS checks are:

  • SOA – Start of Authority record
  • NS – Nameservers and the IPs they resolve to
  • Website FQDN
  • Website FQDN with www prefix (example: http://www.nodeping.com)
  • Email MX records and the IPs they resolve to
  • IMAP, POP, and SMTP FQDNs
  • FTP service FQDNs
  • All the above services for both IPv4 and IPv6 addresses

Setting up DNS monitoring

To create a new DNS check, click on the “Add new check” button in your NodePing account dashboard.

  1. Select DNS from the Check type drop down.
  2. Give it a friendly label to identify this check in lists and notifications.  Something like “Website resolver”
  3. Set how often you want the check to run on the Check Frequency field.  We recommend 1 minute intervals.
  4. Leave the DNS server field blank.  This will ensure that our probes will use whatever nameservers are listed on the domain.  If a hijacker accesses your DNS account , they’ll likely change the IPs of the nameservers so testing your own nameservers won’t be helpful for this type of monitoring.
  5. Enter the type of query you want to perform, and address you want the check to look up. Usually this should be a fully qualified domain name. It should not include “http://” or “https://”. Example : ‘nodeping.com’ or ’email.nodeping.com’ or ‘www.nodeping.com’
  6. Enter the information the check should look for in the DNS resolution response to verify the query has not been tampered with. What you put in this field will depend on the query type. For example, for A records, this will be your IPv4 address. For other types, such as MX or NS records, this is likely to be a fully qualified domain name. For AAAA records, the full notation is required. Example: IPv6 address 2606:c700:4020:11::53:4a3b requires the ‘missing’ zero sections – 2606:c700:4020:11:0:0:53:4a3b – there should be 8 sections total.
  7. Set a time out. The default 5 seconds works fine for most situations.
  8. Set the Sensitivity. High is usually appropriate.
  9. Set the notifications for this check. More information about notifications.

If your services are offered on both IPv4 and IPv6, you’ll need to create a separate check for each with the appropriate query type set to ‘A’ for IPv4 and ‘AAAA’ for IPv6.

Setting up one DNS check for every critical server and service will give you the peace of mind that your DNS hasn’t been tampered with and your customers are interacting with you, not some DNS hijacker.

Got questions or need help setting up DNS resolution audit checks?  Contact us; we’re happy to help.

If you don’t yet have a NodePing account, please sign up for our free, 15-day trial and sleep well knowing we’re keeping an eye on your DNS resolution.

Threaded Notification Emails

We have a new feature to make it easier to keep track of email notifications. Previously, each email notification started a new email thread or conversation, even if it was just reported that a formerly reported down check was now up. Now, our Business and Provider plans have the option of grouping these emails together through Branding. If you got a “Host Down” email, for example, you can set the “Host Up” message to be sent as a reply to the original email. This feature was made with the goal of keeping track of email notifications easier.

On the back end, we’ve added message references to our emails so your email client knows that the “Up” message is related to the “Down” message.

However, not all email systems will identify that messages are related to each other just based on the “reply-to” and “references” ID’s.  For gmail and some other email services, in order to enable this feature,  you’ll need to adjust your NodePing settings to make your up and down email subject lines identical.  To do this, first login to your NodePing account. Then go to the Account settings tab, then the Branding tab under it.  All you need to do to receive your up and down emails on the same thread is set their subject lines to match. Scroll down to Up Notifications: Email “Message Subject:”and set it to match Down Notification: Email’s “Message Subject:”, or vice versa. Or, you could set their subject line to be something else entirely; the important thing is that they are identical.

By the way, the notification branding lets you do a lot more besides just make the subject lines match for message threading.  You can customize what your notifications say and what information is included.  There’s more information about this powerful feature in our documentation.

We hope you find this feature helpful. If you haven’t tried NodePing yet, you can get a free fifteen-day trial here. If you have questions or comments, email us at support@nodeping.com.

Bulk Edit for Checks

Many of our customers have requested the ability to edit a large amount of checks at once. Previously, we have suggested using the API to edit checks, and while that still is a good option, we are glad to announce that we have enabled bulk check editing on our website as well. *Throws party* *Throws confetti* *Throws spaghetti*

Bulk Edit ScreenshotSigning into your account at https://nodeping.com/login.html will bring you to the homepage, where you can simply tick off the checks you want to edit, or check off the box at the top next to “Type” to select every check currently displayed on the list at once.

Then press “Bulk Edit”, next to the “Check Status” and “Add new check” button. If you forget to select any checks before pressing “Bulk Edit”, a pop-up will gently but firmly and lovingly remind you tick the checkboxes.

For Bulk Edits the dialog will show settings that you can set on all of the checks you selected.  Only check properties that are common for the selected checks are shown. As a result, you’ll typically have the ability to modify the most properties if the checks you have selected are all of the same check type.

Some fields in the Bulk Edit dialog may say “[Various Values]”.  Leaving these fields as they are will leave all of the checks you’re editing with their individual values for that field.

One important thing to note is that changing notifications will change all of the notification settings on all of the checks to whatever you set in the dialog.  This isn’t additive, so it doesn’t merge different notification settings. It replaces the existing notification settings with the notifications you select in the Bulk Edit.

After you have changed the checks, press “save” and the checks will be automatically updated with your changes.

Hopefully you will find Bulk Edits helpful. To contact us, email us at support@nodeping.com. If you don’t have a NodePing account, you can sign up for our free 15-day trial by clicking the link.

 

Import Script for NodePing

Moving your uptime monitoring to NodePing is now even easier.

We have a fresh Node.js script that will import your checks from Pingdom, StatusCake, or Uptime Robot. *

The script will create contacts, checks, and configure notifications in NodePing to match your current provider.

The script and instructions on how to implement it can be found on our GitHub page. Some services don’t map to NodePing’s features very well so be sure to look at the known limitations section.

If you don’t see your current provider supported by our import script, please let us know and we’ll do our best to get it added.

Don’t have a NodePing account yet? You can sign up for a free, 15-day trial at https://nodeping.com

* service names are trademarked and belong to their respective owners.

Telegram Notifications

This post will provide instructions on how to get NodePing notifications via Telegram using NodePing Webhooks and Telegram Bots.  Webhooks are available in our Business and Provider plans.

The Telegram Bot system is very useful for integrating with Telegram. Nodeping webhooks work seamlessly with the Telegram Bot to send ‘down’ and ‘up’ notifications. It’s a great alternative to SMS that is also cross-platform.

First, you will need to set up a Telegram account for yourself if you haven’t already. This can be done by getting the app on your mobile device or computer (there are Windows/macOS/Linux clients, as well as unofficially supported for FreeBSD). A working phone number will be required to set up an account.

Next, you need to create your own Telegram Bot.  To do this, you’ll have to to chat with Telegram’s own BotFather (a bot that creates other bots – the end is nigh!) You can find it by typing “@BotFather” into the user search bar in Telegram. Once you have started a chat with it, you will be prompted with a message from the BotFather.

Create your own bot by simply typing “/newbot” and following the instructions that are given. Here is a screenshot of what setting up a new bot setup looks like:

That long token is important.

Now that you have your new Telegram Bot and token, you’ll need to get the ChatID for the user or channel you want to send notifications to. This can be done by starting a chat with your new bot inside Telegram. You would start the chat like you did with BotFather, by typing in @nameofyourbot followed by sending “/start” to the bot. With that done, you can get the ChatID by visting the URL that shows your bot’s updates.  That URL will look like:

https://api.telegram.org/bot<your-secret-bot-token>/getUpdates

Plop that in your browser and you’ll get back some text – JSON formatted text.

The reply is the updates for your Telegram bot, which should only include the chat your telegram user started with the bot a few seconds ago. Look through the JSON response for the ChatID. It will be a random looking number thing.

Now that you have the ChatID, you’ll need to configure a new Webhook in NodePing. Log in and go to the Contacts tab. Add a new contact and give it a name – like “Telegram Bot”. Select the “Webhook” notification type and change the action to “POST”. Enter the following value in the URL field (replacing <your-secret-bot-token> with… you know, your bot token):

https://api.telegram.org/bot<your-secret-bot-token>/sendMessage

Next, in the Headers section add a new key called “Content-Type” and the value of “application/json”. It should look like this:

Then click on the the Body section.  In the text area, you need to add the following JSON.

{“chat_id”:<your-ChatID>,”text”:”NodePing: – {label}: {type} is {event}”}

Then save your newly minted webhook.  It’s ready to be added to the notification section of your checks.

Now you can receive NodePing notifications via Telegram!

Your alerts will look something like this.

Telegram bots have a lot more functionality that you can read about.  NodePing webhooks can also do a lot more, like templating and conditional statements, which you can read about.

If you need help getting things working right, please let us know at support@nodeping.com.  If you don’t yet have a NodePing account, please sign up for our free 15-day trial.

The NodePing API and PowerShell

At NodePing we interact with our own API quite a bit from the command line.  Most of that is from bash on Linux, because that’s where we live most of our lives.  But the API works well from just about any scripting environment.  Since our documentation examples all use curl with bash syntax, it seemed like it might be a good idea to also write up some examples of using other tools.  Here, as the first installment of that effort, is a handful of examples of using PowerShell with the NodePing API.

Full disclosure: PowerShell is not an environment we spend a lot of time working with.  There are likely ways to do some of this better.  We’ve tested the example calls in this post.  Hopefully it is enough to get you started if you work with PowerShell.

Basic GET Calls

Basic calls are quite simple to make using Invoke-RestMethod.  If you have the check ID, getting a check is quite easy:

Invoke-RestMethod ‘https://api.nodeping.com/api/1/checks/201205050153W2Q4C-OJ2HSIRF?token=[token]’

This returns a JSON object, which PowerShell handles easily.

_id : 201205050153W2Q4C-0J2HSIRF
description : This is the description, if the check has one.
public : False
customer_id : 201205050153W2Q4C
queue : nyI8JSL23W
interval : 1
created : 1427513104608
pro : nodeping.com
modified : 1510332098196
parameters : @{target=https://example.com/; follow=False; threshold=5; sens=2; invert=False; verify=false}
firstdown : 0
label : Keep me
runlocations : False
enable : active
uuid : bd3eha9o-z2m5-4qg2-9k8b-jqq0kiituyxz
state : 1
status : assigned
notifications : {}
type : HTTP
acctdisable : False
suspacct : False
dep : False

Note that “parameters” is another hash.  You can refer to the fields in the check as properties of the returned object, including properties that are hashes themselves.  So, for example, this will give you the check check threshold, which is part of “parameters”.

$check = Invoke-RestMethod ‘https://api.nodeping.com/api/1/checks/201205050153W2Q4C-0J2HSIRF?token=[token]’ ;
$check.parameters.threshold;

API Authentication

PowerShell doesn’t easily support basic authentication.  Since the NodePing API supports passing the token as a parameter, the easiest approach is to include it in the query string, as I did in the example above.  In most cases I prefer to pass it in the Body, as I’ll show in examples below.  If you’re working with a script its usually easiest to set a $token variable and use that throughout your script.  If you’re just sending a URL as I did in the simple GET calls above, actually putting in the query string works fine.

If you’re using the API in scripts that make several calls to the API, you might want a more reusable way to pass the token that keeps it out of your Body.  You can do this by manually building the headers.  That requires base64 encoding the credentials and then setting that using the -Headers argument. That looks something like this:

$hash = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $token,"")))

Then set the -Header argument to @{Authorization=(“Basic {0}” -f $hash)}

Or, if you are doing this several times, you will probably want to set this to a variable you can reuse.

Some sites suggest that you create a credential object using ConvertTo-SecureString and Management.Automation.PSCredential, and pass that using the -Credential argument.  However, this won’t work with the NodePing API, since the -Credential option waits for the challenge to send the authorization header.  The API is stateless, and expects the header on each request.

Put and Post Calls

We recommend that you use JSON to set fields for our API in most environments.  However, PowerShell does not automatically handle sending the body as JSON.  For POST calls, this isn’t a big deal, and you can just POST the body as it is and Invoke-RestMethod sends the data as if it were a form.  PUT and DELETE calls don’t work that way.  For those, you have to convert to JSON, or include all of your parameters in a query string.

Creating a check looks like this:

Invoke-RestMethod 'https://api.nodeping.com/api/1/checks' -Method Post -Body @{ 
    label='test label' 
    type="HTTP"
    target="http://example.com"
    token=$token 
}

This call will return an object with the new check.  You can add any of the other fields listed in our documentation.

Updating a check is almost the same.  This can all be done on one line, but we’ll split it out here to make it easier to see.

$data = @{ label='a new label'; type="HTTP"; interval=5; token=$token } | ConvertTo-Json
Invoke-RestMethod 'https://api.nodeping.com/api/1/checks/201205050153W2Q4C-0J2HSIRF' -Method Put -Body $data

Note that since we’re updating a check, we need to include the check ID.  As with the Post call, the Put call returns the updated check object.

Working with Lists of Checks

Working with a list of checks is slightly trickier.  The call returns a JSON object with a list of checks using the ID as the key.  For PowerShell, this is a hash table of hashes.  So to list checks, you would do something like this:

Invoke-RestMethod 'https://api.nodeping.com/api/1/checks' -Body @{ token=$token } | %{ $_.PSOBJECT.Properties.value }

This is actually fairly handy, because you can fairly easily list a specific field from the response.  For example, this lists all of the targets from all of the checks on this account:

Invoke-RestMethod 'https://api.nodeping.com/api/1/checks' -Body @{ token=$token } | %{ $_.PSOBJECT.Properties.value.parameters.target }

You could do all sorts of things at this point.  For example, here’s a list of all checks that include “nodeping” somewhere in the check’s target:

Invoke-RestMethod 'https://api.nodeping.com/api/1/checks' -Method Get -Body @{ token=$token } | %{ foreach($value in $_.PSOBJECT.Properties.value){ if($value.parameters.target -like "*nodeping*"){ $value } } }

This is practical as a way to find a check with a specific target up to a few thousand checks.

Getting Results

Applying the same principles should let you do just about anything with the NodePing API.  Applying the same pattern to a results call, for example:

Invoke-RestMethod 'https://api.nodeping.com/api/1/results/201205050153W2Q4C-0J2HSIRF' -Method Get -Body @{ token=$token; limit=2; clean=1 }

Note that you’ll want to always include the “clean” parameter for results.  The unclean response takes more parsing.

The options available for results calls are documented here:
https://nodeping.com/docs-api-results.html

Profit!

That’s the basics of using PowerShell to interact with the NodePing API.  With the API you can add checks, remove checks, get your results and uptime, manage contacts and notifications, and add and manage subaccounts.  Our customers use the API both for programmed integrations, and from the command line using quick scripts like the ones I demonstrated here to make quick changes to several (or lots) of checks at once.

If you’re doing interesting things with PowerShell and the NodePing API, we’d like to hear about it!  Please email support and let us know.  That’s also a great place to ask us questions.  We’re happy to help people interact with our service.

Notification Escalations on NodePing

Most systems run smoothly most of the time.  Servers keep running.  Web sites serve pages and deliver data from backend databases.  DNS servers respond to queries with hardly any delay at all.  Email flows smoothly.

Emergency_light_with_grillIt’s that tiny percent of the time that it doesn’t work that way that causes the heartburn.  A server that has been running just fine for months suddenly hiccups.  But even when that happens, it’s usually a hiccup.  The person who is the first line of responsibility for that service needs to know right away.  They jump on it, clear the problem, and things go back to humming like normal.  You need fast and reliable monitoring to help keep these interruptions to service short.  A lot of times, the service is back to normal before most people realize there was an issue.  These incidents likely go in a report, but the rest of the team doesn’t need to get involved.  Its dealt with, duly noted, and life goes on.

Then there are the times that something goes really wrong.  The first line is working on it, but the server isn’t going to be back up in a minute or two.  Or the first line person is not available.  Maybe he’s in accounting trying to sort out his paperwork for credit card expenses for last month.  Someone else needs to know that things are down.

Sometimes these situations turn into real disasters.  The website is down.  Upper management is going to be calling, wondering who’s spilling revenue out on the server room floor.  The manager getting that call wants to know about it before the phone rings with that call.

Most monitoring systems use escalating notifications to handle these situations.  If a system is down, the first line person should be notified immediately.  If it’s down for a few minutes, the people who back him up need to be brought in.  If it’s down longer than that, systems management will want to get a heads up.

NodePing uses the notification delay feature to provide notification escalations.  A delay can be set on each notification contact for each check.  The NodePing notification delay feature notes that a check set with a delayed notification has gone down.  After the delay interval has been reached, if the check is still “down” we send the notification to that contact.

Set up the first line systems with no delay, so they’ll get notified when the system goes down right away.  If the service hasn’t recovered in a few minutes, send a notification to the systems group using a contact group.  Then, if the service hasn’t recovered in 10 minutes (or whatever the tolerance for the service being down is for this service in your organization), notify the systems management.

The notification delay feature can be used for other things besides notifications.  Sometimes services have a higher tolerance for transient interruptions.  You can use the delay to mean “if this service is down shorter than 3 minutes, I don’t need to be notified.”  This is useful, for example, for services in remote locations where Internet connectivity can have brief interruptions.  But our most common request for using the delays are for notification escalations.

 

Creating Clones

Have you ever wanted to be an evil genius and create a clone army to take over the universe? Well, we can’t help you with that but we do have a “Clone Check” feature. It might not take over the universe, but it can be a great time-saver.

ca

When you want to create a check that is similar to one you already have, you can use our “Clone Check” feature to create a new check based on the settings of an existing check. You can then change whichever fields you choose, such as the URL or check type, as well as the label. This saves you from having to type in the various fields over and over or set complicated notifications, delays, etc, when you already have a similar check ripe for cloning.

To clone a check, log into your NodePing account, and go to the “Checks” tab. Click on the label for the check you want to duplicate to open the information drawer. On the lower right, there are a list of links, including “Clone Check”. Clicking on it will bring up a new dialog for the cloned check with all of the values preset based on the check you are cloning. You can change the fields to fit the new check you want. Then click “Save” at the bottom of the dialog.

Who knows? If you create enough, maybe you can take over the universe.