mirror of
https://github.com/linkedin/school-of-sre
synced 2026-01-07 17:18:03 +00:00
1882 lines
48 KiB
HTML
1882 lines
48 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en" class="no-js">
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
|
|
|
|
|
|
<link rel="shortcut icon" href="../../../img/favicon.ico">
|
|
<meta name="generator" content="mkdocs-1.1.2, mkdocs-material-6.2.8">
|
|
|
|
|
|
|
|
<title>Introduction - School Of SRE</title>
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../../assets/stylesheets/main.cb6bc1d0.min.css">
|
|
|
|
|
|
<link rel="stylesheet" href="../../../assets/stylesheets/palette.39b8e14a.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700%7CRoboto+Mono&display=fallback">
|
|
<style>body,input{font-family:"Roboto",-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono",SFMono-Regular,Consolas,Menlo,monospace}</style>
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="../../../stylesheets/custom.css">
|
|
|
|
|
|
|
|
|
|
|
|
</head>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<body dir="ltr" data-md-color-scheme="" data-md-color-primary="none" data-md-color-accent="none">
|
|
|
|
|
|
|
|
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
|
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
|
<label class="md-overlay" for="__drawer"></label>
|
|
<div data-md-component="skip">
|
|
|
|
|
|
<a href="#_1" class="md-skip">
|
|
Skip to content
|
|
</a>
|
|
|
|
</div>
|
|
<div data-md-component="announce">
|
|
|
|
</div>
|
|
|
|
|
|
<script async defer data-domain="linkedin.github.io" src="https://tracking.eskratch.com/js/plausible.js"></script>
|
|
|
|
|
|
|
|
<header class="md-header" data-md-component="header">
|
|
<nav class="md-header-nav md-grid" aria-label="Header">
|
|
<a href="../../.." title="School Of SRE" class="md-header-nav__button md-logo" aria-label="School Of SRE">
|
|
|
|
<img src="../../../img/sos.png" alt="logo">
|
|
|
|
</a>
|
|
<!-- Button to open drawer -->
|
|
<label class="md-header-nav__button md-icon" for="__drawer">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2z"/></svg>
|
|
</label>
|
|
<div class="md-header-nav__title" data-md-component="header-title">
|
|
|
|
<div class="md-header-nav__ellipsis">
|
|
<span class="md-header-nav__topic md-ellipsis">
|
|
<a href="../../.." title="School Of SRE" >
|
|
School Of SRE
|
|
</a>
|
|
</span>
|
|
<span class="md-header-nav__topic md-ellipsis">
|
|
|
|
Introduction
|
|
|
|
</span>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<label class="md-header-nav__button md-icon" for="__search">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
|
|
</label>
|
|
|
|
<div class="md-search" data-md-component="search" role="dialog">
|
|
<label class="md-search__overlay" for="__search"></label>
|
|
<div class="md-search__inner" role="search">
|
|
<form class="md-search__form" name="search">
|
|
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" data-md-state="active" required>
|
|
<label class="md-search__icon md-icon" for="__search">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0116 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 019.5 16 6.5 6.5 0 013 9.5 6.5 6.5 0 019.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5z"/></svg>
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
|
|
</label>
|
|
<button type="reset" class="md-search__icon md-icon" aria-label="Clear" data-md-component="search-reset" tabindex="-1">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"/></svg>
|
|
</button>
|
|
</form>
|
|
<div class="md-search__output">
|
|
<div class="md-search__scrollwrap" data-md-scrollfix>
|
|
<div class="md-search-result" data-md-component="search-result">
|
|
<div class="md-search-result__meta">
|
|
Initializing search
|
|
</div>
|
|
<ol class="md-search-result__list"></ol>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</nav>
|
|
</header>
|
|
|
|
<div class="md-container" data-md-component="container">
|
|
|
|
|
|
|
|
|
|
<main class="md-main" data-md-component="main">
|
|
<div class="md-main__inner md-grid">
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
|
|
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
|
|
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../.." class="md-nav__link">
|
|
Home
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2" type="checkbox" id="nav-2" checked>
|
|
|
|
<label class="md-nav__link" for="nav-2">
|
|
Level 101
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Level 101" data-md-level="1">
|
|
<label class="md-nav__title" for="nav-2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Level 101
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-1" type="checkbox" id="nav-2-1" >
|
|
|
|
<label class="md-nav__link" for="nav-2-1">
|
|
Fundamentals Series
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Fundamentals Series" data-md-level="2">
|
|
<label class="md-nav__title" for="nav-2-1">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Fundamentals Series
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-1-1" type="checkbox" id="nav-2-1-1" >
|
|
|
|
<label class="md-nav__link" for="nav-2-1-1">
|
|
Linux Basics
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Linux Basics" data-md-level="3">
|
|
<label class="md-nav__title" for="nav-2-1-1">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Linux Basics
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_basics/intro/" class="md-nav__link">
|
|
Introduction
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_basics/command_line_basics/" class="md-nav__link">
|
|
Command Line Basics
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_basics/linux_server_administration/" class="md-nav__link">
|
|
Server Administration
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_basics/conclusion/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-1-2" type="checkbox" id="nav-2-1-2" >
|
|
|
|
<label class="md-nav__link" for="nav-2-1-2">
|
|
Git
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Git" data-md-level="3">
|
|
<label class="md-nav__title" for="nav-2-1-2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Git
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../git/git-basics/" class="md-nav__link">
|
|
Git Basics
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../git/branches/" class="md-nav__link">
|
|
Working With Branches
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../git/github-hooks/" class="md-nav__link">
|
|
Github and Hooks
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../git/conclusion/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-1-3" type="checkbox" id="nav-2-1-3" >
|
|
|
|
<label class="md-nav__link" for="nav-2-1-3">
|
|
Linux Networking
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Linux Networking" data-md-level="3">
|
|
<label class="md-nav__title" for="nav-2-1-3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Linux Networking
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_networking/intro/" class="md-nav__link">
|
|
Introduction
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_networking/dns/" class="md-nav__link">
|
|
DNS
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_networking/udp/" class="md-nav__link">
|
|
UDP
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_networking/http/" class="md-nav__link">
|
|
HTTP
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_networking/tcp/" class="md-nav__link">
|
|
TCP
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_networking/ipr/" class="md-nav__link">
|
|
Routing
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../linux_networking/conclusion/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-2" type="checkbox" id="nav-2-2" >
|
|
|
|
<label class="md-nav__link" for="nav-2-2">
|
|
Python and Web
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Python and Web" data-md-level="2">
|
|
<label class="md-nav__title" for="nav-2-2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Python and Web
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../python_web/intro/" class="md-nav__link">
|
|
Introduction
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../python_web/python-concepts/" class="md-nav__link">
|
|
Some Python Concepts
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../python_web/python-web-flask/" class="md-nav__link">
|
|
Python, Web and Flask
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../python_web/url-shorten-app/" class="md-nav__link">
|
|
The URL Shortening App
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../python_web/sre-conclusion/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-3" type="checkbox" id="nav-2-3" >
|
|
|
|
<label class="md-nav__link" for="nav-2-3">
|
|
Data
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Data" data-md-level="2">
|
|
<label class="md-nav__title" for="nav-2-3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Data
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-3-1" type="checkbox" id="nav-2-3-1" >
|
|
|
|
<label class="md-nav__link" for="nav-2-3-1">
|
|
Relational Databases
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Relational Databases" data-md-level="3">
|
|
<label class="md-nav__title" for="nav-2-3-1">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Relational Databases
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/intro/" class="md-nav__link">
|
|
Introduction
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/concepts/" class="md-nav__link">
|
|
Key Concepts
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/mysql/" class="md-nav__link">
|
|
MySQL
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/innodb/" class="md-nav__link">
|
|
InnoDB
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/backup_recovery/" class="md-nav__link">
|
|
Backup and Recovery
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/replication/" class="md-nav__link">
|
|
MySQL Replication
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-3-1-7" type="checkbox" id="nav-2-3-1-7" >
|
|
|
|
<label class="md-nav__link" for="nav-2-3-1-7">
|
|
Operational Concepts
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Operational Concepts" data-md-level="4">
|
|
<label class="md-nav__title" for="nav-2-3-1-7">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Operational Concepts
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/select_query/" class="md-nav__link">
|
|
Select Query
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/query_performance/" class="md-nav__link">
|
|
Query Performance
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/lab/" class="md-nav__link">
|
|
Lab
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_sql/conclusion/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-3-2" type="checkbox" id="nav-2-3-2" >
|
|
|
|
<label class="md-nav__link" for="nav-2-3-2">
|
|
NoSQL
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="NoSQL" data-md-level="3">
|
|
<label class="md-nav__title" for="nav-2-3-2">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
NoSQL
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_nosql/intro/" class="md-nav__link">
|
|
Introduction
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_nosql/key_concepts/" class="md-nav__link">
|
|
Key Concepts
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../databases_nosql/further_reading/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-3-3" type="checkbox" id="nav-2-3-3" >
|
|
|
|
<label class="md-nav__link" for="nav-2-3-3">
|
|
Big Data
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Big Data" data-md-level="3">
|
|
<label class="md-nav__title" for="nav-2-3-3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Big Data
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../big_data/intro/" class="md-nav__link">
|
|
Introduction
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../big_data/evolution/" class="md-nav__link">
|
|
Evolution and Architecture of Hadoop
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../big_data/tasks/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-4" type="checkbox" id="nav-2-4" >
|
|
|
|
<label class="md-nav__link" for="nav-2-4">
|
|
Systems Design
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Systems Design" data-md-level="2">
|
|
<label class="md-nav__title" for="nav-2-4">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Systems Design
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../systems_design/intro/" class="md-nav__link">
|
|
Introduction
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../systems_design/scalability/" class="md-nav__link">
|
|
Scalability
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../systems_design/availability/" class="md-nav__link">
|
|
Availability
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../systems_design/fault-tolerance/" class="md-nav__link">
|
|
Fault Tolerance
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../systems_design/conclusion/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-5" type="checkbox" id="nav-2-5" checked>
|
|
|
|
<label class="md-nav__link" for="nav-2-5">
|
|
Metrics and Monitoring
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Metrics and Monitoring" data-md-level="2">
|
|
<label class="md-nav__title" for="nav-2-5">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Metrics and Monitoring
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--active">
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
|
|
|
|
|
|
|
|
|
<a href="./" class="md-nav__link md-nav__link--active">
|
|
Introduction
|
|
</a>
|
|
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../command-line_tools/" class="md-nav__link">
|
|
Command-line Tools
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../third-party_monitoring/" class="md-nav__link">
|
|
Third-party Monitoring
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../alerts/" class="md-nav__link">
|
|
Proactive Monitoring with Alerts
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../best_practices/" class="md-nav__link">
|
|
Best Practices for Monitoring
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../observability/" class="md-nav__link">
|
|
Observability
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../conclusion/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-2-6" type="checkbox" id="nav-2-6" >
|
|
|
|
<label class="md-nav__link" for="nav-2-6">
|
|
Security
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Security" data-md-level="2">
|
|
<label class="md-nav__title" for="nav-2-6">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Security
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../security/intro/" class="md-nav__link">
|
|
Introduction
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../security/fundamentals/" class="md-nav__link">
|
|
Fundamentals of Security
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../security/network_security/" class="md-nav__link">
|
|
Network Security
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../security/threats_attacks_defences/" class="md-nav__link">
|
|
Threat, Attacks & Defences
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../security/writing_secure_code/" class="md-nav__link">
|
|
Writing Secure code
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../security/conclusion/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3" >
|
|
|
|
<label class="md-nav__link" for="nav-3">
|
|
Level 102
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Level 102" data-md-level="1">
|
|
<label class="md-nav__title" for="nav-3">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Level 102
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-1" type="checkbox" id="nav-3-1" >
|
|
|
|
<label class="md-nav__link" for="nav-3-1">
|
|
Linux Advanced
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Linux Advanced" data-md-level="2">
|
|
<label class="md-nav__title" for="nav-3-1">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Linux Advanced
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item md-nav__item--nested">
|
|
|
|
|
|
<input class="md-nav__toggle md-toggle" data-md-toggle="nav-3-1-1" type="checkbox" id="nav-3-1-1" >
|
|
|
|
<label class="md-nav__link" for="nav-3-1-1">
|
|
Containerization And Orchestration
|
|
<span class="md-nav__icon md-icon"></span>
|
|
</label>
|
|
<nav class="md-nav" aria-label="Containerization And Orchestration" data-md-level="3">
|
|
<label class="md-nav__title" for="nav-3-1-1">
|
|
<span class="md-nav__icon md-icon"></span>
|
|
Containerization And Orchestration
|
|
</label>
|
|
<ul class="md-nav__list" data-md-scrollfix>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../../level102/containerization_and_orchestration/intro/" class="md-nav__link">
|
|
Introduction
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../../level102/containerization_and_orchestration/intro_to_containers/" class="md-nav__link">
|
|
Introduction To Containers
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../../level102/containerization_and_orchestration/containerization_with_docker/" class="md-nav__link">
|
|
Containerization With Docker
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../../level102/containerization_and_orchestration/orchestration_with_kubernetes/" class="md-nav__link">
|
|
Orchestration With Kubernetes
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../../level102/containerization_and_orchestration/conclusion/" class="md-nav__link">
|
|
Conclusion
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../../CONTRIBUTING/" class="md-nav__link">
|
|
Contribute
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../../CODE_OF_CONDUCT/" class="md-nav__link">
|
|
Code of Conduct
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<li class="md-nav__item">
|
|
<a href="../../../sre_community/" class="md-nav__link">
|
|
SRE Community
|
|
</a>
|
|
</li>
|
|
|
|
|
|
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc" >
|
|
<div class="md-sidebar__scrollwrap">
|
|
<div class="md-sidebar__inner">
|
|
|
|
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
|
|
|
|
|
|
|
|
|
|
|
|
</nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="md-content">
|
|
<article class="md-content__inner md-typeset">
|
|
|
|
|
|
|
|
<h2 id="_1"></h2>
|
|
<h1 id="prerequisites">Prerequisites</h1>
|
|
<ul>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/linux_basics/intro/">Linux Basics</a></p>
|
|
</li>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/python_web/intro/">Python and the Web</a></p>
|
|
</li>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/systems_design/intro/">Systems Design</a></p>
|
|
</li>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/linux_networking/intro/">Linux Networking Fundamentals</a></p>
|
|
</li>
|
|
</ul>
|
|
<h2 id="what-to-expect-from-this-course">What to expect from this course</h2>
|
|
<p>Monitoring is an integral part of any system. As an SRE, you need to
|
|
have a basic understanding of monitoring a service infrastructure. By
|
|
the end of this course, you will gain a better understanding of the
|
|
following topics:</p>
|
|
<ul>
|
|
<li>
|
|
<p>What is monitoring?</p>
|
|
<ul>
|
|
<li>
|
|
<p>What needs to be measured</p>
|
|
</li>
|
|
<li>
|
|
<p>How the metrics gathered can be used to improve business decisions and overall reliability</p>
|
|
</li>
|
|
<li>
|
|
<p>Proactive monitoring with alerts</p>
|
|
</li>
|
|
<li>
|
|
<p>Log processing and its importance</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>What is observability?</p>
|
|
<ul>
|
|
<li>
|
|
<p>Distributed tracing</p>
|
|
</li>
|
|
<li>
|
|
<p>Logs</p>
|
|
</li>
|
|
<li>
|
|
<p>Metrics</p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<h2 id="what-is-not-covered-in-this-course">What is not covered in this course</h2>
|
|
<ul>
|
|
<li>
|
|
<p>Guide to setting up a monitoring infrastructure</p>
|
|
</li>
|
|
<li>
|
|
<p>Deep dive into different monitoring technologies and benchmarking or comparison of any tools</p>
|
|
</li>
|
|
</ul>
|
|
<h2 id="course-content">Course content</h2>
|
|
<ul>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/introduction/#introduction">Introduction</a></p>
|
|
<ul>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/introduction/#four-golden-signals-of-monitoring">Four golden signals of monitoring</a></p>
|
|
</li>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/introduction/#why-is-monitoring-important">Why is monitoring important?</a></p>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/command-line_tools/">Command-line tools</a></p>
|
|
</li>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/third-party_monitoring/">Third-party monitoring</a></p>
|
|
</li>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/alerts/">Proactive monitoring using alerts</a></p>
|
|
</li>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/best_practices/">Best practices for monitoring</a></p>
|
|
</li>
|
|
<li>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/observability/">Observability</a></p>
|
|
<ul>
|
|
<li><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/observability/#logs">Logs</a></li>
|
|
<li><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/bservability/#tracing">Tracing</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p><a href="https://linkedin.github.io/school-of-sre/level101/metrics_and_monitoring/conclusion/">Conclusion</a></p>
|
|
<h2 id="_2"></h2>
|
|
<h1 id="introduction">Introduction</h1>
|
|
<p>Monitoring is a process of collecting real-time performance metrics from
|
|
a system, analyzing the data to derive meaningful information, and
|
|
displaying the data to the users. In simple terms, you measure various
|
|
metrics regularly to understand the state of the system, including but
|
|
not limited to, user requests, latency, and error rate. <em>What gets
|
|
measured, gets fixed</em>---if you can measure something, you can reason
|
|
about it, understand it, discuss it, and act upon it with confidence.</p>
|
|
<h2 id="four-golden-signals-of-monitoring">Four golden signals of monitoring</h2>
|
|
<p>When setting up monitoring for a system, you need to decide what to
|
|
measure. The four golden signals of monitoring provide a good
|
|
understanding of service performance and lay a foundation for monitoring
|
|
a system. These four golden signals are</p>
|
|
<ul>
|
|
<li>
|
|
<p>Traffic</p>
|
|
</li>
|
|
<li>
|
|
<p>Latency</p>
|
|
</li>
|
|
<li>
|
|
<p>Error</p>
|
|
</li>
|
|
<li>
|
|
<p>Saturation</p>
|
|
</li>
|
|
</ul>
|
|
<p>These metrics help you to understand the system performance and
|
|
bottlenecks, and to create a better end-user experience. As discussed in
|
|
the <a href="https://sre.google/sre-book/monitoring-distributed-systems/">Google SRE
|
|
book</a>,
|
|
if you can measure only four metrics of your service, focus on these
|
|
four. Let's look at each of the four golden signals.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>Traffic</strong> -- <em>Traffic</em> gives a better understanding of the service
|
|
demand. Often referred to as <em>service QPS</em> (queries per second),
|
|
traffic is a measure of requests served by the service. This
|
|
signal helps you to decide when a service needs to be scaled up to
|
|
handle increasing customer demand and scaled down to be
|
|
cost-effective.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Latency</strong> -- <em>Latency</em> is the measure of time taken by the service
|
|
to process the incoming request and send the response. Measuring
|
|
service latency helps in the early detection of slow degradation
|
|
of the service. Distinguishing between the latency of successful
|
|
requests and the latency of failed requests is important. For
|
|
example, an <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#server_error_responses">HTTP 5XX
|
|
error</a>
|
|
triggered due to loss of connection to a database or other
|
|
critical backend might be served very quickly. However, because an
|
|
HTTP 500 error indicates a failed request, factoring 500s into
|
|
overall latency might result in misleading calculations.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error (rate)</strong> -- <em>Error</em> is the measure of failed client
|
|
requests. These failures can be easily identified based on the
|
|
response codes (<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#server_error_responses">HTTP 5XX
|
|
error</a>).
|
|
There might be cases where the response is considered erroneous
|
|
due to wrong result data or due to policy violations. For example,
|
|
you might get an <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200">HTTP
|
|
200</a>
|
|
response, but the body has incomplete data, or response time is
|
|
breaching the agreed-upon
|
|
<a href="https://en.wikipedia.org/wiki/Service-level_agreement">SLA</a>s.
|
|
Therefore, you need to have other mechanisms (code logic or
|
|
<a href="https://en.wikipedia.org/wiki/Instrumentation_(computer_programming)">instrumentation</a>)
|
|
in place to capture errors in addition to the response codes.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Saturation</strong> -- <em>Saturation</em> is a measure of the resource
|
|
utilization by a service. This signal tells you the state of
|
|
service resources and how full they are. These resources include
|
|
memory, compute, network I/O, and so on. Service performance
|
|
slowly degrades even before resource utilization is at 100
|
|
percent. Therefore, having a utilization target is important. An
|
|
increase in latency is a good indicator of saturation; measuring
|
|
the <a href="https://medium.com/@ankur_anand/an-in-depth-introduction-to-99-percentile-for-programmers-22e83a00caf">99th
|
|
percentile</a>
|
|
of latency can help in the early detection of saturation.</p>
|
|
</li>
|
|
</ul>
|
|
<p>Depending on the type of service, you can measure these signals in
|
|
different ways. For example, you might measure queries per second served
|
|
for a web server. In contrast, for a database server, transactions
|
|
performed and database sessions created give you an idea about the
|
|
traffic handled by the database server. With the help of additional code
|
|
logic (monitoring libraries and instrumentation), you can measure these
|
|
signals periodically and store them for future analysis. Although these
|
|
metrics give you an idea about the performance at the service end, you
|
|
need to also ensure that the same user experience is delivered at the
|
|
client end. Therefore, you might need to monitor the service from
|
|
outside the service infrastructure, which is discussed under third-party
|
|
monitoring.</p>
|
|
<h2 id="why-is-monitoring-important">Why is monitoring important?</h2>
|
|
<p>Monitoring plays a key role in the success of a service. As discussed
|
|
earlier, monitoring provides performance insights for understanding
|
|
service health. With access to historical data collected over time, you
|
|
can build intelligent applications to address specific needs. Some of
|
|
the key use cases follow:</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>Reduction in time to resolve issues</strong> -- With a good monitoring
|
|
infrastructure in place, you can identify issues quickly and
|
|
resolve them, which reduces the impact caused by the issues.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Business decisions</strong> -- Data collected over a period of time can
|
|
help you make business decisions such as determining the product
|
|
release cycle, which features to invest in, and geographical areas
|
|
to focus on. Decisions based on long-term data can improve the
|
|
overall product experience.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Resource planning</strong> -- By analyzing historical data, you can
|
|
forecast service compute-resource demands, and you can properly
|
|
allocate resources. This allows financially effective decisions,
|
|
with no compromise in end-user experience.</p>
|
|
</li>
|
|
</ul>
|
|
<p>Before we dive deeper into monitoring, let's understand some basic
|
|
terminologies.</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>Metric</strong> -- A metric is a quantitative measure of a particular
|
|
system attribute---for example, memory or CPU</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Node or host</strong> -- A physical server, virtual machine, or container
|
|
where an application is running</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>QPS</strong> -- <em>Queries Per Second</em>, a measure of traffic served by the
|
|
service per second</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Latency</strong> -- The time interval between user action and the
|
|
response from the server---for example, time spent after sending a
|
|
query to a database before the first response bit is received</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Error</strong> <strong>rate</strong> -- Number of errors observed over a particular
|
|
time period (usually a second)</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Graph</strong> -- In monitoring, a graph is a representation of one or
|
|
more values of metrics collected over time</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Dashboard</strong> -- A dashboard is a collection of graphs that provide
|
|
an overview of system health</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Incident</strong> -- An incident is an event that disrupts the normal
|
|
operations of a system</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>MTTD</strong> -- <em>Mean Time To Detect</em> is the time interval between the
|
|
beginning of a service failure and the detection of such failure</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>MTTR</strong> -- Mean Time To Resolve is the time spent to fix a service
|
|
failure and bring the service back to its normal state</p>
|
|
</li>
|
|
</ul>
|
|
<p>Before we discuss monitoring an application, let us look at the
|
|
monitoring infrastructure. Following is an illustration of a basic
|
|
monitoring system.</p>
|
|
<p><img alt="Illustration of a monitoring infrastructure" src="../images/image1.jpg" /> </p>
|
|
<p align="center"> Figure 1: Illustration of a monitoring infrastructure </p>
|
|
|
|
<p>Figure 1 shows a monitoring infrastructure mechanism for aggregating
|
|
metrics on the system, and collecting and storing the data for display.
|
|
In addition, a monitoring infrastructure includes alert subsystems for
|
|
notifying concerned parties during any abnormal behavior. Let's look at
|
|
each of these infrastructure components:</p>
|
|
<ul>
|
|
<li>
|
|
<p><strong>Host metrics agent --</strong> A <em>host metrics agent</em> is a process
|
|
running on the host that collects performance statistics for host
|
|
subsystems such as memory, CPU, and network. These metrics are
|
|
regularly relayed to a metrics collector for storage and
|
|
visualization. Some examples are
|
|
<a href="https://collectd.org/">collectd</a>,
|
|
<a href="https://www.influxdata.com/time-series-platform/telegraf/">telegraf</a>,
|
|
and <a href="https://www.elastic.co/beats/metricbeat">metricbeat</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Metric aggregator --</strong> A <em>metric aggregator</em> is a process running
|
|
on the host. Applications running on the host collect service
|
|
metrics using
|
|
<a href="https://en.wikipedia.org/wiki/Instrumentation_(computer_programming)">instrumentation</a>.
|
|
Collected metrics are sent either to the aggregator process or
|
|
directly to the metrics collector over API, if available. Received
|
|
metrics are aggregated periodically and relayed to the metrics
|
|
collector in batches. An example is
|
|
<a href="https://github.com/statsd/statsd">StatsD</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Metrics collector --</strong> A <em>metrics collector</em> process collects all
|
|
the metrics from the metric aggregators running on multiple hosts.
|
|
The collector takes care of decoding and stores this data on the
|
|
database. Metric collection and storage might be taken care of by
|
|
one single service such as
|
|
<a href="https://www.influxdata.com/">InfluxDB</a>, which we discuss
|
|
next. An example is <a href="https://graphite.readthedocs.io/en/latest/carbon-daemons.html">carbon
|
|
daemons</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Storage --</strong> A time-series database stores all of these metrics.
|
|
Examples are <a href="http://opentsdb.net/">OpenTSDB</a>,
|
|
<a href="https://graphite.readthedocs.io/en/stable/whisper.html">Whisper</a>,
|
|
and <a href="https://www.influxdata.com/">InfluxDB</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Metrics server --</strong> A <em>metrics server</em> can be as basic as a web
|
|
server that graphically renders metric data. In addition, the
|
|
metrics server provides aggregation functionalities and APIs for
|
|
fetching metric data programmatically. Some examples are
|
|
<a href="https://github.com/grafana/grafana">Grafana</a> and
|
|
<a href="https://github.com/graphite-project/graphite-web">Graphite-Web</a>.</p>
|
|
</li>
|
|
<li>
|
|
<p><strong>Alert manager --</strong> The <em>alert manager</em> regularly polls metric data
|
|
available and, if there are any anomalies detected, notifies you.
|
|
Each alert has a set of rules for identifying such anomalies.
|
|
Today many metrics servers such as
|
|
<a href="https://github.com/grafana/grafana">Grafana</a> support alert
|
|
management. We discuss alerting <a href="#proactive-monitoring-using-alerts">in detail
|
|
later</a>. Examples are
|
|
<a href="https://github.com/grafana/grafana">Grafana</a> and
|
|
<a href="https://icinga.com/">Icinga</a>.</p>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</article>
|
|
</div>
|
|
</div>
|
|
</main>
|
|
|
|
|
|
<footer class="md-footer">
|
|
|
|
<div class="md-footer-nav">
|
|
<nav class="md-footer-nav__inner md-grid" aria-label="Footer">
|
|
|
|
<a href="../../systems_design/conclusion/" class="md-footer-nav__link md-footer-nav__link--prev" rel="prev">
|
|
<div class="md-footer-nav__button md-icon">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z"/></svg>
|
|
</div>
|
|
<div class="md-footer-nav__title">
|
|
<div class="md-ellipsis">
|
|
<span class="md-footer-nav__direction">
|
|
Previous
|
|
</span>
|
|
Conclusion
|
|
</div>
|
|
</div>
|
|
</a>
|
|
|
|
|
|
<a href="../command-line_tools/" class="md-footer-nav__link md-footer-nav__link--next" rel="next">
|
|
<div class="md-footer-nav__title">
|
|
<div class="md-ellipsis">
|
|
<span class="md-footer-nav__direction">
|
|
Next
|
|
</span>
|
|
Command-line Tools
|
|
</div>
|
|
</div>
|
|
<div class="md-footer-nav__button md-icon">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4z"/></svg>
|
|
</div>
|
|
</a>
|
|
|
|
</nav>
|
|
</div>
|
|
|
|
<div class="md-footer-meta md-typeset">
|
|
<div class="md-footer-meta__inner md-grid">
|
|
<div class="md-footer-copyright">
|
|
|
|
<div class="md-footer-copyright__highlight">
|
|
Copyright 2020 LinkedIn Corporation. All Rights Reserved. Licensed under the Creative Commons Attribution 4.0 International Public License
|
|
</div>
|
|
|
|
Made with
|
|
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
|
|
Material for MkDocs
|
|
</a>
|
|
</div>
|
|
|
|
<div class="md-footer-social">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/linkedin/school-of-sre" target="_blank" rel="noopener" title="github.com" class="md-footer-social__link">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</div>
|
|
|
|
<script src="../../../assets/javascripts/vendor.18f0862e.min.js"></script>
|
|
<script src="../../../assets/javascripts/bundle.994580cf.min.js"></script><script id="__lang" type="application/json">{"clipboard.copy": "Copy to clipboard", "clipboard.copied": "Copied to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.placeholder": "Type to start searching", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.term.missing": "Missing"}</script>
|
|
|
|
<script>
|
|
app = initialize({
|
|
base: "../../..",
|
|
features: [],
|
|
search: Object.assign({
|
|
worker: "../../../assets/javascripts/worker/search.9c0e82ba.min.js"
|
|
}, typeof search !== "undefined" && search)
|
|
})
|
|
</script>
|
|
|
|
|
|
</body>
|
|
</html> |