2023-09-26 17:15:15 -04:00
|
|
|
# Grafana Kubernetes compatible API Server
|
|
|
|
|
|
|
|
|
|
## Basic Setup
|
|
|
|
|
|
|
|
|
|
```ini
|
|
|
|
|
[feature_toggles]
|
2023-10-05 15:00:36 -04:00
|
|
|
kubernetesPlaylists = true
|
2023-09-26 17:15:15 -04:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Start Grafana:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
make run
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Enable dual write to `etcd`
|
|
|
|
|
|
|
|
|
|
Start `etcd`:
|
|
|
|
|
```bash
|
|
|
|
|
make devenv sources=etcd
|
|
|
|
|
```
|
|
|
|
|
|
2023-10-27 16:39:27 -04:00
|
|
|
Set storage type and etcd server address in `custom.ini`:
|
2023-09-26 17:15:15 -04:00
|
|
|
|
|
|
|
|
```ini
|
|
|
|
|
[grafana-apiserver]
|
2023-10-27 16:39:27 -04:00
|
|
|
storage_type = etcd
|
2023-09-26 17:15:15 -04:00
|
|
|
etcd_servers = 127.0.0.1:2379
|
|
|
|
|
```
|
|
|
|
|
|
2023-10-27 16:39:27 -04:00
|
|
|
## Enable dual write to JSON files:
|
|
|
|
|
|
|
|
|
|
Set storage type:
|
|
|
|
|
|
|
|
|
|
```ini
|
|
|
|
|
[grafana-apiserver]
|
|
|
|
|
storage_type = file
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Objects will be written to disk under the `{data.path}/grafana-apiserver/` directory.
|
|
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
data/grafana-apiserver
|
|
|
|
|
├── grafana.kubeconfig
|
|
|
|
|
└── playlist.grafana.app
|
|
|
|
|
└── playlists
|
|
|
|
|
└── default
|
|
|
|
|
└── hi.json
|
|
|
|
|
```
|
|
|
|
|
|
2024-02-12 15:59:35 -05:00
|
|
|
## Enable aggregation
|
|
|
|
|
|
|
|
|
|
See [aggregator/README.md](./aggregator/README.md) for more information.
|
|
|
|
|
|
2023-09-26 17:15:15 -04:00
|
|
|
### `kubectl` access
|
|
|
|
|
|
Storage: Unified Storage based on Entity API (#71977)
* first round of entityapi updates
- quote column names and clean up insert/update queries
- replace grn with guid
- streamline table structure
fixes
streamline entity history
move EntitySummary into proto
remove EntitySummary
add guid to json
fix tests
change DB_Uuid to DB_NVarchar
fix folder test
convert interface to any
more cleanup
start entity store under grafana-apiserver dskit target
CRUD working, kind of
rough cut of wiring entity api to kube-apiserver
fake grafana user in context
add key to entity
list working
revert unnecessary changes
move entity storage files to their own package, clean up
use accessor to read/write grafana annotations
implement separate Create and Update functions
* go mod tidy
* switch from Kind to resource
* basic grpc storage server
* basic support for grpc entity store
* don't connect to database unless it's needed, pass user identity over grpc
* support getting user from k8s context, fix some mysql issues
* assign owner to snowflake dependency
* switch from ulid to uuid for guids
* cleanup, rename Search to List
* remove entityListResult
* EntityAPI: remove extra user abstraction (#79033)
* remove extra user abstraction
* add test stub (but
* move grpc context setup into client wrapper, fix lint issue
* remove unused constants
* remove custom json stuff
* basic list filtering, add todo
* change target to storage-server, allow entityStore flag in prod mode
* fix issue with Update
* EntityAPI: make test work, need to resolve expected differences (#79123)
* make test work, need to resolve expected differences
* remove the fields not supported by legacy
* sanitize out the bits legacy does not support
* sanitize out the bits legacy does not support
---------
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
* update feature toggle generated files
* remove unused http headers
* update feature flag strategy
* devmode
* update readme
* spelling
* readme
---------
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2023-12-06 21:21:21 +01:00
|
|
|
For kubectl to work, grafana needs to run over https. To simplify development, you can use:
|
|
|
|
|
|
|
|
|
|
```ini
|
|
|
|
|
app_mode = development
|
|
|
|
|
|
|
|
|
|
[feature_toggles]
|
|
|
|
|
grafanaAPIServerEnsureKubectlAccess = true
|
|
|
|
|
kubernetesPlaylists = true
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This will create a development kubeconfig and start a parallel ssl listener. It can be registered by
|
|
|
|
|
navigating to the root grafana folder, then running:
|
2023-09-26 17:15:15 -04:00
|
|
|
```bash
|
2023-10-23 14:42:10 -04:00
|
|
|
export KUBECONFIG=$PWD/data/grafana-apiserver/grafana.kubeconfig
|
2023-09-26 17:15:15 -04:00
|
|
|
kubectl api-resources
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Grafana API Access
|
|
|
|
|
|
2023-10-04 14:05:50 -04:00
|
|
|
The Kubernetes compatible API can be accessed using existing Grafana AuthN at: [http://localhost:3000/apis](http://localhost:3000/apis).
|
Storage: Unified Storage based on Entity API (#71977)
* first round of entityapi updates
- quote column names and clean up insert/update queries
- replace grn with guid
- streamline table structure
fixes
streamline entity history
move EntitySummary into proto
remove EntitySummary
add guid to json
fix tests
change DB_Uuid to DB_NVarchar
fix folder test
convert interface to any
more cleanup
start entity store under grafana-apiserver dskit target
CRUD working, kind of
rough cut of wiring entity api to kube-apiserver
fake grafana user in context
add key to entity
list working
revert unnecessary changes
move entity storage files to their own package, clean up
use accessor to read/write grafana annotations
implement separate Create and Update functions
* go mod tidy
* switch from Kind to resource
* basic grpc storage server
* basic support for grpc entity store
* don't connect to database unless it's needed, pass user identity over grpc
* support getting user from k8s context, fix some mysql issues
* assign owner to snowflake dependency
* switch from ulid to uuid for guids
* cleanup, rename Search to List
* remove entityListResult
* EntityAPI: remove extra user abstraction (#79033)
* remove extra user abstraction
* add test stub (but
* move grpc context setup into client wrapper, fix lint issue
* remove unused constants
* remove custom json stuff
* basic list filtering, add todo
* change target to storage-server, allow entityStore flag in prod mode
* fix issue with Update
* EntityAPI: make test work, need to resolve expected differences (#79123)
* make test work, need to resolve expected differences
* remove the fields not supported by legacy
* sanitize out the bits legacy does not support
* sanitize out the bits legacy does not support
---------
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
* update feature toggle generated files
* remove unused http headers
* update feature flag strategy
* devmode
* update readme
* spelling
* readme
---------
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
2023-12-06 21:21:21 +01:00
|
|
|
|
|
|
|
|
The equivalent openapi docs can be seen in [http://localhost:3000/swagger](http://localhost:3000/swagger),
|
|
|
|
|
select the relevant API from the dropdown in the upper right.
|