Grafana
概要
OSS の可視化分析ツール
https://grafana.com/docs/grafana/latest/getting-started/
Dashboard
概要
Dashboard は、複数の Panel から構成される。
https://grafana.com/grafana/dashboards
Plugin
https://grafana.com/grafana/plugins
Panel
概要
https://grafana.com/docs/grafana/latest/panels/
Data sources
概要
Data sources とは、時系列データの取得元となるストレージバックエンドを指す。Data source は各々扱うクエリ言語や機能が異なり、専用の Query Editor を備えている。また、設定可能な項目 (例えば、ストレージバックエンドの エンドポイントや、利用のためのユーザ名/パスワード等) も、Data source 毎に異なる。単一の Dasboard に異なる Data source のデータを反映することができるが、各 Panel は単一の Data source にのみにしか紐づけられない。
https://grafana.com/docs/grafana/latest/datasources/
Annotation
https://grafana.com/docs/grafana/latest/dashboards/annotations/
Playlist
https://grafana.com/docs/grafana/latest/dashboards/playlist/
Alert
https://grafana.com/docs/grafana/latest/alerting/
Configuration
https://grafana.com/docs/grafana/latest/administration/configuration/
設定ファイル
OS によって、設定ファイルの配置場所や編集の仕方が異なるようなので注意する。
Docker の場合は、設定ファイルよりは環境変数で設定を行うのが推奨されている
https://grafana.com/docs/grafana/latest/administration/configure-docker/
環境変数
設定ファイルで設定可能な項目は、全て環境変数で設定可能。
GF_<SectionName>_<KeyName> で設定できる
. や - は _ に置き換える
Variable expansion
設定値を特定の provider から読み込ませるように設定する、ということが可能になっている。provider としては、env, file, valuet がサポートされていて、各々環境変数, ファイルシステム上のファイル, Hashicorp Vault からの読み込みを指す。
利用方法としては、$__<provider>{<argument>} や ${<environment variable>} のようなフォーマットの値を設定値としてセットする。すると、Grafana は直接その値を設定値として採用せずに、指定された provider から値を読み込むようになる。
例えば、以下は password に file provider から値を読み込むように設定した例。この場合、パスワードの値は /etc/secrets/gf_sql_password から読み込まれる。
code:custom.ini
database
password = $__file{/etc/secrets/gf_sql_password}
Docker Secrets
Docker Secrets は、Docker に秘匿情報を secrets として登録しておき、Docker コンテナ起動時にコンテナ内の /run/secrets/<名前> にその値を展開してくれる、という仕組み。Grafana は Docker Secrets からの設定値の読み取りをサポートしていて、GF_<SectionName>_<KeyName>__FILE のように末尾に __FILE を指定することで実現できる。
https://grafana.com/docs/grafana/latest/administration/configure-docker/
設定可能な値
下記に列挙されている。
https://grafana.com/docs/grafana/latest/administration/configuration/#app_mode
Provisioning
datasource, dashboard, plugin, alert などを、yaml/json で provisioning できるらしい。ただ、dashbord の変更を自動で yaml に反映させる、みたいなことはできないようだ。
https://grafana.com/docs/grafana/latest/administration/provisioning/
パネル設定から利用できる変数
https://grafana.com/docs/grafana/latest/panels/standard-options/
Architecture
概要
Grafana のアーキテクチャは、大きく Frontend と Backend に別れる。Frontend は TypeScript、Backend は Go で書かれている。
https://github.com/grafana/grafana/tree/main/contribute/architecture
Frontend
Backend
Services
アプリケーションロジックは Service としてカプセル化される
Grafana の起動から終了まで動作し続けるような Service は Background Service と呼ばれる
Service が特定の I/F を実装している必要がある
特定条件下でのみ Service を停止させたい場合にはまた別の I/F を実装する
Communication
Grafana はアプリケーション間の通信に bus を利用しており、bus 上の全ての通信は同期的に実行される
メッセージには events, commands, queries の 3 種類がある
Events: 過去に起こった事象に対する通知。すでに起こっているので変更はできないが、別のアクションをトリガーさせることはできる
Commands: 実行したいアクションに対する要求。events とは異なり失敗させることができる
Queries: 結果を返すような Command?
Database
データの永続化のため、デフォルトで SQLite3 データベースファイルを作成する
SQLStore ハンドラを利用する
Backend コードは下記にある
https://github.com/grafana/grafana/tree/main/pkg
Data sources のコードは /pkg/tsdb 配下