Discover millions of ebooks, audiobooks, and so much more with a free trial

Only $12.99 CAD/month after trial. Cancel anytime.

Learn Grafana 7.0: A beginner's guide to getting well versed in analytics, interactive dashboards, and monitoring
Learn Grafana 7.0: A beginner's guide to getting well versed in analytics, interactive dashboards, and monitoring
Learn Grafana 7.0: A beginner's guide to getting well versed in analytics, interactive dashboards, and monitoring
Ebook679 pages4 hours

Learn Grafana 7.0: A beginner's guide to getting well versed in analytics, interactive dashboards, and monitoring

Rating: 0 out of 5 stars

()

Read preview

About this ebook

Grafana is an open-source analytical platform used to analyze and monitoring time-series data. This beginner's guide will help you get to grips with Grafana's new features for querying, visualizing, and exploring metrics and logs no matter where they are stored.

The book begins by showing you how to install and set up the Grafana server. You'll explore the working mechanism of various components of the Grafana interface along with its security features, and learn how to visualize and monitor data using, InfluxDB, Prometheus, Logstash, and Elasticsearch. This Grafana book covers the advanced features of the Graph panel and shows you how Stat, Table, Bar Gauge, and Text are used. You'll build dynamic dashboards to perform end-to-end analytics and label and organize dashboards into folders to make them easier to find. As you progress, the book delves into the administrative aspects of Grafana by creating alerts, setting permissions for teams, and implementing user authentication. Along with exploring Grafana's multi-cloud monitoring support, you'll also learn about Grafana Loki, which is a backend logger for users running Prometheus and Kubernetes.

By the end of this book, you'll have gained all the knowledge you need to start building interactive dashboards.

LanguageEnglish
Release dateJun 25, 2020
ISBN9781838828318
Learn Grafana 7.0: A beginner's guide to getting well versed in analytics, interactive dashboards, and monitoring

Related to Learn Grafana 7.0

Related ebooks

Data Visualization For You

View More

Related articles

Reviews for Learn Grafana 7.0

Rating: 0 out of 5 stars
0 ratings

0 ratings0 reviews

What did you think?

Tap to rate

Review must be at least 10 words

    Book preview

    Learn Grafana 7.0 - Eric Salituro

    Learn Grafana 7.0

    Learn Grafana 7.0

    A beginner's guide to getting well versed in analytics, interactive dashboards, and monitoring

    Eric Salituro

    BIRMINGHAM - MUMBAI

    Packt.com

    Subscribe to our online digital library for full access to over 7,000 books and videos, as well as industry leading tools to help you plan your personal development and advance your career. For more information, please visit our website.

    Why subscribe?

    Spend less time learning and more time coding with practical eBooks and Videos from over 4,000 industry professionals

    Improve your learning with Skill Plans built especially for you

    Get a free eBook or video every month

    Fully searchable for easy access to vital information

    Copy and paste, print, and bookmark content

    Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.packt.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at [email protected] for more details.

    At www.packt.com, you can also read a collection of free technical articles, sign up for a range of free newsletters, and receive exclusive discounts and offers on Packt books and eBooks.

    Learn Grafana 7.0

    Copyright © 2020 Packt Publishing

    All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.

    Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing or its dealers and distributors, will be held liable for any damages caused or alleged to have been caused directly or indirectly by this book.

    Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.

    Commissioning Editor: Mrinmayee Kawalkar

    Acquisition Editor:Devika Battike

    Content Development Editor:Sean Lobo

    Senior Editor: David Sugarman

    Technical Editor:Utkarsha S. Kadam

    Copy Editor:Safis Editing

    Project Coordinator:Aishwarya Mohan

    Proofreader: Safis Editing

    Indexer:Priyanka Dhadke

    Production Designer:Joshua Misquitta

    First published: June 2020

    Production reference: 1240620

    Published by Packt Publishing Ltd.

    Livery Place

    35 Livery Street

    Birmingham

    B3 2PB, UK.

    ISBN 978-1-83882-658-1

    www.packt.com

    About the author

    Eric Salituro is currently a senior software engineer with the enterprise data and analytics platform team at Zendesk. He has an IT career that spans more than 30 years, over 20 of which were spent in the motion picture industry working as a pipeline technical director and software developer for innovative and creative studios such as DreamWorks, Digital Domain, and Pixar. Before moving to Zendesk, he worked at Pixar, helping to manage and maintain their production render farm as a senior software developer. Among his accomplishments is the development of a Python API toolkit for Grafana aimed at streamlining the creation of rendering metrics dashboards.

    About the reviewers

    Šimon Podlipský is a software development engineer with a master's degree in management and software quality management from the University of Economics in Prague. His passion is contributing to open source software, including Grafana. He also maintains and develops the Grafana JSON data source, which you can try out yourself after finishing the book.

    Hugh O'Brien is a 15-year veteran of cloud infrastructure and performance monitoring. He is Head of Infrastructure at Thrive Global and has previously worked at Zendesk, Jet.com and Intel. His presentation at Kafka Summit 2018 ZFS: Better Living Through Filesystems (viewable online) is basically just a sequence of Grafana screenshots. He has, for no discernible reason, used Grafana/Prometheus to instrument his home router (Wi-Fi RSSI as radar), android phone (XYZ accelerometery for activity detection), and soon his car’s CAN bus (emissions, maybe?). He holds a degree in Computer Engineering from his hometown of Limerick, Ireland, and is the only living person who knows the origins of the 2.4GHz ISM band.

    Packt is searching for authors like you

    If you're interested in becoming an author for Packt, please visit authors.packtpub.com and apply today. We have worked with thousands of developers and tech professionals, just like you, to help them share their insight with the global tech community. You can make a general application, apply for a specific hot topic that we are recruiting an author for, or submit your own idea.

    Table of Contents

    Title Page

    About Packt

    Why subscribe?

    Copyright and Credits

    Learn Grafana 7.0

    Contributors

    About the author

    About the reviewers

    Packt is searching for authors like you

    Preface

    Who this book is for

    What this book covers

    To get the most out of this book

    Download the example code files

    Download the color images

    Conventions used

    Get in touch

    Reviews

    Getting Started with Grafana

    Introduction to Data Visualization with Grafana

    Technical requirements

    Data and visualization

    Storing, retrieving, and visualizing data

    Why Grafana?

    Installing Grafana

    Grafana in a Docker container

    Grafana for OS X

    Homebrew

    The command line

    Grafana for Linux

    RedHat Linux

    Debian Linux

    Grafana for Windows

    Hosted Grafana on the cloud

    Connecting to the Grafana server

    Summary

    A Tour of the Grafana Interface

    Technical requirements

    Exploring Grafana – the Home dashboard

    Glancing at the sidebar menu

    The dashboards button

    The dashboard panels

    The dashboard settings and view mode

    Learning to use the icons on Grafana's left sidebar

    The Grafana logo

    Search

    Create

    Dashboard

    Folder

    Import

    Dashboards

    Manage

    Playlists

    Snapshots

    Explore

    Alerting

    Alert Rules

    Notification channels

    Configuration

    Data Sources

    Users

    Teams

    Plugins

    Preferences

    API Keys

    Server Admin

    Users

    Orgs

    Settings

    Stats

    Summary

    An Introduction to the Graph Panel

    Technical requirements

    Touring the graph panel

    Creating a simple data source

    Creating a graph panel

    Generating data series in the Query tab

    What is a query?

    Query tab features

    The Data source menu

    Query Options

    Query inspector

    Query

    Query controls

    Add Query

    Duplicating an existing query

    Editing the graph in the Panel tab

    The Settings section

    Setting the panel title and description

    The Visualisation section

    The Display section

    The Hover tooltip

    Stacking and Null value

    The Series overrides section

    The Axes section

    Left Y/Right Y

    X-axis

    The Legend section

    Options

    Values

    Hide series

    The Thresholds section

    Setting a threshold

    The Time Region section

    Setting a time region

    The Data links section

    The Links section

    The Repeat options section

    Monitoring with the Alert tab

    Rule

    Conditions

    No Data & Error Handling

    Notifications

    Summary

    Real-World Grafana

    Connecting Grafana to a Data Source

    Technical requirements

    Installing the Prometheus server

    Installing Prometheus from Docker

    Configuring the Prometheus data source

    Exploring Prometheus

    Using Explore for investigation

    Configuring Grafana metrics

    Querying the Prometheus data source

    Typing in a metrics query

    Querying for process metrics

    Detecting trends with aggregations

    Applying aggregations to our query data

    Understanding the data source limitations

    Querying limits for series aggregations

    Querying limits for time aggregations

    Summary

    Visualizing Data in the Graph Panel

    Technical requirements

    Making advanced queries

    Launching server Docker containers

    Writing the ETL script

    Running the script

    Configuring the InfluxDB data source

    Understanding the time series data display

    Displaying time-aggregated data

    Debugging queries with the Query Inspector

    Observing time interval effects

    Setting the minimum interval

    Setting vertical axes

    Setting axis units

    Converting into Fahrenheit

    Autoscaling the Y axis

    Dual Y-axis display

    Graphing relative humidity

    Graphing wind chill

    Working with legends

    Setting legend contents

    Enabling legend aggregations

    Summary

    Visualization Panels in Grafana

    Technical requirements

    Introducing the Stat panel

    Loading the dataset

    Creating a Stat panel

    Setting the Panel tab's display

    Setting the value aggregation

    Setting Graph mode

    Setting the Field tab's standard options

    Setting units

    Setting Min and Max

    Setting the display name

    Setting the Field tab thresholds

    Setting the Field panel's value mappings

    Building our Stat panels

    Working with the Gauge panel

    Setting the Panel tab's display

    Setting the Field tab's standard options

    Setting the Field tab thresholds

    Adding a Bar Gauge panel

    Setting the Gradient mode

    Setting the Retro LCD mode

    Setting the Basic mode

    Building a bar gauge

    Geolocating data on the Worldmap panel

    Ingesting a new earthquake dataset

    Updating process_cli()

    Updating main()

    Adding dump_eq_data()

    Adding load_eq_data()

    Configuring the InfluxDB data source

    Setting up the Worldmap panel

    Structuring data fields in the Table panel

    Comparing aggregations

    Overriding field settings

    Summary

    Creating Your First Dashboard

    Technical requirements

    Designing a dashboard

    Conveying information

    Determining the visual context

    Prioritizing elements of importance

    Creating a high information density dashboard

    Designing the dashboard

    Building a station text panel

    Modifying the weather.py script

    Building the current conditions panel

    Building the temperature panel

    Building the moisture panel

    Building the barometer panels

    Creating a barometric pressure graph panel

    Creating a barometric pressure trend graph panel

    Building the wind panels

    Creating a wind speed graph panel

    Creating a wind direction stat panel

    Building the visibility panel

    Creating a high information visibility dashboard

    Designing the dashboard

    Building the station panel

    Building the temperature panels

    Buiding a current temperature stat panel

    Creating a high-temperature stat panel

    Creating a low-temperature stat panel

    Creating a dew point stat panel

    Building the barometer panels

    Creating a barometer reading stat panel

    Creating a barometric pressure trend stat panel

    Building the visibility panel

    Building the wind panels

    Creating a wind speed stat panel

    Creating a wind gust stat panel

    Creating a wind direction stat panel

    Building a current conditions panel

    Summary

    Working with Advanced Dashboard Features

    Technical requirements

    Building the data server

    Templating dashboards

    Querying with Elasticsearch

    Creating a template variable

    Adding template variables to the graph panel

    Templating additional variables

    Creating Ad hoc filters

    Repeating rows and panels with template variables

    Creating a new dashboard

    Setting up the template variables

    Configuring the panels

    Linking dashboards

    Adding dashboard tags

    Locking down a template variable

    Creating dashboard links

    Annotating dashboards

    Annotating the graph panel

    Querying tagged annotations

    Creating Elasticsearch annotation queries

    Sharing dashboards

    Sharing dashboard links

    Sharing dashboards by exporting

    Sharing dashboard snapshots

    Summary

    Grafana Alerting

    Technical requirements

    Setting thresholds

    Capturing real-time data

    Processing the Logstash input

    Filtering the Logstash events

    Outputting the data

    Creating an ElasticSearch data source

    Building the dashboard panels

    Setting thresholds

    Constraining thresholds to time regions

    Configuring alerts

    Alert rules

    Conditions

    Handling edge cases

    Assigning alerts to notification channels

    Setting up an email notification channel

    Configuring Grafana Docker containers

    Troubleshooting and controlling alerts

    Checking the alert history

    Testing the rule

    Controlling alerts

    Summary

    Exploring Logs with Grafana Loki

    Loading system logs into Loki

    Visualizing Loki log data with Explore

    Adding additional service logs

    Querying logs and metrics with Explore

    Summary

    Managing Grafana

    Organizing Dashboards

    Technical requirements

    Managing dashboards and folders

    Naming a dashboard

    Dashboard naming tips

    Working with dashboard folders

    Creating a dashboard folder

    Adding dashboards to a folder

    Deleting folders

    Guiding dashboard folder management

    Starring and tagging dashboards

    Marking dashboards as favorites

    Tagging dashboards

    Adding tags

    Deleting tags

    Building and running dashboard playlists

    Creating a playlist

    Displaying a playlist

    Displaying playlists in normal mode

    Displaying playlists in TV mode

    Displaying playlists in Kiosk mode

    Displaying playlists with auto fit panels

    Editing a playlist

    Exploring the dashboard list panel

    Setting dashboard list panel options

    Summary

    Managing Permissions for Users and Teams

    Technical requirements

    Understanding key permissions concepts

    Organizations

    Users

    Roles

    Teams

    Adding users

    Adding users – by invitation only

    Adding users – serve yourself

    Setting permissions

    Setting organization roles

    Setting folder permissions

    Setting dashboard permissions

    Establishing teams

    Setting up a team

    Team members

    Team settings

    Permission rules

    Administering users and organizations

    Managing users

    Disabling or deleting a user

    Elevating a user to Super Admin

    Setting user organizations

    Organization admin and Super Admin roles

    Managing organizations

    Creating a new organization

    Renaming and setting the organization preferences

    Switching between organizations

    Summary

    Authentication with External Services

    Technical requirements

    Authenticating with OpenLDAP

    Setting up an OpenLDAP server

    Configuring Grafana to use LDAP

    Testing the Grafana configuration

    Adding a user to OpenLDAP

    Looking up a user in Grafana

    Authenticating with GitHub

    Authenticating with Google

    Authenticating with Okta

    Summary

    Cloud Monitoring

    Configuring an AWS CloudWatch data source

    Creating the policy

    Creating the user

    Configure the new data source

    Configuring a Microsoft Azure Monitor data source

    Registering the Grafana application

    Setting the application role

    Generating application Secrets

    Configuring the Azure Monitor data source

    Configuring Azure Log Analytics

    Generating the API key for Application Insights Details

    Configuring a Google Stackdriver data source

    Enabling Google Cloud APIs

    Creating a Google Service Account

    Configuring a Google Stackdriver data source

    Summary

    Other Books You May Enjoy

    Leave a review - let other readers know what you think

    Preface

    Grafana is an open source analytics platform used to analyze and monitor time-series data. This beginner's guide will help you get to grips with Grafana's new features for querying, visualizing, and exploring metrics and logs, regardless of where they are stored.

    This book begins by showing you how to install and set up the Grafana server. You'll explore the workings of various components of the Grafana interface, along with its security features, and you will learn how to visualize and monitor data using InfluxDB, Prometheus, Logstash, and Elasticsearch. This Grafana book covers the advanced features of the Graph panel and shows you how Stat, Table, Bar, Gauge, and Text are used. You'll build dynamic dashboards to perform end-to-end analytics and label and organize dashboards into folders to make them easier to find. As you progress through it, this book delves into the administrative aspects of Grafana by creating alerts, setting permissions for teams, and implementing user authentication. Along with exploring Grafana's multi-cloud monitoring support, you'll also learn about Grafana's Loki system, which is a backend logger for users running Prometheus and Kubernetes.

    By the end of this book, you'll have gained all the knowledge you need to start building interactive dashboards.

    Who this book is for

    This book is for business intelligence developers, business analysts, data analysts, and anyone interested in performing time-series data analysis and monitoring using Grafana. Those looking to create and share interactive dashboards or looking to get up to speed with the latest features of Grafana will also find this book useful. Although no prior knowledge of Grafana is required, basic knowledge of data visualization and some experience with Python programming will help you understand the concepts covered in this book.

    What this book covers

    Chapter 1, Introduction to Data Visualization with Grafana, provides a brief introduction to the use of data visualization in general and specifically in Grafana. We will then move on to installing a Grafana server onto your machine, using either a native installer or a Docker container. Launching the server and connecting to it with a web browser will also be covered.

    Chapter 2, A Tour of the Grafana Interface, explores the workings of the major interface components once you have loaded the Grafana web app.

    Chapter 3, An Introduction to the Graph Panel, dives into the Graph panel for a closer look at how to work with the major components of the panel after creating a test data source. We will also identify common panel elements in preparation for looking at other panels.

    Chapter 4, Connecting Grafana to a Data Source, shows you how to install a supported data source (such as Prometheus, InfluxDB, OpenTSDB, or Elasticsearch) as a Docker container, load an actual time-series dataset, and visualize the data.

    Chapter 5, Visualizing Data in the Graph Panel, is where we will show some of the more advanced features of the Graph panel.

    Chapter 6, Visualization Panels in Grafana, takes a quick tour of the other major panels (Singlestat, Table, Heatmap, and Text) and how they're used. We will hold back on looking at the Dashboard and Alert List panels for later chapters.

    Chapter 7, Creating Your First Dashboard, shows how to build a simple dashboard and some panels. We will explore the major components of a dashboard. Finally, we will become familiar with the dashboard interface by moving and resizing panels.

    Chapter 8, Working with Advanced Dashboard Features, explores the powerful advanced features of the dashboard, including annotations, templating with variables, and dashboard linking, as well as techniques for sharing dashboards.

    Chapter 9, Grafana Alerting, shows you how to create threshold alerts in the graph and connect them to notification channels.

    Chapter 10, Exploring Logs with Grafana Loki, uses Loki and Explore to answer questions about a log dataset.

    Chapter 11, Organizing Dashboards, shows you how to label dashboards and organize them into folders to make them easier to find.

    Chapter 12, Managing Permissions for Users and Teams, shows you how to manage user permissions using teams.

    Chapter 13, Authentication with External Services, shows you how managers can connect user authentication to a variety of external services.

    Chapter 14, Cloud Monitoring, shows you how Grafana can provide monitoring support for cloud service infrastructure.

    To get the most out of this book

    In order to complete the majority of the exercises in this book, you will need to download and install Docker with Docker Compose. For the examples in the book, we will be downloading and installing other software and datasets, along with Grafana and Loki, so you will need an internet connection. You could download and install each software package independently, but besides Grafana itself, our tutorial instructions are designed to work with Docker. We do that so that all software dependencies and network management can be encapsulated within Docker Compose.

    We will run a fair amount of software from the command line, so you should be comfortable with typing commands into a shell like Bash or Windows Command Prompt:

    In order to follow along with the exercises in Chapter 13, Authentication with External Services, you will need accounts with GitHub, Google, and Okta. To follow the exercises in Chapter 14, Cloud Monitoring, you will need to create an account with Amazon Web Services, Google Cloud, and Microsoft Azure.

    The examples and software in this book have not been validated for security. They require an external internet connection and leverage open source software under a variety of licenses, so if you intend to use any of this software within a security-conscious computing environment (such as in an education or corporate environment), it is highly recommended that you consult your local IT professionals in advance.

    If you are using the digital version of this book, we advise you to type the code in yourself or access the code via the GitHub repository (link available in the next section). Doing so will help you avoid any potential errors related to the copying and pasting of code. Each chapter folder includes dashboards, docker-compose.yml files, and a Makefile to help out when running some of the command-line tools.

    Having an interest in science in general and data science, in particular, will go a long way toward making this book interesting and useful. It would also be helpful to have some programming experience with a scripting language such as Python, but since all the code is included, you can run it directly from a clone of the book's GitHub repository. Some familiarity with relational databases will help you understand some of the terminology and concepts behind time-series databases.

    I hope to show, with the examples in this book, how easy it is to build simple data visualization pipelines with Grafana and today's open source tools. I also hope this book will inspire and empower you to seek out your own datasets to acquire, analyze, and visualize. Best of luck!

    Download the example code files

    You can download the example code files for this book from your account at www.packt.com. If you purchased this book elsewhere, you can visit www.packtpub.com/support and register to have the files emailed directly to you.

    You can download the code files by following these steps:

    Log in or register at www.packt.com.

    Select the Support tab.

    Click on Code Downloads.

    Enter the name of the book in the Search box and follow the onscreen instructions.

    Once the file is downloaded, please make sure that you unzip or extract the folder using the latest version of:

    WinRAR/7-Zip for Windows

    Zipeg/iZip/UnRarX for Mac

    7-Zip/PeaZip for Linux

    The code bundle for the book is also hosted on GitHub at https://github.com/PacktPublishing/Learn-Grafana-7.0. In case there's an update to the code, it will be updated on the existing GitHub repository.

    We also have other code bundles from our rich catalog of books and videos available athttps://github.com/PacktPublishing/. Check them out!

    Download the color images

    We also provide a PDF file that has color images of the screenshots/diagrams used in this book. You can download it here:https://static.packt-cdn.com/downloads/9781838826581_ColorImages.pdf.

    Conventions used

    There are a number of text conventions used throughout this book.

    CodeInText:Indicates code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles.Here is an example:The first line of our main() function sets up the logging level.

    A block of code is set as follows:

    def main():

        logging.basicConfig(level=logging.INFO)

    Any command-line input or output is written as follows:

    % docker-compose down

    Bold: Indicates a new term, an important word, or words that you see onscreen. For example, words in menus or dialog boxes appear in the text like this. Here is an example: Click on Create | Dashboard; you should see a panel with three buttons.

    Warnings or important notes appear like this.

    Tips and tricks appear like this.

    Get in touch

    Feedback from our readers is always welcome.

    General feedback: If you have questions about any aspect of this book,mention the book title in the subject of your message and email us [email protected].

    Errata: Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you have found a mistake in this book, we would be grateful if you would report this to us. Please visitwww.packtpub.com/support/errata, selecting your book, clicking on the Errata Submission Form link, and entering the details.

    Piracy: If you come across any illegal copies of our works in any form on the Internet, we would be grateful if you would provide us with the location address or website name. Please contact us [email protected] a link to the material.

    If you are interested in becoming an author: If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, please visitauthors.packtpub.com.

    Reviews

    Please leave a review. Once you have read and used this book, why not leave a review on the site that you purchased it from? Potential readers can then see and use your unbiased opinion to make purchase decisions, we at Packt can understand what you think about our products, and our authors can see your feedback on their book. Thank you!

    For more information about Packt, please visit packt.com.

    Getting Started with Grafana

    In this section, you will learn how to install a Grafana server and create a dashboard with a single panel.

    This section is comprised of the following chapters:

    Chapter 1, Introduction to Data Visualization with Grafana

    Chapter 2, A Tour of the Grafana Interface

    Chapter 3, An Introduction to the Graph Panel

    Introduction to Data Visualization with Grafana

    Welcome to Learn Grafana 7.0! Together, we will explore Grafana, an exciting, multi-faceted visualization tool for data exploration, analysis, and alerting. We will learn how to install Grafana, become familiar with some of its many features, and even use it to investigate publicly available real-world datasets.

    Whether you are an engineer watching terabytes of metrics for a critical system fault, an administrator sifting through a haystack of log output looking for the needle of an application error, or just a curious citizen eager to know how your city works, Grafana can help you monitor, explore, and analyze data. The key to getting a handle on big data is the ability to visualize it.

    But before we find out how Grafana gives you that ability, let's briefly review a few basic concepts behind data visualization.

    The following topics will be covered in this chapter:

    Data and visualization – an overview of the data landscape and how visualization is a useful

    Enjoying the preview?
    Page 1 of 1