Software engineering organizations of all sizes are responsible for building and maintaining reliable software. But, for Software Engineering teams, DevOps teams, and SRE teams to successfully deliver reliable software, they need the right tools available throughout the software development lifecycle.
If you’re looking for tools for building reliable software, there are several categories of software you’ll need to consider. This article will offer a guide to the most popular DevOps and SRE tools.
Choosing the right SRE tools is an important aspect of planning out system and infrastructure design. How you do this depends on the size of your team and where your team is in its SRE journey. Smaller teams that are managing and building smaller applications may be able to meet their reliability goals without the need for certain tools.
Your team will need to experiment and adapt as it determines the best ways to achieve your reliability goals and maintain them as you scale.
Different organizations will work with varying infrastructures and will have differing needs. However, there are some factors that every SRE and DevOps team should take into account when selecting the tools to work with.
1. Cost-Effective Choices
It can be pricey to provide site reliability engineering to your organization, in terms of software costs as well as staffing. This means you should only implement the SRE practices and tooling that benefit your business and the scale your team is operating at.
An organization can work with various languages, platforms, encryption types, and other tools in creating software. While there is an increasing number of integrations between tools, that might not be the case for every tool you’re considering. Whatever you choose needs to communicate seamlessly with your organization’s existing toolset.
For instance, a software-as-a-service (SaaS) architecture is focused on delivering high-level support with easily scalable infrastructure. This kind of architecture relies on tools that are primarily designated for cloud-native applications, such as Docker and Kubernetes.
3. Level of Support
Any tool you’re considering for your SRE practice needs a high level of support. If the tool is open source, then there needs to be a great community of maintainers around the tool. For paid or licensed software, the first-party support needs to be first-class. Many free SRE tools provide equal functionality to their paid competitors, though not all do.
4. APIs and Automation
You should evaluate the amount of work a tool can handle, including its API offerings for extensibility if the tool seems limited. APIs are a set of functions and procedures in software development that enable communication between various components of an application. Without APIs, additional complex steps are needed to use an SRE tool across large corporations or startups, which can make the tool difficult to use. You’ll also need to know how well the tool is automated because that can simplify your workflow and make it more efficient.
5. Potential for Customization
Some SRE tools you choose might be limited, so you might want to customize those tools to suit your needs. An SRE tool that doesn’t allow customization will not be extensible, which could make it less useful.
Customizable tools should offer good-quality documentation and tutorials to help your team understand the tools’ basic functionalities. You might also need access to public or private API offerings to extend the capabilities of some tools, so make sure you can get this as needed.
A Model Reliability Stack
Preventing outages and delivering reliable software starts with how you build and deploy your software. These DevOps tools help engineering teams consistently ship reliable software.
1. a. Containers
Containers are portable operating-system-level virtualizations that hold all the configuration files and executables needed by microservices and orchestration tools. By utilizing containers, instead of relying on traditional virtual machine environments, computing resources can be harnessed more efficiently and applications can be more quickly deployed, patched, and scaled.
The most notable containerization tools are Docker and Kubernetes. Docker uses operating-system-level virtualizations to deliver software in containers, while Kubernetes is a container orchestrator that automates scaling, managing, updating, and removing containers. Kubernetes integrates well with Docker because it relies on a container runtime to orchestrate.
1.b. Infrastructure Automation
Infrastructure automation helps teams provision the necessary infrastructure components, like virtual machines and load balancers, to support their software. Implementing infrastructure automation helps optimize the deployment of software and eliminates human error in configuring and deploying infrastructure.
Terraform is an infrastructure-as-code (IaC) tool that has become tremendously popular for enabling infrastructure automation. Terraform utilizes configuration files to allow engineers to define what infrastructure resources are needed and then harnesses the APIs of your cloud provider (such as AWS, Azure, or Google Cloud) to create or update the required infrastructure resources.
1.c. Configuration Management
Configuration management is the process of maintaining the consistency of a software product by tracking and controlling all changes made to it. Configuration management tools ensure software products stay in a desired and consistent state.
Two notable configuration management tools are Chef (used by Meta) and Ansible. Chef helps in streamlining configuration management tasks across cloud platforms, while Ansible additionally helps in enabling an infrastructure-as-code (IaC) architecture.
1.d. Continuous Integration and Deployment
In continuous integration (CI), code for specific functionalities is integrated through automated testing of every change made to the source code. In continuous delivery (CD), the tested codebase is automatically deployed to a production environment.
Notable CI/CD tools are Jenkins and CircleCI. Jenkins is an open-source automation server that allows teams to build, test, and deploy software. CircleCI automates the software development and delivery process across an organization’s cloud and infrastructure.
1.e. Service Mesh
Service Meshes help make large applications that rely on hundreds of microservices more reliable and secure. Service meshes consist of networking proxies that are deployed alongside your application as a sidecar and help facilitate service-to-service interactions. By utilizing a service mesh, calls to services can be more easily observed, controlled, and (if necessary) re-tried - automating a large part of the instrumentation needed for system observability and resulting in a more reliable service-oriented architecture.
LinkerD and Istio are the two leading service meshes. Both provide extensive functionality but come with drawbacks around complexity and latency that won’t be worthwhile unless you are operating at a significant scale.
2. Monitoring and Observability
Once code is deployed and running in production, the next step in ensuring reliability is building a toolset for identifying, troubleshooting, and resolving system issues. These tools help you do just that.
2.a. Telemetry Storage
The infrastructure, managed services, and code your team must monitor and observe produce a lot of telemetry your team must store and query to maintain reliability. To do this a robust time-series database is needed to handle the high volume of telemetry applications and infrastructure produce.
Prometheus is an open-source monitoring tool that provides a time series data model of all system performance characteristics.
InfluxDB helps a development team build and monitor time-stamped data series across infrastructure and is purpose-built for a massive scale of ingestion.
While many storage solutions are open-source, maintaining and scaling telemetry storage can be a large burden on a growing engineering team. Check out Last9 Levitate for information on our managed Prometheus offering that helps teams eliminate the work needed to scale monitoring while also reducing storage costs.
2.b. Metric Visualization and Alerting
Visualization and alerting tools help teams deliver reliable software by providing notifications in the event of system degradations and real-time visualization of the necessary data points on a single screen for precise graphical representations of a system’s health.
Application Performance Monitoring (APM) tools, such as Datadog and New Relic, provide visualization and alerting as part of their suite of capabilities.
Grafana is an open-source tool that provides a graphical, integrated solution to metrics and logs for observability and alerting.
As teams scale, configuring tools like APM and Grafana to be usable across large teams can be close to impossible. Alerts can create a lot of noise and dashboards can be difficult to navigate for on-call engineers without the required tribal knowledge of those who set them up. Last9 aims to solve these problems by helping teams navigate metrics and configure alerts through intuitive service maps, enabling visualization and alerting to be useful across large teams with limited context on certain components.
2.c. Tracing and Logging
Tracing and Logging are powerful tools for providing observability into systems to ensure their reliability when incidents occur. Instrumenting traces allows developers to follow requests as they move across your infrastructure and services, helping pinpoint incident root cause. Log aggregation helps collect and organize the logging data left by developers when they write code to understand the nature of errors that are occurring in production.
Getting the most out of traces and logs is a labor-intensive effort and heavily investing may not be worthwhile at smaller scales, when lightweight implementations may provide adequate results.
OpenTelemetry is an open-source observability framework for monitoring cloud-native software applications with telemetry data.
Sentry is a log aggregation tool that collects system data from various endpoints and enhances the performance of the source code.
Fluentd is a data collector that provides a unified logging layer across architectures.
Reliability tools aren’t just about the technology surrounding building, deploying, and monitoring software. The organizational challenges posed as engineering teams scale provide a significant roadblock to delivering reliable software. Below are 3 types of tools that help engineering teams deal with the organizational challenges of reliability.
3.a. Service Catalog
Service catalogs help teams document and organize their software and infrastructure so any team member can successfully navigate an organization's services to build software and respond to incidents. A typical service catalog will allow an engineer to understand service dependencies, view a service’s performance against its service-level objectives (SLOs), and organize important links associated with a service, such as slack channels, GitHub repos, Jira boards, and incident response playbooks.
At its core Last9 is a service catalog, helping teams organize relevant information about services and navigate components when incidents occur.
3.b. Incident Management
Incident management tools receive alerts from monitoring systems and applications, categorize these alerts based on timing and order of importance, then help escalate to the appropriate on-call engineers.
The most notable incident response tools are Opsgenie and PagerDuty. Opsgenie provides incident management by ensuring critical incidents are reported as soon as they occur. PagerDuty is an alarm aggregation and dispatching service for system admins. As part of Splunk’s observability suite VictorOps is also a powerful tool to consider for Incident Management.
3.c. Chaos Engineering
Chaos engineering practices are gaining popularity for ensuring systems meet company reliability standards before incidents occur. Chaos engineering works by proactively testing how your system responds to outages of certain components, helping teams identify opportunities for greater resiliency.
Gremlin helps teams organize and enable chaos engineering practices by streamlining the preparation, execution, and learning of chaos engineering tests.
In this article, we discussed the tools needed across several categories that allow a team to deliver reliable software at any scale. There are multiple factors and many needs to take into consideration when mapping out reliability tools for your organization. Consider your languages and other tools and be sure to select SRE tools that will integrate well with your existing architecture. Also, while many tools provide powerful capabilities, not all tools are needed at every scale.
If you need any help figuring out how to improve the reliability of your software, request a demo at Last9 and we'll be happy to help!