Grafana
Grafana is open source visualization and analytics software. It allows you to query, visualize, alert on, and explore your metrics no matter where they are stored. In plain English, it provides you with tools to turn your time-series database (TSDB) data into beautiful graphs and visualizations.
Grafana Resources
Dashboards: is a set of one or more panels organized and arranged into one or more rows. Grafana ships with a variety of Panels. Each panel can interact with data from any configured Grafana Data Source. A Grafana dashboard provides a way of displaying metrics and log data in the form of visualizations and reporting dashboards.
Folders: are a way to organize and group dashboards - very useful if you have a lot of dashboards or multiple teams using the same Grafana instance.
Grafana Users
Users are named accounts in Grafana with granted permissions to access resources throughout Grafana.
Organizations are groups of users on a server. Users can belong to one or more organizations, but each user must belong to at least one organization. Data sources, plugins, and dashboards are associated with organizations. Members of organizations have permissions based on their role in the organization.
Teams are groups of users within the same organization. Teams allow you to grant permissions for a group of users.
Access Flow
Grafana itself manages its user access at both folder level and dashboard level, while Guardian lets each individual user have access directly at the dashboard level.
- Access is based on the role a user has on a resource.
 - Roles can be either of the three: viewer, editor or admin.
 - Roles are inherited from the parent folders to a dashboard.
 - Although we can assign a different but higher role at the dashboard level.
 
Authentication
Guardian requires host, username and password of an administrator user in Grafana.
Example provider config for grafana:
. . .
credentials:
  host: http://localhost:3000
  user: admin@localhost
  password: password
Configuration
type: grafana
urn: 1
labels:
  entity: xyz
  landscape: abc
credentials:
  host: http://localhost:4000
  username: admin@localhost
  password: password
appeal:
  allow_permanent_access: true
  allow_active_access_extension_in: "7d"
resources:
  - type: dashboard
    policy:
      id: policy_x
      version: 1
    roles:
      - id: viewer
        name: Viewer
        permissions:
          - view
      - id: editor
        name: Editor
        permissions:
          - edit
      - id: admin
        name: Admin
        permissions:
          - admin
credentials
| Fields | Type | Description | Required | 
|---|---|---|---|
host | string | Grafana instance host.  Example: http://localhost:3000 | Yes | 
username | email | Email address of an account that has Administration permission. | Yes | 
password | string | Account's password. | Yes | 
GrafanaResourceType
foldersdashboards- Direct dashboard level access via Guardian.
GrafanaResourcePermission
| Type | Details | Required | 
|---|---|---|
string | role_id enum : [viewer, editor or admin]role_name enum [ Viewer, Editor or Admin] role_permissions enum [ view, edit or admin ] | Yes | 
Grafana Access Creation
Guardian looks for the resource we want to grant access to and append new permissions to the existing ones. In case, the resource does not exist it returns errors.