URL WEB MONITORING SERVICES

A Project

Presented to the faculty of the Department of Computer Science

California State University, Sacramento

Submitted in partial satisfaction of the requirements for the degree of

MASTER OF SCIENCE

in

Computer Science

by

Prachi Saxena

SPRING 2018

© 2018

Prachi Saxena

ALL RIGHTS RESERVED

ii

URL WEB MONITORING SERVICES

A Project

by

Prachi Saxena

Approved by:

______, Committee Chair Dr. Ahmed Salem

______, Second Reader Prof. Haiquan Chen

______Date

iii

Student:Prachi Saxena

I certify that this student has met the requirements for format contained in the University format manual, and that this project is suitable for shelving in the Library and credit is to be awarded for the project.

______, Graduate Coordinator ______Dr. Jinsong Ouyang Date

Department of Computer Science

iv

Abstract

of

URL WEB MONITORING SERVICES

by

Prachi Saxena

With the high increase of Web applications and devolvement and usage, monitoring web applications and websites became a necessity to minimize the risk of vulnerability, failures and customer dissatisfaction. The aim of this project is address these issues and develop a centralized service monitoring tool to conduct assessment and collecting relevant Information of the targeted system. This tool is designed to provide more responsive access and cost effective notification to system issues. Furthermore, the tool would allow the creation of alerts by generating report for errors and issues,

Monitors overall system status at single source and helps reduces service downtime and improve the overall user experience. The tool services will be provided without SMTP obligations and using Power Shell and AWS (SNS) Web Monitoring Service.

______, Committee Chair Dr. Ahmed Salem

______Date

v

ACKNOWLEGMENT

I would like to thank my advisor Dr. Ahmed Salem for guiding me throughout this

Project. This project would not appear in its present form without his kind assistance and support. I owe a deep debt of gratitude to my advisor for his belief in my abilities, his enthusiasm for this project, and his continuous insistence that I make it better. He provided encouragement, sound advice, good teaching, and lots of good ideas.

I would also like to thank Department of Computer Science at California State

University, Sacramento for giving me an opportunity to pursue Masters in Computer

Science and guiding me to become a successful student.

vi

DEDICATION

To My Family

vii

TABLE OF CONTENTS Page Acknowledgments ...... vi

Dedication ...... vii

List of Figures ...... ix

Chapter

1. INTRODUCTION ….……….………………………………………………….. 1

1.1. Problem Definition ...... 1

1.2. Motivation...... 2

1.3. Technologies Used ...... 2

2. BACKGROUND ...... 3

2.1. Ping ...... 3

2.2. Robot ...... 5

2.3. Status Cake ...... 6

2.4. App-Dynamics ...... 7

3. PROJECT DESIGN ...... 8

3.1. Project Architecture ...... 10

3.1.1. Architecture Components ...... 11

4. PROJECT IMPLEMENTATION...... 13

4.1. Sample Code ...... 13

4.2. Project Execution ...... 17

4.2.1. Output Report ...... 18

viii

4.2.2. Output Description Report ...... 19

5. MONITORING PROCESS ...... 20

5.1. Services Description ...... 21

5.2. Deployment of Services ...... 23

5.3. Writing A YAML File to Run Services ...... 25

5.4. Service Implementation Results...... 32

5.4.1. View Services Status Details for all Host Group ...... 32

5.4.2. Network Health ...... 33

5.4.3. Network Outage ...... 34

6. CONCLUSION ...... 35

References ...... 36

ix

LIST OF FIGURES Figures Page

1. Ping…………………………………………………………………………...3

2. Uptime Robot………………………………………………………………...5

3. Status Cake………………………………………………………………...... 6

4. App-Dynamics…………………………………………………………….....7

5. Project Architecture………………………………………………………....10

6. Project Execution…………………………………………………………...17

7. Output Report……………………………………………………………….18

8. Host Machines……………………………………………………………....20

9. Services Health Record……………………………………………………..22

10. Status Details for all Host Group…………………………………………...32

11. Network Health Status……………………………………………………...33

12. Network Outage Status……………………………………………………...34

x

1

Chapter 1

INTRODUCTION

1.1.Problem Definition

During my summer internship, I have gotten hands-on experience of testing, deploying and monitoring services and application running in a network environment using tools like App-Dynamics, Go-daddy, and many others. These tools are being highly used and recommended in the IT sector. These tools which are efficient and quite successful in reporting the bugs on time and resolving them, but do have room for improvements.

The reason that has motivated me to work on this project is a yearning to make a system monitoring experience for organizations or teams to be more qualitative and informative in order to protect the system from abnormality. The tools mentioned above have their own shortcomings; they are open source tools, but that depends on the applications you are running. Secondly, they use pi-charts, histograms, and graphs to depict the status of systems or URLs, which may not be the most desirable way to understand the reasons of failure.

In this project, the approach is to provide precise but comprehensive information which can help users and engineers identify issues more easily within a single source and yet a tool that can be stored and managed with minimum memory and low-cost.

2

1.2. Motivation

As a software engineer, I have a tendency to find imperfections in every software, application, device or User Interface I use. I always think what existing features can be eradicated or added to make an application more user-friendly, efficient, accurate and human centric. This can provide successful monitoring and deploying of applications and services.

In this project, the goal is to work on the shortcomings of already existing commercial tools in terms of efficiency, preciseness, applicability and security. The main motivation is how to make a precise, comprehensive, secure and cost-efficient open source software application in order to serve the purpose of web monitoring.

1.3. Technologies Used

● Power Shell Scripting.

● AWS SNS Services.

● Ansible Software

● Nagios

● HTML

● AWS EC2 instance.

3

Chapter 2

BACKGROUND

This section will provide a brief introduction to current applications and will be explain why the proposed solution is important to be practiced. Here, we are going to discuss about Ping, Status Cake, App-Dynamics in details in subsequent sections.

2.1. Ping

Figure 1: Ping

4

As shown in Fig. 1, ping is an internet program that allows a user to confirm if a particular IP address exists and accepts requests made by the user on that host. It also has the ability to ensure that a host node that users are trying to reach is actually an operating system. The ping is also known as a software utility to test the availability of a host from a user network. This is a call from the host to identify if another system it is trying to reach is available on the requested network.

Ping uses ICMP protocol to send messages or packets from one host to another and also to report any errors. It is essentially a request-response method used by ping. This is an overhead on the processor and it also results in a delayed configuration in case of packet loss.

It provides the system uptime status, but it is limited within the network and does not provide the reason of failure.

5

2.2. Uptime Robot

Uptime Robot is also a very popular URLs monitoring method. It is used by leading software organizations to keep their system services consistent, prevent data and users losses and maintain customer satisfaction. It is also a partially open source system and has its limitations in the information presented to users. It offers the ability to process information up to fifty requests at a time and reports back after gathering the data from the servers.

It checks the requests by sending an HTTP[1] header which has an IP address and other information of the requested host that cause the processor to look the DNS table to find the IP of the address of a requested host. This is famous, but the information provided on the dashboard as shown in Fig. 2, is vague and need a lot of troubleshooting to identify a browser error and reason for failures, hence the delay in fixing the issue.

Figure 2: Uptime Robot

6

2.3. Status Cake

This is another monitoring service which provides unlimited requests and notifications on its system. This is also not an open source technique, but it has a premium plan, which includes additional advanced features like virus checking, SSL monitoring technique, browser of testing etc. This provides information on the machine via percentage as shown in Fig. 3.

They offer free plans as well, which include unlimited monitoring of hosts, unlimited failure alerts and five minutes check rates. This provides the option to decide how and when alerts will appear on your machine or by what means they will appear. For example

SMS and push notification for MacOS or Android.

Figure 3: Status Cake

7

2.4. App-Dynamics

App-Dynamics is an Application Performance Management (APM) and IT operations analytics tool. This tool works for managing the performance and availability of applications running in environment.

App-Dynamic has features that automatically discovers the nodes, maps, and visualizes your critical application journeys through each application service running and the dependencies in the infrastructure. In this application each server-side is treated as a node and each node has its defined users as shown in Fig. 4. It monitors whole node at time instead of just one service which makes it very efficient in term of performance and reducing overhead on machine. App-dynamic is an open-source but really depends on what you want to use as they are specific applications needs special attention and treated individually.

Figure 4: App-Dynamics

8

Chapter 3

PROJECT DESIGN

In this project, the aim is to implement monitoring service for enterprise use. This service will monitor the within an enterprise and notify the user and the administrator in case of any failures, breakdowns, and hacks. This monitoring process is cost-free, will be automated by running tasks on task scheduler and will further generate all website status data in predefined reports.

The idea is that when an error or failure is detected, the monitoring services will send out alerts via , SMS, phone, SNMP trap, which will include diagnostic information, such as an HTTP status code, status description, response time, URL, failure causes.

These diagnostics are not only useful for the IT staff but for executives as well. The benefits are to gain specific and relevant information, identify and resolve issues on time.

Also, gather real-time health metrics correlated with any configuration changes or updates.

It allows to use [2] cloud-based command center by which you can track all sites running traffic, load balancing, latency and numerous other factors that determine how your online presence are running up to everything from e-commerce surges to large-scale web outages on the web. This tool has an ability to proactively test website with a real browser using web checkpoints. It also allows engineers and users to detect when something breaks before customers do so which will make business loss minimal or even negligible.

9

It also maintains continuous automated API testing in order to monitor any changes in the environment so that configurations can be manipulated accordingly. Effectively monitoring API uptime and set up API calls for responses verification.

This tool proactively tests the website with a real browser using web checkpoints. It allows users and engineers to detect any issues or defects to minimize business loss or interpretations in service. It also maintains continuous automated API testing in order to monitor changing circumstances so that configurations can be manipulated accordingly.

10

3.1. Project Architecture

As shown in Fig. 5, it describes the flow of architecture components. The subsequent topics will describe what each component will be contributing in monitoring the web

URL.

The Fig. 5 shows how the HTTP requests goes to the server and how server collaborates with API to return back the URLs and their current states.

Figure 5: Project Architecture

11

3.1.1. Architecture Components

Client Server

In order to test and monitor a set of URLs, its needed that the client machine to request

URL to server those are subjected to monitoring, though it can be done by several methods, in this project chosen URLs are knitted in a text file to identify them easily.

This file will be a called from a well-defined script object and thus shell object will fetch those URL by connecting to the server and bring their status report and drop the information in HTML format file. The URLs will be monitored continuously on time scheduler set time interval.

AWS Server

Two machines are needed for the purpose of testing the environment and monitoring the health matrix. The two machines are named -Ubuntu and localhost. There are also a variety of methods and resources available to build engineer’s own servers – in AWS they are referred to EC2 instance. These can be created on Amazon Web Service or on

Google Cloud. These are the machines on which services are running – in essence they are like any platform where engineers can run their applications. These machines are just tools to access the application. In AWS EC2 [3]instance enables us to run the services and URLs on an independent platform. This can be a client-server or running within an enterprise to access the services.

12

HTML Report:

The report on which data will be append is HTML report. This is linked to task scheduler that runs the program on intervals set by user and update databases or repository with the appropriate data. In this project, the task scheduler is used to automate the process of monitoring. Its aim is to pull the data from the server about the health of the website and append this data to the report which was created at the start of this process. The goal also is to make complete use of information and data analysis to predict future interferences.

This particular task created on the task scheduler will pull up the target URLs in a certain time interval. Every time it runs, it appends the web status details to HTML file. This will help to produce the report in order to analyze the details of the system and provide measures to resolve, in a timely manner, any issues and protect future abruptions.[4]

Apache Falcon Rest API

This project utilized the concept of REST API to make HTTP calls which can be GET,

POST, and DEL etc. Whenever a web call is made a specific HTTP request gets activated asthese requests have several categories like GET, POST, DEL, PUT etc. [5]

Notification (Send Notification Service)

This is an Amazon services to send notifications by creating a method in AWS environment. This feature will help to allow notification to report error or when HTTP status code is other than 200 OK. This service will send a notification to the end user in case of URL failure by connecting remotely to SMTP.

13

Chapter 4

PROJECT IMPLEMENTATION

4.1. Sample Code

The section below is to describe the programming part of the project. It define a function which accepts the HTTP requests from client machine (browser) to the server running on port 80, the server searches the IP address of the requested URL hosted on the server and it returns back the URL status with current HTTP status code, description and status response length.

Program

Function Reports { param(

[Parameter (Mandatory=$true)]$Url

)

Write-Host "URL has failed"

$EmailToa = "[email protected] "

$EmailFroma = "[email protected]"

$EmailSubjectt = "Requested Url Failure Notification - " + $URL

$EmailCC = "[email protected]"

$EmailBody = "This URL (" + $Url + ") is currently not reachable please try after sometime or fix the cause"

14

$EmailSMTP = "wsrelay.vsp.com"

Send-MailMessages -From $EmailFroma -To $EmailToa -cc $EmailCC -Subject

$EmailSubjectt-Body $EmailBody -SmtpServer $EmailSMTP

}

$URLListFile = "URLList1.txt"

$URLList1 = Get-Content $URLListFile–ErrorActionSilentlyContinue

$Result = @()

Foreach($Uri in $URLList1) {

$time = try {

$request = $null

$exception = $null

## Request the URI, and measure how long the response took.

Measure-Command { $request = Invoke-WebRequest -Uri $uri }

# $result1.TotalMilliseconds

} catch{

<# If the request generated an exception (i.e.: 500 server error or 404 not found), we can pull the status code from the

Exception.Response property #>

##Write-Output $_.Exception

$exception = $_.Exception

15

}

$result += [PSCustomObject] @{

Time = Get-Date;

Uri = $uri;

StatusCode = [int]$request.StatusCode;

StatusDescription = $request.StatusDescription;

TimeTaken= $time;

Exception = $exception;

}

}

#Prepare email body in HTML format if($result -ne $null)

{

$Outputreport = "Website Availability Report

Website Availability Report

"

For each ($Entry in $Result)

{ if($Entry.StatusCode -ne "200")

{

$Outputreport += "

"

Report -Url $EntRy.uri

} else

{

$Outputreport += "

"

}

$Outputreport += "

"

}

$Outputreport += "

URLStatusCodeSta

16 tusDescription

ResponseLengthTimeTaken<

/B>

TimeException
$($Entry.uri)$($Entry.StatusCode)$($Entry.StatusDescription)$($Entry.ResponseLength)$($Entry.timetaken)$($Entry.Time)$($Entry.Exception)
"

} Add-Content reports.html $OutputReport

17

4.2. Project Execution

The Fig. 6 describes the steps to execute the tool. This power shell editor is allowing running a power shell script with .ps1 extension. As soon as the script runs it appends the data in to the HTML [4] file defined in the power shell script. This, in turns, allow sending a notification to the user whenever any URL failed to provide HTTP 200 OK status.

Figure 6: Project Execution

18

4.2.1. Output Report

The Fig. 7 provides the output report for the URL being monitored. This report will include HTTP status code, status description, response length, and time taken to return the result information.

Figure 7: Output Report

19

4.2.2. Output Description Report

As in Fig. 7 shows, this is an HTML file that provides information about the requested data. The main purpose of this report is to provide information about the availability of web URL that is being monitored. When the request is made from the URL to the web server, the URLs in .txt file communicate with the web servers that host these websites and request the specified web page in the URL. Then the server responds with the appropriate information based on the site status. If the requested host is available and running, it returns HTTP 200 OK status else 400, 503, 301 based on website state.

It also returns status code description which means the reason for failure, the time it took to respond back and length of the response it returns after getting a reply from HTTP.

The red row in the Fig. 7 indicates the failure to make it easy to identify failed URL and send a notification when needed to access the URLs. This helps to identify the failure and reduce the downtime of any server site by fixing it on time before it impacts the business.

20

Chapter 5

MONITORING PROCESS

The subsequent sections below are to address how the services are being defined, deployed on the server and how they behave in the network.

In order to run any application, a platform is needed to run and access these services and applications. In this Project, to monitor the service it required to create the two machines.

When the services are running on server without any issues then system displays “system status is fine” but if otherwise, there are issues, then step need to be taken to prevent further interpretations to avoid loss of network.

Fig. 8 shows the hosts in the network running the applications and services, status of their activeness, when they were last check and what the duration the server is up is and status information in form if the PING is OK, the packet loss percentage and RTA. Fig. 8 describes the two machines created to run the services.

Figure 8: Host Machines

21

These machines running applications defined using Ansible software. Where I have defined the functions and the expected outputs attributes. Therefore it is returning the status of application or services.

5.1. Services Description

1. Current Load

It allows viewing status of the service in form of HTTP status OK which is 200 and if not it returns HTTP code with code description. It returns the reason of the failure. Also, provide the last check-in time and duration to which it was active and least number of attempts made to push this load on machine.

2. Current Users

It provides information of the current user application and provides report for all above attributes which are reflected in fig below.

3. HTTP and Ping

The HTTP can report the status and information about the health of requests been made on web Server and ping reports the reach ability of the requesting host my source host.

4. SSH and Swap Usage

SSH is to provide the secure connection and Swap Usage is refers to the percentage of virtual memory that is currently being used to temporarily store inactive pages from the main physical memory on both machines.

5. Total Processes and root disk Usage monitoring

First, tells the status of all running process and later one tells the status of disk Usage on the system on both machines.

22

Figure9: Services Health Record

This allows for setting notification by email or by a phone number in case of URL failure. This will further help to know about any other mishaps in the environment in timely manner. To implement this, it used push notifications in this particular environment this is also called SNS (Sending Notification Services by AWS) which it integrated to provide alert in case of any abnormalities.

23

5.2. Deployment of Services

The project utilized another tool called Ansible which is a DevOps automation tool.[6] In order to monitor the defined services, it is important that these services are deployed the machine by integrating the dependencies and infrastructure with the remote machine.

Defined Service galaxy_info author: Will Foster(@sadsfae)

description:Playbook for setting up the Nagios[3] monitoring server and clients

license:Apache

min_ansible_version:1.9

platforms:

-name:EL

versions:

-7

galaxy_tags:

- nagios

-monitoring

dependencies:

-host:all:!Switches:! oobservers:!idrac:! supermicro-6948r:! supermicro-6948r:!supermicro-1028r

24 remote_users:"{{ansible-system_user}}" roles:

-{role:nagios-client}

-{role:firewall_client,when:manage_firewall_client}

#role for nagios server

-host:nagios remote_user:"{{ansible_system_user}}"

roles:

-{role: nagios}

-role{role:,when:manage_firewall}

-{role:instruction}

25

5.3. Writing A YAML File to Run Services

This section will be address how the services such as CPU load, Memory usage, Swap

Usage, Current user record, Ping Status, HTTP request types have been deployed on machine are created and explained in the above section (Service Description). In this section the services and attributes that need to be monitored and filtered are defined.

-name: Generate technologies user CGI template templatesrc={{item+".j2"}} dest=/etc/nagios/{{item}}} with_items:

-cgi.cfg

-services.cfg become:true

-name:createnagios socket tmp files file: path=/var/log/nagios/rw state=directory

owner=nagios

group=nagios

mode=0777

seuser=system_u become:true

#todo:file bug

26

-name: create nagios results directory file: path=/var/log/nagios/spool/checkresults

state=directory

owner=nagios

group=nagios

mode=0755

seuser=system_u become:true

-name:installnagios packages and common plugins

yum: name={{item}} state=packet become:true with_items:

-nagios

-nagios-common

-nagios-plugins-tcp

-nagios-plugins-http description root disk usage monitoing

check_command check_nrpe!check_sda1

}

-nagios-plugins-load

27

-nagios-plugins-nrpe

-nagios-plugins-uptime

-nagios-plugins-swap

-nagios-plugins-ping

-nagios-plugins-procs

-nagios-plugins-users

-nagios-plugins-disks

-nagios-plugins-dns

-libsemange-python

-name:checknagious Users

stat:path=/etc/nagios/passwd

ignore_errors:trueregister:nagios_user_pwfile_exists

become:true

-name:Create empty password file command:touch/etc.nagios/passwd args: when:nagios_user_pwfile_exists !=0 become:true

-name:create admin Users

command:htpasswd -b -c

/etc/nagios/passwd{{nagios_username}}{{nagios_passwd}}

ignore_errors:true

28

when:nagios_user_pwfile_exists !=0

become:true

-name:create guest Users

command:htpasswd -b

/etc/nagios/passwd{{nagios_username}}{{nagios_ro_passwd}}

ignore_errors:true when:nagios_user_pwfile_exists !=0 become:true

Creating service running : define service {

host_name ubuntu-agent-17-GCp

service_description PING

check_command check_ping!100.0,20%!500.0,60%

check_period 24x7

check_freshness 1

max_check_attempts 1

check_interval 1

notification_interval 1

notification_period 24x7

notification_enabled 1

registry 1

}

29 define service{

user generic-service host_name ubuntu-agent-17-GCP service_description CPU load

check_commandcheck_nrpe!check_load} define service{

user generic-service

host_name ubuntu-agent-17-GCP

service_des define service{user generic-service host_name ubuntu-agent-17-GCP service_description Total Processes check_command check_nrpe! check_total_procs define service{ user generic-service host_name ubuntu-agent-17-GCP service_description Total Processes check_commandcheck_nrpe!check_total_procs

} define service { user generic-service host_name ubuntu-agent-17-GCp

30 service_description Current Users check_commandcheck_nrpe!check_users

} define service{

user generic-service

host_name ubuntu-agent-17-GCP

service_description root disk usage Monitorinh

check_command check_nrpe!check_sda1

} define service{ user generic-service host_name ubuntu-agent-17-GCp

service_descriptionNetstat Monitoring check_commandcheck_nrpe!check_netstat

}

# notification_enabled

Contact { contact_name Prachi alias Monitoring Engine

User generic-contact ; Inherit default value service_notification_periods 24x7

31 service_notification_option w,u,c,r,f,s service_notification_commands notify-service-by-email host_notification_period 24x7 host_notification_option d,u,r,f,s host_notification_command notify-host-by-email email

# create multiple mail gun

Contact { contact_name Sonal alias Monitoring Engine

User generic-contact; Inherit default value

service_notification_periods 24x7 service_notification_option w,u,c,r,f,s service_notification_commands notify-service-by-email host_notification_period 24x7 host_notification_option d,u,r,f,s host_notification_command notify-host-by-email email define command { command_name notify-host-by-email command_line /usr/bin/printf "%b" "*** Nagios ****\n\n notification

Type:$Notification$\nHost:$HOSTNAME$\nState: $HOSTSTATE$\nAddress:"

32

5.4. Service Implementation Results

Fig. 10 reflected the services define in above yaml code file concatenating with Ansible software features of how the data can be filtered on the basis of their requirement.

5.4.1. View Service Status Details for all Host Groups

This provides the information of services define with their statuses, last checkout timestamp, time duration they were active, number of attempt made to access the service, and relevant information to find cause in case of failure.

Figure10: Service Status Details for all Host Group

33

5.4.2. Network Health

The Fig. 11 shows the host and service health when it is integrated with all the services defined, in code, as well as monitoring of different features. This shows how services and applications are running and which services are currently up, enabled and the ones that are disabled.

Figure 11: Network Health Status

34

5.4.3. Network Outage

This tool allows for checking on network outages in the environment in case when the requests number cross the capacity of network to hold the request. This is also being implemented using Ansible.

Figure 12: Network Outage Status

35

Chapter 6

CONCLUSION

The web monitoring tool is a centralized monitoring method for website monitoring and services running on applications. It has the ability to monitor the websites, host and applications running in the network within the organization. This also has a notification feature to report errors before it impacts the system and increases the downtime. This allows the system administrator to fix the issues before it is known to the user. This tool is completely centralized which allows it to be fully secure without interference of applications running on other networks. Additionally, it checks the websites health status including: CPU loads, memory usage, ping results and number of users logged in at the moment. This information has different fields like services, last check, and active duration.

It is a complete open source tool and has no specific physical requirements to run. It is an automated service that provides the status of URLs on a set interval of time within a single file regularly by initializing the task scheduler.

It can be used as a centralized private tool within a company, which runs on any client machine and provides all information about websites running in network. It is a fast monitoring tool that gives summarized reports and notifications to the user.

36

REFERENCES

[1] R. Fielding, J. Gettys and J. Mogul, "HyperText Transfer Protocol--http/1.1,"

[Online]. Available: ://tools.ietf.org/html/rfc2616. [Accessed 2 November

2017].

[2] "Amazon Web Services," [Online]. Available:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html. [Accessed

8 January 2018].

[3] T. L. Berrners and D. Connolly, "Hypertext Markup Language," [Online]. Available:

https://tools.ietf.org/html/rfc1866. [Accessed 9 Nov 2017].

[4] "Apache Falcon," [Online]. Available:

https://falcon.apache.org/restapi/ResourceList.html. [Accessed 15 December 2017].

[5] "YAML Sytax," [Online]. Available:

http://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html.

[Accessed 3 October 2017].

[6] M. Diehl, "Monitoring E-Mail with Nagios," National Research Council, vol. 13, no.

6, pp. 1-4, 2009.

37