For most networking professionals getting familiar with DevOps, the tooling framework consists primarily of deployment and provisioning tools like Chef and Puppet. But the continuum of DevOps tools spans far more than just deploying new infrastructure. At a high level, DevOps tools can be roughly divided into three categories:
- Monitoring tools: provide insight into the supporting infrastructure and alert when certain conditions arise
- Build-and-test tools: facilitate building applications from code
- Deployment tools: automate the provisioning of infrastructure elements
Let’s take a look at each category and the main features of the most commonly used tools within them.
The monitoring class of DevOps tools covers everything from basic statistics collection, event monitoring, and alerts to more sophisticated service monitoring and network validation. Within the open-source arena, a number of DevOps monitoring tools are available, but the most common ones are OpenNMS, Nagios, and Zabbix.
OpenNMS is an open-source network monitoring and management platform distributed under the GNU General Public License (GPL) version 3. The platform is capable of managing devices based on either explicitly configured IP addresses or through automatic discovery of devices and services on a subnet.
OpenNMS has a rich event management set of features, including the ability to either generate its own events or read them in from external sources such as SNMP and syslog. It also has performance-monitoring capabilities that allow it to use things like ICMP or HTTP probes to monitor network performance and assure service levels.
Nagios, an open source monitoring platform distributed under the GNU GPLv2 license, is designed with system monitoring expressly in mind. It features support for a variety of network services (SMTP, POP3, HTTP, NNTP, ICMP, SNMP, FTP, and SSH), and it provides host-monitoring services including system resources like processor load or disk usage, as well as probes like temperature or system alarms. Nagios has a rich set of interfaces that allow integration into visualization tools and notification systems.
Zabbix is an open-source network and application monitoring platform distributed under the GNU GPLv2 license. Featuring a centralized web front end, Zabbix supports distributed monitoring through both polling and trapping mechanisms. It features both agent-based and agent-less monitoring, with high-performance client software available across the major operating systems (Linux, FreeBSD, OpenBSD, and a number of Windows variants).
One of the hallmarks of DevOps is treating system configuration as source code. Once a system’s configuration is maintained as code, IT must both store the configuration and manage the code. This extends the umbrella of DevOps tools beyond typical provisioning ones like Puppet and Chef to include build and test infrastructure like Jenkins, Maven, Gradle, Git, Subversion, Ant, Ivy, and many others.
The cornerstone of any build/test infrastructure is a source code management (SCM) tool. Common SCMs include everything from open source tools like CVS and Subversion to commercial offerings like Perforce and Mercurial. Whatever the system, you must have a way of tracking system configuration as source code and managing the system through code. Maintaining different versions of code is essential, as versioning and dependency management link DevOps to SCM and related tools.
Applying SCMs toward a continuous integration framework has given rise to build-and-test tools that augment basic SCM functionality. The main premise: The system ought to build quickly, test quickly, and have explicit validation before hitting a live network. Tools like Jenkins, Maven, Ant, and Ivy help to automate the build of the source code in the repository. Once the system image is built, it then can be loaded to a test environment or clone of the production environment so the build can be validated before being pushed into production.
Build-and-test tools allow DevOps practices to make atomic changes, meaning sets of changes are grouped into a single transaction. This allows simpler rollback in case of issues or problems.
Deployment refers primarily to the provisioning of infrastructure elements, like virtual machines, network elements, network and security appliances, and so on. Provisioning tools cover a range of solutions, including commercial products like Chef, Ansible, Salt, and Puppet, as well as open source frameworks like OpenStack.
Selecting an appropriate deployment tool depends on a number of factors, the most important of which is end-device support. Because the deployment tools are responsible for actually placing configuration on a device, there typically must be explicit support on the device or within the provisioning infrastructure to guarantee integratability.
Of course, DevOps involves more than deploying and integrating new tools, but choosing the right tools will better support your organization’s transition from a legacy networking environment to one that embraces the DevOps framework. Deciding which tools to have in your toolkit is a solid place to start.