主頁 >  其他 > Grafana 系列-GaC-2-Grafana Terraform Provider 基礎

Grafana 系列-GaC-2-Grafana Terraform Provider 基礎

2023-06-20 08:53:14 其他

系列文章

  • Grafana 系列文章
  • Terraform 系列文章

概述

前文最后總結了我的工具選型:

  • Grafana Terraform provider
  • Jsonnet

我們今天先簡單介紹 Grafana Terraform provider.

Grafana Terraform Provider

Grafana provider 為 Grafana 提供配置管理資源,是目前 Grafana 官方提供的,覆寫的 Grafana 資源最全的 IaC 工具,

Grafana Terraform Provider 的代碼是建立在 grafana-api-golang-client 之上的,

通過 Grafana Terraform Provider, 我們可以管理:

  • Alerting
    • Resources
      • grafana_contact_point
      • grafana_message_template
      • grafana_mute_timing
      • grafana_notification_policy
      • grafana_rule_group
  • Cloud
    • Resources
      • grafana_cloud_access_policy
      • grafana_cloud_access_policy_token
      • grafana_cloud_api_key
      • grafana_cloud_plugin_installation
      • grafana_cloud_stack
      • grafana_cloud_stack_api_key
      • grafana_cloud_stack_service_account
      • grafana_cloud_stack_service_account_token
      • grafana_machine_learning_holiday
      • grafana_machine_learning_job
      • grafana_machine_learning_outlier_detector
    • DataSources
      • grafana_cloud_ips
      • grafana_cloud_organization
      • grafana_cloud_stack
  • Grafana Enterprise
    • Resources
      • grafana_builtin_role_assignment
      • grafana_data_source_permission (AWS Managed Grafana 也有這個功能)
      • grafana_report
      • grafana_role
      • grafana_role_assignment
      • grafana_team_external_group
  • Grafana OSS
    • Resources
      • grafana_annotation
      • grafana_api_key
      • grafana_dashboard
      • grafana_dashboard_permission
      • grafana_data_source
      • grafana_folder
      • grafana_folder_permission
      • grafana_library_panel
      • grafana_organization
      • grafana_organization_preferences
      • grafana_playlist
      • grafana_service_account
      • grafana_service_account_permission
      • grafana_service_account_token
      • grafana_team
      • grafana_team_preferences
      • grafana_user
    • DataSources
      • grafana_dashboard
      • grafana_dashboards
      • grafana_data_source
      • grafana_folder
      • grafana_folders
      • grafana_library_panel
      • grafana_organization
      • grafana_organization_preferences
      • grafana_team
      • grafana_user
      • grafana_users
  • OnCall
  • SLO
  • Synthetic Monitoring

實戰

因為 Grafana 資源相對比較清晰和獨立,不像 AWS 會有很多復雜的關聯關系,

所以關于 Grafana TF 代碼的組織形式可以簡單點:

  • 可以使 AllInOne 的 .tf 檔案
  • 也可以根據資源型別,簡單拆分為如下即可:
├── dashboard.tf
├── datasource.tf
├── grafana-ds-info.auto.tfvars.json
├── jsonnet (jsonnet 檔案夾,dashboard 相關內容都在該檔案夾下)
├── main.tf
├── outputs.tf
├── variables.tf
└── versions.tf

下面以第二種組織結構來詳細介紹,

創建 Grafana Provider

main.tf 中,創建 Grafana Provider:

provider "grafana" {
}

如果只有一套 Grafana, 那么如上的配置完全就夠用了,

如果有多套 Grafana, 則可以通過指定 Grafana provider 的 alias 來實作,具體如下:

provider "grafana" {
  alias = "aws-managed-grafana"
}

后續使用資源的時候,可以通過指定 provider 來區分,實體如下:

# provision folder
resource "grafana_folder" "play-grafana" {
  provider = grafana.aws-managed-grafana
  uid   = "play-grafana"
  title = "play-grafana"
}

??Notes:
后續為了演示代碼的簡潔,不展示多 Grafana provider 的情況,
Resource 里也不會有 provider 欄位,

Grafana 通過 Terraform 使用,是至少需要提供 url 和 apikey 2 類資訊的,這 2 類資訊可以直接通過環境變數的形式提供,具體如下:

export GRAFANA_URL=https://<your-grafana-domain>/
export GRAFANA_AUTH=<your-grafana-apikey>

GRAFANA_AUTH 的值可以是一個 Grafana API 密鑰,basic auth 就是 用戶名:密碼,或可以點擊這個鏈接申請 Grafana API 密鑰,

除此之外,Grafana Cloud/Synthetic Monitoring/Grafana Oncall 會有一些專用的 apikey 或 token, 這里就不詳細介紹了,

創建 Grafana 組織

??Notes:

因為我主要用的是 AWS Managed Grafana, 其只有一個默認的 org 1. 也沒有開放相關的創建多個 org 的組織,所以我基本上不會用到該資源,

如果有用到該資源,可以創建一個 org.tf, 具體內容是:

// 創建組織
resource "grafana_organization" "my_org" {
  name     = "my_org"
}

// 在組織內創建資源
provider "grafana" {
  alias  = "my_org"
  org_id = grafana_organization.my_org.org_id
}

resource "grafana_folder" "my_folder" {
  provider = grafana.my_org

  title = "Test Folder"
}

創建 DataSource

該資源所需的引數根據所選擇的資料源型別(通過 type 引數)而有所不同,

可以在 datasource.tf 下創建,

以下是創建:

  • stackdriver
  • influxdb
  • cloudwatch
  • zabbix
  • ES
  • Prometheus
  • Jaeger

的簡單示例,

Stackdriver

resource "grafana_data_source" "arbitrary-data" {
  type = "stackdriver"
  name = "sd-arbitrary-data"

  json_data_encoded = jsonencode({
    "tokenUri"           = "https://oauth2.googleapis.com/token"
    "authenticationType" = "jwt"
    "defaultProject"     = "default-project"
    "clientEmail"        = "[email protected]"
  })

  secure_json_data_encoded = jsonencode({
    "privateKey" = "-----BEGIN PRIVATE KEY-----\nprivate-key\n-----END PRIVATE KEY-----\n"
  })
}

Influxdb

resource "grafana_data_source" "influxdb" {
  type                = "influxdb"
  name                = "myapp-metrics"
  url                 = "http://influxdb.example.net:8086/"
  basic_auth_enabled  = true
  basic_auth_username = "username"
  database_name       = influxdb_database.metrics.name

  json_data_encoded = jsonencode({
    authType          = "default"
    basicAuthPassword = "mypassword"
  })
}

Cloudwatch

基于 AKSK 的創建:

resource "grafana_data_source" "cloudwatch" {
  type = "cloudwatch"
  name = "cw-example"

  json_data_encoded = jsonencode({
    defaultRegion = "us-east-1"
    authType      = "keys"
  })

  secure_json_data_encoded = jsonencode({
    accessKey = "123"
    secretKey = "456"
  })
}

這是基于 role (external) 的創建:

resource "grafana_data_source" "cloudwatch" {
  type = "cloudwatch"
  name = "example_cw"

  json_data_encoded = jsonencode({
    assumeRoleArn = "arn:aws:iam::<the-aws-id>:role/<...>"
    authType      = "ec2_iam_role"
    defaultRegion = "us-east-1"
    externalId = "<the-aws-id>"
  })
}

Zabbix

resource "grafana_data_source" "zabbix" {
  type = "alexanderzobnin-zabbix-datasource"
  name = "Zabbix-example"
  url  = "http://<zabbix-domain>/api_jsonrpc.php"

  json_data_encoded = jsonencode({
    trends   = true
    username = "Admin"
  })

  secure_json_data_encoded = jsonencode({
    password = "Password"
  })
}

?? 注意:

Zabbix 的 type 是 alexanderzobnin-zabbix-datasource
使用的前提是安裝 Zabbix Grafana 插件.

Jaeger

resource "grafana_data_source" "jaeger-example" {
  type = "jaeger"
  name = "example_jaeger"
  uid  = "example_jaeger"
  url  = "http://<jaeger-domain>/trace/"

  json_data_encoded = jsonencode({
    "nodeGraph" : {
      "enabled" : true
    }
  })
}

data "grafana_data_source" "jaeger-example" {
  name = grafana_data_source.jaeger-example.name
  uid  = grafana_data_source.jaeger-example.uid
}

??上面的 data "grafana_data_source" "jaeger-example" 是將 Jaeger Datasource 的 uid 提供給 ES 使用,

當然,如果你直接在創建 Jaeger Datasource 的時候指定了 uid, 如下所示,那么后面在被其他 Datasource 參考時可以直接指定寫死,

uid  = "example_jaeger"

ES

resource "grafana_data_source" "elasticsearch-example" {
  type          = "elasticsearch"
  name          = "es_example"
  uid           = "es_example"
  url           = "http://<es_host>:9200"
  // 就是 es index
  database_name = "[example.*-]YYYY.MM.DD"

  json_data_encoded = jsonencode({
    esVersion = "6.0.0"

    interval = "Daily"
    includeFrozen              = false
    maxConcurrentShardRequests = 256
    timeField                  = "@timestamp"

    logLevelField   = "level"
    logMessageField = "_source"
    dataLinks = [
      {
        datasourceUid = data.grafana_data_source.jaeger-example.uid
        // 或 datasourceUid = "example_jaeger"
        field         = "trace_id",
        url           = "${"$"}{__value.raw}"
      }
    ]
  })
}

這里,有以下幾個需要注意的地方:

  • database_name = "[example.*-]YYYY.MM.DD" 在 type 為 es 的情況下,database_name 就是 es 的索引名稱
  • dataLinks 這里通過 data link 鏈接到 Jagger Datasource: datasourceUid = data.grafana_data_source.jaeger-example.uid (Jaeger Datasource 就是上一節創建的)
  • url = "${"$"}{__value.raw}" 這里要特別注意,實際上傳給 Grafana 的是:${__value.raw}, 但是這個恰好也是 Terraform 的模板/變數替換語法,所以如果直接這樣寫會將其決議為模板/變數,從而出現該變數不存在的報錯,通過${"$"} 轉義為 $ + {__value.raw} 拼成正確的 ${__value.raw} 傳給 Grafana.

Prometheus

基礎配置如下:

resource "grafana_data_source" "prometheus" {
  type = "prometheus"
  name = "example_prom"
  uid  = "example_prom"
  url  = "http://my-instances.com"

  json_data_encoded = jsonencode({
    httpMethod = "POST"
  })
}

官方提供的 Prometheus 兼容實作 - Mimir 的配置如下:

resource "grafana_data_source" "prometheus" {
  type                = "prometheus"
  name                = "mimir"
  url                 = "https://my-instances.com"
  basic_auth_enabled  = true
  basic_auth_username = "username"

  json_data_encoded = jsonencode({
    httpMethod        = "POST"
    prometheusType    = "Mimir"
    prometheusVersion = "2.4.0"
  })

  secure_json_data_encoded = jsonencode({
    basicAuthPassword = "password"
  })
}

創建 Dashboard

dashboard.tf 中,創建 dashboard 示例如下:

resource "grafana_dashboard" "metrics" {
  config_json = file("grafana-dashboard.json")
}

也可以通過如下方式創建:

resource "grafana_dashboard" "metrics" {
  config_json = jsonencode({
    title   = "as-code dashboard"
    uid     = "ascode"
  })
}

??注意:

config_json 是 String 型別,具體是完整的 Dashboard model JSON,

可以直接通過 file("grafana-dashboard.json") 獲取,

如第二個實體,jsonencode 的作用就是使用 JSON 語法將一個 Object 轉換為 String.

總結

好了,本次我們介紹了 Grafana Terraform Provider 的基礎知識,還是比較簡單的,我們使用其:

  • 創建 Provider
  • 創建組織
  • 創建檔案夾
  • 創建各類常見的 Datasources
  • 創建 Dashboard

非常直白清晰,希望對各位有所幫助,

???參考檔案

  • Docs overview | grafana/grafana | Terraform Registry
  • grafana_folder | Resources | grafana/grafana | Terraform Registry
  • grafana_data_source | Resources | grafana/grafana | Terraform Registry
  • grafana_dashboard | Resources | grafana/grafana | Terraform Registry
  • jsonencode - Functions - Configuration Language | Terraform | HashiCorp Developer
  • Strings and Templates - Configuration Language | Terraform | HashiCorp Developer

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555586.html

標籤:其他

上一篇:詳解4種模型壓縮技術、模型蒸餾演算法

下一篇:返回列表

標籤雲
其他(161307) Python(38242) JavaScript(25505) Java(18249) C(15237) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7258) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4603) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1968) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • Grafana 系列-GaC-2-Grafana Terraform Provider 基礎

    ## 系列文章 * [Grafana 系列文章](https://ewhisper.cn/tags/Grafana/) * [Terraform 系列文章](https://ewhisper.cn/tags/Terraform/) ## 概述 [前文](https://ewhisper.cn/pos ......

    uj5u.com 2023-06-20 08:53:14 more
  • 詳解4種模型壓縮技術、模型蒸餾演算法

    摘要:本文主要為大家講解關于深度學習中幾種模型壓縮技術、模型蒸餾演算法:Patient-KD、DistilBERT、DynaBERT、TinyBERT。 本文分享自華為云社區《深度學習實踐篇[17]:模型壓縮技術、模型蒸餾演算法:Patient-KD、DistilBERT、DynaBERT、TinyBE ......

    uj5u.com 2023-06-20 08:52:34 more
  • Gamma:強大的AI制作PPT神器,用完再也回不去了!

    看過許多 AI 制作 PPT 軟體,最侄訓是被 Gamma 驚艷到。 Gamma 是一款基于人工智能技術的 PPT 制作工具,可以幫助用戶輕松制作高質量的 PPT 演示文稿。 # 痛點解決 相比傳統制作 PPT 方式,Gamma 可以解決哪些如下 7 個痛點: ## 一句話生成 PPT 傳統制作 P ......

    uj5u.com 2023-06-20 08:51:09 more
  • 好用網址分享-77ai導航與77搜索導航

    AI(人工智能)技術正在改變我們的生活方式和作業方式,越來越多的人開始關注和使用AI相關的網站和應用程式。在這篇文章中,我將為大家介紹一些常用的AI網址導航,幫助您更好地了解和使用AI技術。 **AI Hub** AI Hub是由Google Cloud推出的一個開放平臺,旨在幫助企業和開發者快速構 ......

    uj5u.com 2023-06-20 08:50:42 more
  • 冠軍!天翼云在國際AI頂會大模型挑戰賽中拔得頭籌!

    6月7日,國際人工智能頂會CVPR 2023舉辦的第一屆大模型挑戰賽(CVPR 2023 Workshop on Foundation Model:1st foundation model challenge)落下帷幕,本次比賽吸引了來自全球著-名高校和知名企業的1024名參賽者。經過為期2個月的激... ......

    uj5u.com 2023-06-20 08:50:35 more
  • ModelBox實戰開發:RK3568實作攝像頭虛擬背景

    摘要:本文將使用ModelBox端云協同AI開發套件(RK3568)實作攝像頭虛擬背景AI應用的開發。 本文分享自華為云社區《ModelBox開發案例 - RK3568實作攝像頭虛擬背景【玩轉華為云】》,作者:AI練習生 。 本文將使用ModelBox端云協同AI開發套件(RK3568)實作攝像頭虛 ......

    uj5u.com 2023-06-20 08:49:52 more
  • 詳解4種模型壓縮技術、模型蒸餾演算法

    摘要:本文主要為大家講解關于深度學習中幾種模型壓縮技術、模型蒸餾演算法:Patient-KD、DistilBERT、DynaBERT、TinyBERT。 本文分享自華為云社區《深度學習實踐篇[17]:模型壓縮技術、模型蒸餾演算法:Patient-KD、DistilBERT、DynaBERT、TinyBE ......

    uj5u.com 2023-06-20 08:48:27 more
  • 自然語言處理 Paddle NLP - 快遞單資訊抽取 (ERNIE 1.0)

    檔案檢索:需要把業務問題拆解成子任務。文本分類 -> 文本匹配 -> 等任務 -> Panddle API 完成子任務 -> 子任務再拼起來 ## 介紹 在2017年之前,工業界和學術界對文本處理依賴于序列模型[Recurrent Neural Network (RNN)](https://baik ......

    uj5u.com 2023-06-20 08:46:25 more
  • Liunx nginx服務

    目錄 一、nginx概念 二、nginx特點 三、nginx應用場景 四、nginx和apache 五、阻塞和非阻塞 六、同步和異步 七、編譯安裝nginx 八、升級nginx 九、總結 一、nginx概念 1.nginx概念 Nginx ("engine x") 是一個高性能的 HTTP 和反向代 ......

    uj5u.com 2023-06-20 08:45:46 more
  • 云原生周刊:Dapr v1.11 發布

    ## 開源專案推薦 ### [Kamaji](https://github.com/clastix/kamaji) Kamaji 可以大規模地部署和運行 Kubernetes 控制平面,而只需承擔一小部分操作負擔。Kamaji 的特別之處在于,控制平面組件是在一個單一的 pod 中運行,而不是在專用 ......

    uj5u.com 2023-06-20 08:45:25 more