Wilson Mar bio photo

Wilson Mar

Hello!

Calendar YouTube Github

LinkedIn

Open-source server to display metrics for DevSecOps and others

US (English)   Norsk (Norwegian)   Español (Spanish)   Français (French)   Deutsch (German)   Italiano   Português   Estonian   اَلْعَرَبِيَّةُ (Egypt Arabic)   Napali   中文 (简体) Chinese (Simplified)   日本語 Japanese   한국어 Korean

Overview

This article are my notes about Grafana, marketed at Grafana.com, with documentation at https://grafana.com/docs/grafana/latest

NOTE: Content here are my personal opinions, and not intended to represent any employer (past or present). “PROTIP:” here highlight information I haven’t seen elsewhere on the internet because it is hard-won, little-know but significant facts based on my personal research and experience.

My contribution here is logical sequencing for a deep yet concise hands-on tutorial.

Origins

Grafana began in 2014 at https://github.com/Grafana/Grafana. It quickly became one of the most popular open source projects on GitHub.

The original developer, Torkel Ödegaard (@Grafana@torkelo), formerly at eBay Stockholm, Sweden, spoke Dec. 19, 2014 in San Francisco six months after release.

  • Grafana is written in Golang.
  • [21:53] “I work on this full time, mostly paid by my own savings. But I have sponsors in Squarespace and Dreamhost”.

Grafana is a visualization tool for metrics, such as time series data for DevOps and other purposes.

Competitors

Grafana Products

Grafana runs in several modes:

  • Grafana (local) server
  • Grafana Cloud operated by Grafana, Inc., with a free tier and paid enterprise tier.

Here’s an alphabetical list of Grafana products:

  • Grafana Tempo has a TraceQL (Query Language) to query traces and logs in Parquet format databases such as S3, GCS, and Azure Blob Storage. It’s based on PromQL and LogQL. Works on Grafana 9.4+. Tempo is a OpenTelemetry-compatible endpoint.

  • Grafana Agent - Prometheus-compatible metrics collection agent based on the OpenTelemetry specification, designed to be highly available, horizontally scalable, and fault tolerant.

  • Grafana Beyla - eBPF auto-instrumentation for Linux. It’s a tool that automatically instruments Linux applications with eBPF to collect metrics and traces.

  • Grafana Cloud - a hosted version of Grafana, Prometheus, Loki, and Tempo. It’s designed to be highly available, horizontally scalable, and fault tolerant.
    • https://grafana.com/products/cloud/
    • https://grafana.com/docs/grafana-cloud/quickstart/

  • Grafana Cortex - Multi-tenant, horizontally scalable Prometheus-as-a-Service. It’s a multi-tenant, horizontally scalable Prometheus-as-a-Service. It’s designed to be highly available, horizontally scalable, and fault tolerant.

  • Grafana Enterprise - Enterprise version of Grafana. It’s an enterprise version of Grafana that adds enterprise data sources, advanced authentication options (LDAP, SAML), more permission controls, 24x7x365 support, and training from the core Grafana team.

  • Grafana Foro - front-end application observability web SDK to instrument web applications. It’s designed to be highly available, horizontally scalable, and fault tolerant.

  • Grafana Graphite - Graphite data source for Grafana. It’s a data source for Grafana that allows you to query and visualize data from Graphite.

  • Grafana Graphite-Consul - Graphite data source for Grafana. It’s a data source for Grafana that allows you to query and visualize data from Graphite.

  • Grafana K6 - an open-source load testing tool for Load testing tool for developers and DevOps teams to run performance tests against APIs, microservices, and web sites. spike, stress, and soak tests.

  • Grafana Loki - Log aggregation system inspired by Prometheus. It’s a horizontally-scalable, highly-available, multi-tenant log aggregation system inspired by Prometheus. It’s designed to be cost-effective and easy to operate, as it does not index the contents of the logs, but rather a set of labels for each log stream.

  • Grafana Mimir - A multi-tenant distributed time series database backend built on top of Apache Cassandra and Apache Kafka. It’s designed to be highly available, horizontally scalable, and fault tolerant.

  • Grafana Metrictank - Multi-tenant timeseries platform for Graphite. It’s a multi-tenant time-series platform for Graphite that is designed to be highly available, horizontally scalable, and fault tolerant.

  • Grafana OnCall - Incident management system for DevOps teams. It’s an incident management system that helps DevOps teams manage on-call schedules and escalations, and provides a platform for incident response.

  • Grafana Promtail - Log agent for Loki. It’s a log agent for Loki that runs on every machine and tails log files, aggregates log data, and forwards it to Loki.

  • Grafana Tempo - Distributed tracing backend. It’s a distributed tracing backend that is designed to be highly available, horizontally scalable, and fault tolerant. It’s based on the OpenTelemetry specification.

  • Grafana Tanka - A flexible tool for managing Kubernetes configuration using Jsonnet. It’s a flexible tool for managing Kubernetes configuration using Jsonnet.

Install Grafana Agent on macOS for Cloud

  • https://grafana.com/blog/2022/05/20/introducing-the-macos-integration-for-grafana-cloud/
  • https://www.linkedin.com/pulse/monitoring-your-mac-prometheus-stephen-townshend/

  1. Using Homebrew, install the Grafana Agent universal collector to collect metrics, including Mac-specific memory metrics, and logs from macOS for use in the Grafana Cloud:

    brew tap grafana/grafana
    brew install grafana-agent

    QUESTION: Difference vs Prometheus Node Exporter?

    Notice the response (at time of writing) installs a specific edition for a specific version of macOS (such as Ventura):

    grafana-agent 0.39.1 is already installed but outdated (so it will be upgraded).
    ==> Downloading https://ghcr.io/v2/homebrew/core/grafana-agent/manifests/0.39.2
    ######################################################################################################################################### 100.0%
    ==> Fetching grafana-agent
    ==> Downloading https://ghcr.io/v2/homebrew/core/grafana-agent/blobs/sha256:569e8abf8904d7292fcd413253ca9bb06bc38c7807108079f25f4dcc70bb9e22
    ######################################################################################################################################### 100.0%
    ==> Upgrading grafana-agent
      0.39.1 -> 0.39.2 
     
    ==> Pouring grafana-agent--0.39.2.ventura.bottle.tar.gz
    ==> Caveats
    The agent uses a configuration file that you must customize before running:
      /usr/local/etc/grafana-agent/config.yml
     
    To start grafana-agent now and restart at login:
      brew services start grafana-agent
    Or, if you don't want/need a background service you can just run:
      /usr/local/opt/grafana-agent/bin/grafana-agent -config.file /usr/local/etc/grafana-agent/config.yml
    ==> Summary
    🍺  /usr/local/Cellar/grafana-agent/0.39.2: 9 files, 422.7MB
    ==> Running `brew cleanup grafana-agent`...
    Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
    Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
    Removing: /usr/local/Cellar/grafana-agent/0.39.1... (9 files, 422.7MB)
    Removing: /Users/wilsonmar/Library/Caches/Homebrew/grafana-agent--0.39.1... (108.6MB)
    
  2. If you don’t have a Grafana Cloud account, make one here, otherwise, Log in by providing the email your registered for, then click “Sign in”.

  3. Find “macOS integration” at https://grafana.com/docs/grafana-cloud/monitor-infrastructure/integrations/integration-reference/integration-macos-node/

  4. The pre-built dashboard includes the most important macOS metrics such as CPU, memory, network, and disk usage.

    As with other Grafana Cloud integrations, macOS logs panels are bundled so that they can be quickly accessed when you need more information about what’s going on with your Mac.

  5. In your Grafana Cloud stack, click Connections in the left-hand menu.
  6. Find macOS and click its tile to open the integration.
  7. Review the prerequisites in the Configuration Details tab and set up Grafana Agent to send macOS metrics and logs to your Grafana Cloud instance.
  8. Click Install to add this integration’s pre-built dashboards and alerts to your Grafana Cloud instance, and you can start monitoring your macOS setup.

  9. https://www.grafana.com/download

    Promtail pipelines parse logs to extract additional fields including logs source (sender). Thanks to this, logs can be filtered by sender to narrow down the results.


Install Grafana Server on macOS

  • https://logz.io/blog/grafana-tutorial/

  1. https://www.grafana.com/download

    Grafana’s releases are sematically tagged.

    There is an Enterprise Edition because the organization makes money by selling its Enterprise edition and cloud services. See https://grafana.com/docs/grafana-cloud/quickstart/logs_agent_linuxnode/

    Enterprise edition

    https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/

    Their Install Guide says “Open Source - Functionally identical to the enterprise version, but you will need to download the enterprise version if you want enterprise features”

    Grafana Enterprise adds enterprise data sources, advanced authentication options (LDAP, SAML), more permission controls, 24x7x365 support, and training from the core Grafana team.

    There is no installer for MacOS Enterprise, so run the Docker image on your Mac.

    Raspberry Pi

    There is an installer for ARM chips (Raspberry Pi). See https://www.hackster.io/search?i=projects&q=grafana

    Releases

  2. Details about each release are at:

    https://github.com/grafana/grafana/releases

  3. Install using Homebrew:

    brew install grafana

    The response at time of writing:

    🍺  /usr/local/Cellar/grafana/10.2.3: 7,714 files, 349.5MB
    

    History:

    • grafana/6.6.1: 4,417 files, 189.6MB

  4. Set the version number for commands to follow:

    GRAFANA_VER=$( grafana version 10.2.3 )
    echo "GRAFANA_VER=$GRAFANA_VER"  # GRAFANA_VER=10.2.3
    
  5. For a list of commands:

    grafana-cli
    

    Server

  6. Confirm server version installed:

    grafana-server -v

    The response at time of writing:

    Version 9.1.6 (commit: unknown-dev, branch: main)

    Configure Server

    PROTIP: Avoid altering the defaults.ini file at: /opt/homebrew/Cellar/grafana/9.1.6/share/grafana/conf/defaults.ini

  7. Copy file grafana.ini to make a custom.ini file in folder conf:

    • /opt/homebrew/Cellar/grafana/9.1.6/.bottle/etc/grafana/grafana.ini
    • /usr/local/etc/grafana/grafana.ini

    Change only what needs customization by uncommentine lines, removing the semicolon from the beginning of each line.

    Starting Server

  8. To have launchd start grafana now and restart automatically at login:

    sudo brew services start grafana

    To stop:

    sudo brew services stop grafana
  9. Load the server:

    brew tap homebrew/services
  10. If you don’t want/need a background service, On an ARM M1 Mac, build the execution command with the version number at:

    /opt/homebrew/Cellar/grafana/$GRAFANA_VER/bin/grafana-server
    

    Alternately, on a x86 Intel mac:

    /usr/local/Cellar/grafana/$GRAFANA_VER/bin/grafana-server
    
  11. Define configuration files Alternately, you can just run on Linux:

    sudo grafana-server --config=/usr/local/etc/grafana/grafana.ini \
    --homepath /usr/local/share/grafana \
    --packaging=brew cfg:default.paths.logs=/usr/local/var/log/grafana \
    cfg:default.paths.data=/usr/local/var/lib/grafana \
    cfg:default.paths.plugins=/usr/local/var/lib/grafana/plugins
    

    UI

    http://localhost:3000/login
    
  12. Type in your password and click Allow.

    grafana-accept-790x304

    The response, for example:

    INFO[03-11|17:19:43] Starting Grafana                         logger=server version=6.6.1 commit=unknown-dev branch=master compiled=2020-02-06T10:22:13-0700
    INFO[03-11|17:19:43] Config loaded from                       logger=settings file=/usr/local/share/grafana/conf/defaults.ini
    INFO[03-11|17:19:43] Config loaded from                       logger=settings file=/usr/local/etc/grafana/grafana.ini
    INFO[03-11|17:19:43] Config overridden from command line      logger=settings arg="default.paths.data=/usr/local/var/lib/grafana"
    INFO[03-11|17:19:43] Config overridden from command line      logger=settings arg="default.paths.logs=/usr/local/var/log/grafana"
    INFO[03-11|17:19:43] Config overridden from command line      logger=settings arg="default.paths.plugins=/usr/local/var/lib/grafana/plugins"
    INFO[03-11|17:19:43] Path Home                                logger=settings path=/usr/local/share/grafana
    INFO[03-11|17:19:43] Path Data                                logger=settings path=/usr/local/var/lib/grafana
    INFO[03-11|17:19:43] Path Logs                                logger=settings path=/usr/local/var/log/grafana
    INFO[03-11|17:19:43] Path Plugins                             logger=settings path=/usr/local/var/lib/grafana/plugins
    INFO[03-11|17:19:43] Path Provisioning                        logger=settings path=/usr/local/share/grafana/conf/provisioning
    INFO[03-11|17:19:43] App mode production                      logger=settings
    INFO[03-11|17:19:43] Initializing SqlStore                    logger=server
    INFO[03-11|17:19:43] Connecting to DB                         logger=sqlstore dbtype=sqlite3
    INFO[03-11|17:19:43] Starting DB migration                    logger=migrator
    INFO[03-11|17:19:43] Initializing HTTPServer                  logger=server
    INFO[03-11|17:19:43] Initializing BackendPluginManager        logger=server
    INFO[03-11|17:19:43] Initializing PluginManager               logger=server
    INFO[03-11|17:19:43] Starting plugin search                   logger=plugins
    INFO[03-11|17:19:43] Initializing HooksService                logger=server
    INFO[03-11|17:19:43] Initializing OSSLicensingService         logger=server
    INFO[03-11|17:19:43] Initializing InternalMetricsService      logger=server
    INFO[03-11|17:19:43] Initializing RemoteCache                 logger=server
    INFO[03-11|17:19:43] Initializing QuotaService                logger=server
    INFO[03-11|17:19:43] Initializing ServerLockService           logger=server
    INFO[03-11|17:19:43] Initializing UserAuthTokenService        logger=server
    INFO[03-11|17:19:43] Initializing RenderingService            logger=server
    INFO[03-11|17:19:43] Initializing AlertEngine                 logger=server
    INFO[03-11|17:19:43] Initializing DatasourceCacheService      logger=server
    INFO[03-11|17:19:43] Initializing LoginService                logger=server
    INFO[03-11|17:19:43] Initializing SearchService               logger=server
    INFO[03-11|17:19:43] Initializing TracingService              logger=server
    INFO[03-11|17:19:43] Initializing UsageStatsService           logger=server
    INFO[03-11|17:19:43] Initializing CleanUpService              logger=server
    INFO[03-11|17:19:43] Initializing NotificationService         logger=server
    INFO[03-11|17:19:43] Initializing provisioningServiceImpl     logger=server
    INFO[03-11|17:19:43] Backend rendering via phantomJS          logger=rendering renderer=phantomJS
    WARN[03-11|17:19:43] phantomJS is deprecated and will be removed in a future release. You should consider migrating from phantomJS to grafana-image-renderer plugin. logger=rendering renderer=phantomJS
    INFO[03-11|17:19:43] Initializing Stream Manager 
    INFO[03-11|17:19:43] HTTP Server Listen                       logger=http.server address=[::]:3000 protocol=http subUrl= socket=
    
  13. List the process

    Upgrade Grafana version

  14. To upgrade Grafana:

    brew reinstall grafana

Data sources

Grafana has a growing list of data sources it can read from, via plug-ins:

  • CloudWatch
  • Elasticsearch (document database)

  • Graphite
  • Microsoft SQL Server
  • MySQL
  • ProtgreSQL

  • OpenTSDB (time series database)
  • InfluxDB
  • Prometheus

2h 43m PromQL for Prometheus 2.3.1 within a Docker image. He recommends having each project deploy its own Prometheus and Grafana instance rather than a central monitoring stack, sharing the admin burden. need to be highly available.

Datasource Plugin Thrunk (by Sven Nierlein)?

Filters

PROTIP: Define filter statements before jumping into the Grafana UI.

Panels within Dashboard

Within each dashboard are panels with rows.

To add an additional panel within an established dashboard:

  1. In your profile, get Editor Role.
  2. No need to designate a data source.
  3. Star the dashboard (Mark as favorite) on the top menu.
  4. Set Home Dashboard in Preferences.

  5. Add panel.
  6. Choose visualization.
  7. Graph.

Share (archive) dashboard

  1. Click on the share icon at the top menu.
  2. Click Export tab.
  3. Consider “Export for sharing externally”.
  4. Click “Save to file”. Adjust folder and file name.

    PROTIP: Save the file in GitHub for Infrastructure as Code. Then you won’t need to add a date/time stamp to the file.

  5. Add tab, Add Row
  6. Click on Row gear icon for options.
  7. Update.
  8. Click icon at top. Dummy graph appears.
  9. Change Panel Title.
  10. Select Data Source: “prometheus”.
  11. Add query string
  12. Set Panel Title.

Metrics

The Grafana Cloud forever-free tier includes 3 users and up to 10,000 metrics series with 50 GB of logs, traces, profiles, with 14 days of retention.

The health of Hardware resources is evaluated using the USE metrics:
Utilization, Saturation, Errors. Each indicates a symptom of problems. The relationship of levels among them provides additional clues about the problem.

The health of service-oriented resources is evaluated using the REDS metrics:
Requests, Errors, Duration, Saturation, what Google calls the “Four Golden Signals”. They are a good proxy for users’ actual experience.

PROTIP: Standardizing the layout of dashboards across an organization enables various operators across different teams to more quickly collaborate on the interpretation of dashboards.

An example dashboard for macOS:
grafana-macos-dashboard grafana-macos-dash1-1920x1235.png

Snapshots

PROTIP: Set an expiration on snapshots to avoid clutter.

Publish snapshots to snapshot.raintank.io

Alerts

Key alerting rules included:

  • NodeFilesystemAlmostOutOfSpace (Warning)
  • NodeFilesystemAlmostOutOfSpace (Critical)

  • NodeFilesystemFilesFillingUp (Warning)
  • NodeFilesystemFilesFillingUp (Critical)

  • NodeFilesystemAlmostOutOfFiles (Warning)
  • NodeFilesystemAlmostOutOfFiles (Critical)

  • NodeNetworkReceiveErrs (Warning)
  • NodeNetworkTransmitErrs (Warning)
  • NodeTextFileCollectorScrapeError (Warning)

NASA OpenMCT Dashboard

VIDEO by John Hill: “Automated performance modeling with NASA Open MCT, Grafana Cloud, and k6” https://nasa.github.io/openmct/ = Open MCT is a next-generation mission operations data visualization framework. Web-based, for desktop and mobile.

grafana-openmct-1932x804.png

OpenMCT had the most public engagement among all NASA open source projects

https://devpost.com/software/openmct

https://github.com/nasa/openmct-demo

VIDEO series:

  1. After reading my Node Install

  2. Navigate to a folder where your project will be created.

    cd ~/gh
    
  3. Clone the most starred NASA project on Github:

    git clone https://github.com/nasa/openmct --depth 1
    cd openmct
    
  4. Install dev dependencies:

    npm install
    

    Packages installed include: autoconf, awscli, c-ares, curl, openssl@3, lightg, gettext, numpy, openblas, python@3.12, localstack, pipenv, python-argcomplete, python-jinga, python-markdown, python-requests, python-sphinx, python-yaml, sphinx-rtd-theme, and tox.

    Results:

    Could not symlink bin/activate-global-python-argcomplete
    Target /usr/local/bin/activate-global-python-argcomplete
    already exists. You may want to remove it:
      rm '/usr/local/bin/activate-global-python-argcomplete'
     
    To force the link and overwrite all conflicting files:
      brew link --overwrite python-argcomplete
     
    To list all files that would be deleted:
      brew link --overwrite --dry-run python-argcomplete
     
    Possible conflicting files are:
    /usr/local/bin/activate-global-python-argcomplete
    /usr/local/bin/python-argcomplete-check-easy-install-script
    /usr/local/bin/register-python-argcomplete
    Error: Could not symlink share/bash-completion/completions/gapplication
    Target /usr/local/share/bash-completion/completions/gapplication
    is a symlink belonging to glib. You can unlink it:
      brew unlink glib
     
    To force the link and overwrite all conflicting files:
      brew link --overwrite glib
    
  5. Run local dev server:

    npm start
    

    Response:

    > openmct@3.3.0-next start
    > npx webpack serve --config ./.webpack/webpack.dev.js
     
    Need to install the following packages:
    webpack@5.90.0
    Ok to proceed? (y) y
    CLI for webpack must be installed.
      webpack-cli (https://github.com/webpack/webpack-cli)
     
    We will use "npm" to install the CLI via "npm install -D webpack-cli".
    Do you want to install 'webpack-cli' (yes/no): yes
    Installing 'webpack-cli' (running 'npm install -D webpack-cli')...
    npm WARN deprecated argv@0.0.2: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
    npm WARN deprecated codecov@3.8.3: https://about.codecov.io/blog/codecov-uploader-deprecation-plan/
     
    added 994 packages, and audited 995 packages in 49s
     
    131 packages are looking for funding
      run `npm fund` for details
     
    found 0 vulnerabilities
    Error: Cannot find module 'webpack-cli/package.json'
    Require stack:
           - /Users/wilsonmar/.npm/_npx/89d6e678e21f2dae/node_modules/webpack/bin/webpack.js
     at Module._resolveFilename (node:internal/modules/cjs/loader:1149:15)
     at Function.resolve (node:internal/modules/helpers:187:19)
     at runCli (/Users/wilsonmar/.npm/_npx/89d6e678e21f2dae/node_modules/webpack/bin/webpack.js:78:26)
     at /Users/wilsonmar/.npm/_npx/89d6e678e21f2dae/node_modules/webpack/bin/webpack.js:176:5
     at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
      code: 'MODULE_NOT_FOUND',
      requireStack: [
     '/Users/wilsonmar/.npm/_npx/89d6e678e21f2dae/node_modules/webpack/bin/webpack.js'
      ]
    }
    
  6. Install again:

    npm install
    

    This time:

    > openmct@3.3.0-next prepare
    > npm run build:prod && npx tsc
     
    > openmct@3.3.0-next build:prod
    > webpack --config ./.webpack/webpack.prod.js
     
    webpack compiled successfully
     
    up to date, audited 995 packages in 1m
     
    131 packages are looking for funding
      run `npm fund` for details
     
    found 0 vulnerabilities
    
  7. Try again:

    cd
    cd gh
    git clone git@github.com:nasa/openmct-tutorial.git --depth 1
    cd openmct-tutorial
    npm install
    npm start
    

    Response:

    > openmct@3.3.0-next start
    > npx webpack serve --config ./.webpack/webpack.dev.js
     
     [webpack-dev-server] Project is running at:
     [webpack-dev-server] Loopback: http://localhost:8080/
     [webpack-dev-server] On Your Network (IPv4): http://192.168.1.17:8080/
     [webpack-dev-server] On Your Network (IPv6): http://[fe80::1]:8080/
     [webpack-dev-server] Content not from webpack is served from '/Users/wilsonmar/github-wilsonmar/openmct/dist' directory
    webpack compiled successfully
    </pre>
    
    
  8. Open a browser to http://192.168.1.17:8080/

    You should see “My Items”.

  9. Open another Terminal:

    cd
    cd gh
    git clone git@github.com:nasa/openmct-tutorial.git --depth 1
    cd openmct-tutorial
    npm install
    npm start
    

    Response:

    npm WARN EBADENGINE Unsupported engine {
    npm WARN EBADENGINE   package: 'openmct@3.0.2',
    npm WARN EBADENGINE   required: { node: '>=16.19.1 <20' },
    npm WARN EBADENGINE   current: { node: 'v21.6.1', npm: '10.2.4' }
    npm WARN EBADENGINE }
     
    added 63 packages, and audited 64 packages in 2s
     
    8 packages are looking for funding
      run `npm fund` for details
     
    1 high severity vulnerability
     
    To address all issues, run:
      npm audit fix --force
     
    Run `npm audit` for details.
    
  10. Try to fix the vulnerability:

    npm audit fix --force
    

    Response:

    npm WARN using --force Recommended protections disabled.
    npm WARN audit Updating openmct to 3.2.0, which is outside your stated dependency range.
     
    changed 1 package, and audited 64 packages in 3s
     
    8 packages are looking for funding
      run `npm fund` for details
     
    found 0 vulnerabilities
    </pre>
    
    
  11. Open a browser to https://github.com/nasa/openmct-tutorial/tags and notice the commit tags holding files:

    • part-a
    • part-b-step-1
    • part-b-step-2
    • part-b-step-3
    • part-b-step-4
    • part-c
    • part-d

    NOTE: Git tags are mark specific points in your project’s history as significant, typically to denote project releases.

  12. Press command+shift+ \ to open another Terminal:

    cd ~/github-wilsonmar/openmct-tutorial
    git tag
    

    Result:

    error: pathspec 'part-X-step-N' did not match any file(s) known to git
    
  13. Select the branch to work on:

    git checkout -f part-b-step-1
    
  14. Start:

    npm start
    

    Response:

    > openmct-tutorials@0.0.1 start
    > node example-server/server.js
     
    Example spacecraft launched!
    Press Enter to toggle thruster state.
    Open MCT hosted at http://localhost:8080
    History hosted at http://localhost:8080/history
    Realtime hosted at ws://localhost:8080/realtime
    
  15. Press Enter on keyboard for:

    Thrusters ON
    
  16. Press Enter on keyboard for:

    Thrusters OFF
    
  17. Stop the server by pressing control-C.

  18. View the index.html file associated with each branch, such as:

    https://github.com/nasa/openmct-tutorial/blob/part-a/index.html

  19. Point Git to the tag:

    git checkout -f part-a
    

    FIXME: Response:

    error: pathspec 'part-b-step-2' did not match any file(s) known to git
    
  20. Open a browser to http://localhost:8080/

    Response:

    Cannot GET /history

Videos from Grafana.com

VIDEO: Grafana’s schema-driven data language: Cuetsy and Thema

Torkel himself presents 12 videos in this YouTube Playlist also listed in the Grafana website:

openmct@3.3.0-next start npx webpack serve –config ./.webpack/webpack.dev.js

[webpack-dev-server] Project is running at: [webpack-dev-server] Loopback: http://localhost:8080/ [webpack-dev-server] On Your Network (IPv4): http://192.168.1.17:8080/ [webpack-dev-server] On Your Network (IPv6): http://[fe80::1]:8080/ [webpack-dev-server] Content not from webpack is served from ‘/Users/wilsonmar/github-wilsonmar/openmct/dist’ directory webpack compiled successfully 1/. Building Graphite Queries Sep 15, 2014 [14:02]

A leaf note is a variable that contains data (such as count, dollars, etc.).

{} braces glob individual metrics together.

  1. Templated Graphite Queries Sep 16, 2014 12:55

  2. What’s New in Grafana 2.0 Apr 19, 2015 [13:48]

  3. Installation & Configuration on Ubuntu / Debian 14:36

  4. Installation & Configuration on Redhat / Centos 14:04

  5. Adding data sources, users & organizations 15:17

  6. Beginners guide to building dashboards 10:07

  7. What’s New In Grafana 3.0 19:13

  8. Elasticsearch 24:42

  9. Dashboard Discovery & Sharing 7:40

Templates

Templates enable you to add variables

  1. In Dashboard settings, Features tab, enable Templating checkbox. Close.
  2. Click the gear next to VARIABLES.
  3. Add a variable with a query type.
  4. All option to use a * wildcard in the query.
  5. Click the green > arrow to see values returned.

  6. Also, add an interval type of variable.
  7. Edit the time periods suggested in the Value field.
  8. In the Graph, change the summarize to specify the variable.
  9. VARIABLES: $internval auto [11:10]

  10. Variable “smoothing” with Type custom [11:24]
  11. Change the movingAverage value to $smoothing

SQL

Grafana adds WHERE clause for time, such as $__timeFilter(time).

Plug-ins

https://grafana.com/grafana/plugins

grafana-cli plugins install sni-thruk-datasource

Videos

Monitoring Containerized Application Health with Docker
by Elton Stoneman 8 Aug 2018

How To Setup A Grafana Dashboard Step By Step - SQL4automation 21:00

Grafana Project Update & What’s New in v6.0 Mar 11, 2019 [40:31] Grafana Loki for Logs [11:40] In 2013 Grafana was re-written from AngularJs to React.

Setting up Prometheus and Grafana for monitoring your servers Jan 22, 2019 by Eddie Zaneski

How To Setup A Grafana Dashboard Step By Step Nov 5, 2019

Business Dashboards with Grafana and MySQL

Grafana at CERN by Borja Garrido Bear

What we Learned Integrating Grafana with Prometheus

Grafana Loki: Like Prometheus, But for logs by Tom Wilkie (@tom_wilkie), Grafana Labs CNCF [Cloud Native Computing Foundation]

Using Prometheus and Grafana for Monitoring my Power Usage Grafana

Using Postgres, Prometheus and Grafana for Storing, Analyzing and Visualizing Metrics by Erik Nordstrom from TimescaleDB

What we Learned Integrating Grafana with Prometheus Mar 1, 2018 by Dimitri Vanoverbeke from Percona

What Does Kubernetes Look Like? Performance Monitoring and Visualization with Grafana by Jacob Lisi

Automating Grafana Dashboards with Jsonnet Grafana

Weather, Power, and Market Forecasts with Grafana by Max Von Roden & Steffen Knott Mar 23, 2018

Workshop: Writing React Plugins by Terkel

Workshop: Grafana Plugin Showcase, Part 1 Workshop: Grafana Plugin Showcase, Part 2 Grafana

Workshop: Become a contributor - Get started developing Grafana Grafana

Social Media

As of Feb. 14, 2020:

References about Grafana

https://grafana.com/blog/2022/06/06/grafana-dashboards-a-complete-guide-to-all-the-different-types-you-can-build/

  • Free Grafana Complete course for beginners by I.T Security Labs

    https://thenewstack.io/why-you-want-easy-to-setup-grafana-dashboards/

    https://www.youtube.com/watch?v=Xj-TwAZtWHQ ELI5 - What I Learned Teaching Grafana to My Kids Grafana

    https://www.youtube.com/watch?v=4qpI4T6_bUw How To Setup A Grafana Dashboard Step By Step SQL4automation

https://www.youtube.com/watch?v=oPumWaoNw5s&list=RDLVoPumWaoNw5s&start_radio=1&rv=oPumWaoNw5s Playlist: Guide to Grafana 101: Getting Started With (Awesome) Visualizations by Grafana Dev Evangelist Avthar Sewrathan

https://www.youtube.com/watch?v=w-c3KYKQQfs Grafana Tutorial For Beginners | Continuous Monitoring With Grafana | DevOps Training by edureka!

https://www.youtube.com/watch?v=2kb_h6OVzlc&t=158s https://grafana.com/grafana/dashboards/12023-pfsense-system-dashboard/ to monitor pfSense that relies on influx and Telegraf, from https://github.com/VictorRobellini/pfSense-Dashboard


More on DevOps

This is one of a series on DevOps:

  1. DevOps_2.0
  2. ci-cd (Continuous Integration and Continuous Delivery)
  3. User Stories for DevOps
  4. Enterprise Software)

  5. Git and GitHub vs File Archival
  6. Git Commands and Statuses
  7. Git Commit, Tag, Push
  8. Git Utilities
  9. Data Security GitHub
  10. GitHub API
  11. TFS vs. GitHub

  12. Choices for DevOps Technologies
  13. Pulumi Infrastructure as Code (IaC)
  14. Java DevOps Workflow
  15. Okta for SSO & MFA

  16. AWS DevOps (CodeCommit, CodePipeline, CodeDeploy)
  17. AWS server deployment options
  18. AWS Load Balancers

  19. Cloud services comparisons (across vendors)
  20. Cloud regions (across vendors)
  21. AWS Virtual Private Cloud

  22. Azure Cloud Onramp (Subscriptions, Portal GUI, CLI)
  23. Azure Certifications
  24. Azure Cloud

  25. Azure Cloud Powershell
  26. Bash Windows using Microsoft’s WSL (Windows Subsystem for Linux)
  27. Azure KSQL (Kusto Query Language) for Azure Monitor, etc.

  28. Azure Networking
  29. Azure Storage
  30. Azure Compute
  31. Azure Monitoring

  32. Digital Ocean
  33. Cloud Foundry

  34. Packer automation to build Vagrant images
  35. Terraform multi-cloud provisioning automation
  36. Hashicorp Vault and Consul to generate and hold secrets

  37. Powershell Ecosystem
  38. Powershell on MacOS
  39. Powershell Desired System Configuration

  40. Jenkins Server Setup
  41. Jenkins Plug-ins
  42. Jenkins Freestyle jobs
  43. Jenkins2 Pipeline jobs using Groovy code in Jenkinsfile

  44. Docker (Glossary, Ecosystem, Certification)
  45. Make Makefile for Docker
  46. Docker Setup and run Bash shell script
  47. Bash coding
  48. Docker Setup
  49. Dockerize apps
  50. Docker Registry

  51. Maven on MacOSX

  52. Ansible
  53. Kubernetes Operators
  54. OPA (Open Policy Agent) in Rego language

  55. MySQL Setup

  56. Threat Modeling
  57. SonarQube & SonarSource static code scan

  58. API Management Microsoft
  59. API Management Amazon

  60. Scenarios for load
  61. Chaos Engineering