-
Notifications
You must be signed in to change notification settings - Fork 3k
Allow for custom Grafana dashboards #49151
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
🙈 The PR is closed and the preview is expired. |
I love this idea. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I got a bunch of logs like this:
...
2025-08-25 16:25:27,762 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=sql-resource-server t=2025-08-25T15:25:27.761942351Z level=info msg="Using channel notifier"
2025-08-25 16:25:27,766 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.store t=2025-08-25T15:25:27.765968376Z level=info msg="Loading plugins..."
2025-08-25 16:25:27,766 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.sources t=2025-08-25T15:25:27.765990119Z level=error msg="Failed to load external plugins" error="failed to open plugins path"
2025-08-25 16:25:27,821 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.store t=2025-08-25T15:25:27.82118593Z level=info msg="Plugins loaded" count=55 duration=55.218022ms
2025-08-25 16:25:27,827 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=query_data t=2025-08-25T15:25:27.82676977Z level=info msg="Query Service initialization"
2025-08-25 16:25:27,831 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=live.push_http t=2025-08-25T15:25:27.831246895Z level=info msg="Live Push Gateway initialization"
2025-08-25 16:25:27,835 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=ngalert.notifier.alertmanager org=1 t=2025-08-25T15:25:27.834925379Z level=info msg="Applying new configuration to Alertmanager" configHash=d2c56faca6af2a5772ff4253222f7386
2025-08-25 16:25:27,841 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=ngalert t=2025-08-25T15:25:27.841439993Z level=info msg="Using simple database alert instance store"
2025-08-25 16:25:27,841 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=ngalert.state.manager.persist t=2025-08-25T15:25:27.84146018Z level=info msg="Using sync state persister"
2025-08-25 16:25:27,842 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=ngalert.state.manager t=2025-08-25T15:25:27.841480966Z level=info msg="Running in alternative execution of Error/NoData mode"
2025-08-25 16:25:27,843 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=infra.usagestats.collector t=2025-08-25T15:25:27.842913052Z level=info msg="registering usage stat providers" usageStatsProvidersLen=2
2025-08-25 16:25:27,843 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafanaStorageLogger t=2025-08-25T15:25:27.843149382Z level=info msg="Storage starting"
2025-08-25 16:25:27,843 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=ngalert.multiorg.alertmanager t=2025-08-25T15:25:27.843256673Z level=info msg="Starting MultiOrg Alertmanager"
2025-08-25 16:25:27,843 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=renderer.manager t=2025-08-25T15:25:27.843282801Z level=error msg="Failed to get renderer plugin sources" error="failed to open plugins path"
2025-08-25 16:25:27,843 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=ngalert.state.manager t=2025-08-25T15:25:27.843240846Z level=info msg="Warming state cache for startup"
2025-08-25 16:25:27,844 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.backgroundinstaller t=2025-08-25T15:25:27.843259884Z level=info msg="Installing plugin" pluginId=grafana-lokiexplore-app version=
2025-08-25 16:25:27,845 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=http.server t=2025-08-25T15:25:27.844882163Z level=info msg="HTTP Server Listen" address=[::]:3000 protocol=http subUrl= socket=
2025-08-25 16:25:27,892 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=sqlstore.transactions t=2025-08-25T15:25:27.891832817Z level=info msg="Database locked, sleeping then retrying" error="database is locked" retry=0 code="database is locked"
2025-08-25 16:25:27,936 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=ngalert.state.manager t=2025-08-25T15:25:27.935759255Z level=info msg="State cache has been initialized" states=0 duration=92.518493ms
2025-08-25 16:25:27,936 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=ngalert.scheduler t=2025-08-25T15:25:27.935795498Z level=info msg="Starting scheduler" tickInterval=10s maxAttempts=3
2025-08-25 16:25:27,936 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=ticker t=2025-08-25T15:25:27.935835958Z level=info msg=starting first_tick=2025-08-25T15:25:30Z
2025-08-25 16:25:27,937 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=provisioning.datasources t=2025-08-25T15:25:27.937412771Z level=info msg="inserting datasource from configuration" name=Prometheus uid=prometheus
2025-08-25 16:25:27,941 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugins.update.checker t=2025-08-25T15:25:27.941729729Z level=info msg="Update check succeeded" duration=98.390562ms
2025-08-25 16:25:27,944 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafana.update.checker t=2025-08-25T15:25:27.944115938Z level=info msg="Update check succeeded" duration=100.956116ms
2025-08-25 16:25:27,954 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=provisioning.datasources t=2025-08-25T15:25:27.954364278Z level=info msg="inserting datasource from configuration" name=Tempo uid=tempo
2025-08-25 16:25:27,965 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=provisioning.datasources t=2025-08-25T15:25:27.965508231Z level=info msg="inserting datasource from configuration" name=Loki uid=loki
2025-08-25 16:25:27,975 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=provisioning.datasources t=2025-08-25T15:25:27.975596072Z level=info msg="inserting datasource from configuration" name=Pyroscope uid=pyroscope
2025-08-25 16:25:27,976 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=sqlstore.transactions t=2025-08-25T15:25:27.976393524Z level=info msg="Database locked, sleeping then retrying" error="database is locked" retry=0 code="database is locked"
2025-08-25 16:25:27,986 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=sqlstore.transactions t=2025-08-25T15:25:27.986773466Z level=info msg="Database locked, sleeping then retrying" error="database is locked" retry=0 code="database is locked"
2025-08-25 16:25:27,987 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=sqlstore.transactions t=2025-08-25T15:25:27.986766892Z level=info msg="Database locked, sleeping then retrying" error="database is locked" retry=1 code="database is locked"
2025-08-25 16:25:27,997 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=sqlstore.transactions t=2025-08-25T15:25:27.997530884Z level=info msg="Database locked, sleeping then retrying" error="database is locked" retry=2 code="database is locked"
2025-08-25 16:25:28,015 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.angulardetectorsprovider.dynamic t=2025-08-25T15:25:28.015137771Z level=info msg="Patterns update finished" duration=133.870136ms
2025-08-25 16:25:28,025 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=provisioning.alerting t=2025-08-25T15:25:28.025665303Z level=info msg="starting to provision alerting"
2025-08-25 16:25:28,026 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=provisioning.alerting t=2025-08-25T15:25:28.025681508Z level=info msg="finished to provision alerting"
2025-08-25 16:25:28,026 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=provisioning.dashboard t=2025-08-25T15:25:28.026559551Z level=info msg="starting to provision dashboards"
2025-08-25 16:25:28,115 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=provisioning.dashboard t=2025-08-25T15:25:28.115232456Z level=info msg="finished to provision dashboards"
2025-08-25 16:25:28,270 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafana-apiserver t=2025-08-25T15:25:28.270306431Z level=info msg="Adding GroupVersion iam.grafana.app v0alpha1 to ResourceManager"
2025-08-25 16:25:28,272 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafana-apiserver t=2025-08-25T15:25:28.272164454Z level=info msg="Adding GroupVersion notifications.alerting.grafana.app v0alpha1 to ResourceManager"
2025-08-25 16:25:28,273 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafana-apiserver t=2025-08-25T15:25:28.272902923Z level=info msg="Adding GroupVersion userstorage.grafana.app v0alpha1 to ResourceManager"
2025-08-25 16:25:28,273 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafana-apiserver t=2025-08-25T15:25:28.273380175Z level=info msg="Adding GroupVersion playlist.grafana.app v0alpha1 to ResourceManager"
2025-08-25 16:25:28,274 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafana-apiserver t=2025-08-25T15:25:28.274696808Z level=info msg="Adding GroupVersion dashboard.grafana.app v0alpha1 to ResourceManager"
2025-08-25 16:25:28,276 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafana-apiserver t=2025-08-25T15:25:28.276482355Z level=info msg="Adding GroupVersion dashboard.grafana.app v1alpha1 to ResourceManager"
2025-08-25 16:25:28,277 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafana-apiserver t=2025-08-25T15:25:28.277397883Z level=info msg="Adding GroupVersion dashboard.grafana.app v2alpha1 to ResourceManager"
2025-08-25 16:25:28,277 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=grafana-apiserver t=2025-08-25T15:25:28.277716193Z level=info msg="Adding GroupVersion featuretoggle.grafana.app v0alpha1 to ResourceManager"
2025-08-25 16:25:28,293 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=app-registry t=2025-08-25T15:25:28.293036733Z level=info msg="app registry initialized"
2025-08-25 16:25:28,688 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: Grafana is up and running. Startup time: 5 seconds
2025-08-25 16:25:28,847 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.installer t=2025-08-25T15:25:28.847256989Z level=info msg="Installing plugin" pluginId=grafana-lokiexplore-app version=
2025-08-25 16:25:28,848 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDERR: level=info ts=2025-08-25T15:25:28.840610519Z caller=compactor.go:493 msg="this instance has been chosen to run the compactor, starting compactor"
2025-08-25 16:25:28,848 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDERR: level=info ts=2025-08-25T15:25:28.840671762Z caller=compactor.go:522 msg="waiting 10m0s for ring to stay stable and previous compactions to finish before starting compactor"
2025-08-25 16:25:28,939 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=installer.fs t=2025-08-25T15:25:28.939691057Z level=info msg="Downloaded and extracted grafana-lokiexplore-app v1.0.26 zip successfully to /data/grafana/plugins/grafana-lokiexplore-app"
2025-08-25 16:25:28,961 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugins.registration t=2025-08-25T15:25:28.961262665Z level=info msg="Plugin registered" pluginId=grafana-lokiexplore-app
2025-08-25 16:25:28,961 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.backgroundinstaller t=2025-08-25T15:25:28.961295012Z level=info msg="Plugin successfully installed" pluginId=grafana-lokiexplore-app version= duration=1.117967237s
2025-08-25 16:25:28,961 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.backgroundinstaller t=2025-08-25T15:25:28.961316512Z level=info msg="Installing plugin" pluginId=grafana-pyroscope-app version=
2025-08-25 16:25:29,269 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.installer t=2025-08-25T15:25:29.268467618Z level=info msg="Installing plugin" pluginId=grafana-pyroscope-app version=
2025-08-25 16:25:29,302 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=installer.fs t=2025-08-25T15:25:29.30175579Z level=info msg="Downloaded and extracted grafana-pyroscope-app v1.8.1 zip successfully to /data/grafana/plugins/grafana-pyroscope-app"
2025-08-25 16:25:29,311 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugins.registration t=2025-08-25T15:25:29.31182256Z level=info msg="Plugin registered" pluginId=grafana-pyroscope-app
2025-08-25 16:25:29,312 INFO [io.qua.obs.tes.LgtmContainer] (docker-java-stream--1315817732) [LGTM] STDOUT: logger=plugin.backgroundinstaller t=2025-08-25T15:25:29.311844382Z level=info msg="Plugin successfully installed" pluginId=grafana-pyroscope-app version= duration=350.521492ms
...
Apart from these small issues, it seems to work fine to me.
|
||
Users can add their own Grafana dashboards aka their configuration. All you need to do is to place a `grafana-dashboard-[your name].json` into a `META-INF/grafana` directory in your application, and LGTM DevResource will pick this up automatically, and include this dashboard configuration in the overall Grafana dashboards yaml configuration. | ||
|
||
e.g. /META-INF/grafana-dashboard-my-simple-prometheus-dashboard.json configuration file creates `My Simple Promeheus Dashboard` titled dashboard |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The folder is /META-INF/grafana/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, fixed.
Strange, since all I get when I run Can you run this as well, and see what you get? |
Status for workflow
|
Status for workflow
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All good now.
I was testing the PR with quarkus.observability.lgtm.logging=ALL
This way users can add their custom dashboards as part of the app,
not needing to import them manually all the time.