GithubHelp home page GithubHelp logo

isabella232 / athena-datasource Goto Github PK

View Code? Open in Web Editor NEW

This project forked from grafana/athena-datasource

0.0 0.0 0.0 1.92 MB

License: Apache License 2.0

JavaScript 0.72% Go 60.66% TypeScript 38.62%

athena-datasource's Introduction

Athena data source for Grafana

The Athena data source plugin allows you to query and visualize Athena data metrics from within Grafana.

This topic explains options, variables, querying, and other options specific to this data source. Refer to Add a data source for instructions on how to add a data source to Grafana.

Configure the data source in Grafana

To access data source settings:

  1. Hover your mouse over the Configuration (gear) icon.
  2. Click Data sources, and then click the AWS Athena data source.
Name Description
Name The data source name. This is how you refer to the data source in panels and queries.
Default Default data source means that it will be pre-selected for new panels.
Auth Provider Specify the provider to get credentials.
Access Key ID If Access & secret key is selected, specify the Access Key of the security credentials to use.
Secret Access Key If Access & secret key is selected, specify the Secret Key of the security credentials to use.
Credentials Profile Name Specify the name of the profile to use (if you use ~/.aws/credentials file), leave blank for default.
Assume Role Arn (optional) Specify the ARN of the role to assume.
External ID (optional) If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.
Endpoint (optional) Optionally, specify a custom endpoint for the service.
Default Region Region in which the cluster is deployed.
Catalog (datasource) Athena catalog. The list of catalogs will be retrieved automatically
Database Name of the database within the catalog.
Workgroup Workgroup to use.
Ouput Location AWS S3 bucket to store execution outputs. If not specified, the default query result location from the Workgroup configuration will be used.

Authentication

For authentication options and configuration details, see AWS authentication topic.

IAM policies

Grafana needs permissions granted via IAM to be able to read Athena metrics. You can attach these permissions to IAM roles and utilize Grafana's built-in support for assuming roles. Note that you will need to configure the required policy before adding the data source to Grafana.

Depending on the source of the data you'd query with Athena, you may need different permissions. AWS provides some predefined policies that you can check here.

This is an example of a minimal policy you can use to query Athena. It is based on the AmazonAthenaFullAccess policy, without write permissions when possible, since Grafana should be used as read-only:

NOTE: Update the ARN of the S3 bucket if you are using a custom one.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AthenaQueryAccess",
      "Effect": "Allow",
      "Action": [
        "athena:ListDatabases",
        "athena:ListDataCatalogs",
        "athena:ListWorkGroups",
        "athena:GetDatabase",
        "athena:GetDataCatalog",
        "athena:GetQueryExecution",
        "athena:GetQueryResults",
        "athena:GetTableMetadata",
        "athena:GetWorkGroup",
        "athena:ListTableMetadata",
        "athena:StartQueryExecution",
        "athena:StopQueryExecution"
      ],
      "Resource": ["*"]
    },
    {
      "Sid": "GlueReadAccess",
      "Effect": "Allow",
      "Action": [
        "glue:GetDatabase",
        "glue:GetDatabases",
        "glue:GetTable",
        "glue:GetTables",
        "glue:GetPartition",
        "glue:GetPartitions",
        "glue:BatchGetPartition"
      ],
      "Resource": ["*"]
    },
    {
      "Sid": "AthenaS3Access",
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload",
        "s3:PutObject"
      ],
      "Resource": ["arn:aws:s3:::aws-athena-query-results-*"]
    },
    {
      "Sid": "AthenaExamplesS3Access",
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:ListBucket"],
      "Resource": ["arn:aws:s3:::athena-examples*"]
    }
  ]
}

Query Athena data

The provided query editor is a standard SQL query editor. Grafana includes some macros to help with writing more complex timeseries queries.

Macros

Macro Description Example Output example
$__dateFilter(column) $__dateFilter creates a conditional that filters the data (using column) based on the date range of the panel. $__dateFilter(my_date) my_date BETWEEN date '2017-07-18' AND date '2017-07-18'
$__parseTime(column,format) $__parseTime cast a varchar as a timestamp with the given format. $__parseTime(eventtime, 'yyyy-MM-dd''T''HH:mm:ss''Z') parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss''Z')
$__timeFilter(column,format) $__timeFilter creates a conditional that filters the data (using column) based on the time range of the panel. The second argument is used to optionally parse the column from a varchar to a timestamp with a specific format. Keep in mind that this macro uses Presto's Java Date Functions parse_datetime(string, format) when a custom format is passed as format argument. 1. Without specifying a format: $__timeFilter(time)

2. Using the default format: $__timeFilter(time, 'yyyy-MM-dd HH:mm:ss')

3. With another custom format: $__timeFilter(time, 'yyyy-MM-dd''T''HH:mm:ss''+0000')
1. Without specifying a format: time BETWEEN TIMESTAMP '2017-07-18 11:15:52' AND TIMESTAMP '2017-07-18 11:25:52'

2. Using the default format: TIMESTAMP time BETWEEN TIMESTAMP '2017-07-18T11:15:52Z' AND TIMESTAMP '2017-07-18T11:15:52Z'

3. With another custom format: parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss''+0000') BETWEEN TIMESTAMP '2017-07-18 11:15:52' AND TIMESTAMP '2017-07-18 11:25:52'
$__timeFrom() $__timeFrom outputs the current starting time of the range of the panel with quotes. $__timeFrom() TIMESTAMP '2017-07-18 11:15:52'
$__rawtimeFrom() $__rawTimeFrom outputs the current starting time of the range of the panel formatted as a string. An optional argument is used to specify the output format of the string using Joda's DateTime format. 1. Without specifying a format: $__rawTimeFrom()

2. Using the default format: $__rawTimeFrom('yyyy-MM-dd HH:mm:ss')

3. With a custom format: $__rawTimeFrom('yyyy/MM/dd/HH)
1. Without specifying a format: '2022-03-24 21:19:03'

2. Using the default format: '2022-03-24 21:19:03'

3. With another custom format: '2022/03/24/21'
$__timeTo() $__timeTo outputs the current ending time of the range of the panel with quotes. $__timeTo() TIMESTAMP '2017-07-18 11:15:52'
$__rawTimeTo() $__rawTimeTo outputs the current ending time of the range of the panel formatted as a string. An optional argument is used to specify the output format of the string using Joda's DateTime format. 1. Without specifying a format: $__rawTimeTo()

2. Using the default format: $__rawTimeTo('yyyy-MM-dd HH:mm:ss')

3. With a custom format: $__rawTimeTo('yyyy/MM/dd/HH)
1. Without specifying a format: '2022-03-24 21:19:03'

2. Using the default format: '2022-03-24 21:19:03'

3. With another custom format: '2022/03/24/21'
$__timeGroup(column, '1m', format) $__timeGroup groups timestamps so that there is only 1 point for every period on the graph. The third argument is used to optionally parse the column from a varchar to a timestamp with a specific format. $__timeGroup(time,'5m','yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') FROM_UNIXTIME(FLOOR(TO_UNIXTIME(parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z'))/300)*300)
$__unixEpochFilter(column) $__unixEpochFilter achieves the same than $__timeFilter but when the time is a UNIX timestamp. $__unixEpochFilter(time) time BETWEEN 1637228322 AND 1637232700
$__unixEpochGroup(column, '1m') $__unixEpochGroup achieves the same than $__timeGroup but when the time is a UNIX timestamp. $__unixEpochGroup(time, '5m') FROM_UNIXTIME(FLOOR(time/300)*300)
$__table $__table returns the table selected in the Table selector $__table my_table
$__column $__column returns the column selected in the Column selector (it requires a table) $__column col1

Table Visualization

Most queries in Athena will be best represented by a table visualization. Any query will display data in a table. Any query that returns results will display data in a table..

This example returns results for a table visualization:

SELECT {column_1}, {column_2} FROM {table};

Timeseries and Graph visualizations

Time series ad graph visualizations, you must:

  • Select a column with a date or datetime type. The date column must be in ascending order (using ORDER BY column ASC).
  • Also select a numeric column.

Inspecting the query

Grafana supports macros that Athena does not, which means a query might not work when copied and pasted directly into Athena. To view the full interpolated query, which works directly in Athena, click the Query Inspector button. The full query is displayed under the Query tab.

Templates and variables

To add a new Athena query variable, refer to Add a query variable.

Any value queried from an Athena table can be used as a variable.

After creating a variable, you can use it in your Athena queries by using Variable syntax. For more information about variables, refer to Templates and variables.

Annotations

Annotations allow you to overlay rich event information on top of graphs. You can add annotations by clicking on panels or by adding annotation queries via the Dashboard menu / Annotations view.

Example query to automatically add annotations:

SELECT
  time as time,
  environment as tags,
  humidity as text
FROM
  tableName
WHERE
  $__dateFilter(time) and humidity > 95

The following table represents the values of the columns taken into account to render annotations:

Name Description
time The name of the date/time field. Could be a column with a native SQL date/time data type or epoch value.
timeend Optional name of the end date/time field. Could be a column with a native SQL date/time data type or epoch value. (Grafana v6.6+)
text Event description field.
tags Optional field name to use for event tags as a comma separated string.

Provision Athena data source

You can configure the Athena data source using configuration files with Grafana's provisioning system or using Grafana's Datasource JSON API . For more information, refer to the provisioning docs page.

Here are some provisioning examples.

Using AWS SDK (default)

apiVersion: 1
datasources:
  - name: Athena
    type: grafana-athena-datasource
    jsonData:
      authType: default
      defaultRegion: eu-west-2
      catalog: AwsDataCatalog
      database: '<your athena database>'
      workgroup: '<your athena workgroup>'

Using credentials' profile name (non-default)

apiVersion: 1

datasources:
  - name: Athena
    type: grafana-athena-datasource
    jsonData:
      authType: credentials
      defaultRegion: eu-west-2
      profile: secondary
      catalog: AwsDataCatalog
      database: '<your athena database>'
      workgroup: '<your athena workgroup>'

Using accessKey and secretKey

apiVersion: 1

datasources:
  - name: Athena
    type: grafana-athena-datasource
    jsonData:
      authType: keys
      defaultRegion: eu-west-2
    secureJsonData:
      accessKey: '<your access key>'
      secretKey: '<your secret key>'
      catalog: AwsDataCatalog
      database: '<your athena database>'
      workgroup: '<your athena workgroup>'

Using AWS SDK Default and ARN of IAM Role to Assume

apiVersion: 1
datasources:
  - name: Athena
    type: grafana-athena-datasource
    jsonData:
      authType: default
      assumeRoleArn: arn:aws:iam::123456789012:root
      defaultRegion: eu-west-2
      catalog: AwsDataCatalog
      database: '<your athena database>'
      workgroup: '<your athena workgroup>'

There are also some optional parameters to configure this datasource:

jsonData:
  endpoint: https://'{service}.{region}.amazonaws.com'
  externalId: '<your role external id>'
  outputLocation: s3://'<your s3 bucket>'

Acknowledgment

The backend driver is based on the implementation of uber/athenadriver, which provides a fully-featured driver for AWS Athena.

Get the most out of the plugin

athena-datasource's People

Contributors

andresmgot avatar sarahzinger avatar vickyyyyyyy avatar fridgepoet avatar jfagoagas avatar tolzhabayev avatar yaellec avatar sunker avatar kevinwcyu avatar iconara avatar osg-grafana avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.