Grafana Loki
Store reporting events in Loki while forwarding projected metrics through the OTLP/HTTP metrics companion settings.
Reporting
Realtime reporting
Choose the built-in sink page that matches the observability stack your team already uses. Each tab below opens a dedicated page instead of swapping content in place.
When To Use Grafana Loki
Use Grafana Loki when your team already indexes log-style observability events in Loki but still wants projected metrics available for dashboards and alerting.
What LoadStrike Sends
GrafanaLokiReportingSink writes reporting events to Loki and can send projected metrics through MetricsBaseUrl, MetricsEndpointPath, and MetricsHeaders to an OTLP/HTTP-compatible metrics endpoint.
Configuration Surface
Configure the sink in code or through LoadStrike:ReportingSinks:GrafanaLoki. Common options include BaseUrl, BearerToken, TenantId, StaticLabels, MetricsBaseUrl, MetricsEndpointPath, and MetricsHeaders.
Starter Assets
LoadStrike publishes a Loki datasource YAML, the shared Grafana dashboard-provider YAML, and a Loki overview dashboard JSON file.
Grafana Loki realtime reporting
Use GrafanaLokiReportingSink when you want reporting events in Loki and projected metrics through an OTLP/HTTP companion endpoint.
Switch between C#, Java, Python, TypeScript, and JavaScript to see the native SDK shape for this sample.
Licensing note: every runnable sample requires a valid runner key via WithRunnerKey("...") or config key LoadStrike:RunnerKey.
HTML reports include an icon-only Light/Dark theme toggle fixed at the top-right. Default report theme is Light.
Grafana Loki Sink
var lokiSink = new GrafanaLokiReportingSink(new GrafanaLokiReportingSinkOptions
{
BaseUrl = "https://loki.example.com",
BearerToken = "loki-token",
TenantId = "platform-team",
MetricsBaseUrl = "https://otel-gateway.example.com",
MetricsEndpointPath = "/v1/metrics",
MetricsHeaders =
{
["Authorization"] = "Bearer otlp-metrics-token"
}
});
LoadStrikeRunner.RegisterScenarios(scenario)
.WithReportingSinks(lokiSink)
.WithRunnerKey("rkl_your_local_runner_key")
.Run();
import com.loadstrike.runtime.LoadStrikeRunner;
import com.loadstrike.runtime.LoadStrikeSinks;
var options = new LoadStrikeSinks.GrafanaLokiSinkOptions();
options.baseUrl = "https://loki.example.com";
options.bearerToken = "loki-token";
options.tenantId = "platform-team";
options.metricsBaseUrl = "https://otel-gateway.example.com";
options.metricsEndpointPath = "/v1/metrics";
options.metricsHeaders.put("Authorization", "Bearer otlp-metrics-token");
var sink = new LoadStrikeSinks.GrafanaLokiReportingSink(options);
LoadStrikeRunner.registerScenarios(scenario)
.withReportingSinks(sink)
.withRunnerKey("rkl_your_local_runner_key")
.run();
from loadstrike_sdk import GrafanaLokiReportingSink, LoadStrikeRunner
sink = GrafanaLokiReportingSink(
base_url="https://loki.example.com",
bearer_token="loki-token",
tenant_id="platform-team",
metrics_base_url="https://otel-gateway.example.com",
metrics_endpoint_path="/v1/metrics",
metrics_headers={
"Authorization": "Bearer otlp-metrics-token",
},
)
LoadStrikeRunner.register_scenarios(scenario) \
.with_reporting_sinks(sink) \
.with_runner_key("rkl_your_local_runner_key") \
.run()
import {
GrafanaLokiReportingSink,
GrafanaLokiReportingSinkOptions,
LoadStrikeRunner
} from "@loadstrike/loadstrike-sdk";
const sink = new GrafanaLokiReportingSink(new GrafanaLokiReportingSinkOptions({
BaseUrl: "https://loki.example.com",
BearerToken: "loki-token",
TenantId: "platform-team",
MetricsBaseUrl: "https://otel-gateway.example.com",
MetricsEndpointPath: "/v1/metrics",
MetricsHeaders: {
Authorization: "Bearer otlp-metrics-token"
}
}));
await LoadStrikeRunner
.registerScenarios(scenario)
.withReportingSinks(sink)
.withRunnerKey("rkl_your_local_runner_key")
.run();
const {
GrafanaLokiReportingSink,
GrafanaLokiReportingSinkOptions,
LoadStrikeRunner
} = require("@loadstrike/loadstrike-sdk");
const sink = new GrafanaLokiReportingSink(new GrafanaLokiReportingSinkOptions({
BaseUrl: "https://loki.example.com",
BearerToken: "loki-token",
TenantId: "platform-team",
MetricsBaseUrl: "https://otel-gateway.example.com",
MetricsEndpointPath: "/v1/metrics",
MetricsHeaders: {
Authorization: "Bearer otlp-metrics-token"
}
}));
await LoadStrikeRunner
.registerScenarios(scenario)
.withReportingSinks(sink)
.withRunnerKey("rkl_your_local_runner_key")
.run();
Grafana Loki setup checklist
LoadStrike:ReportingSinks:GrafanaLoki
BaseUrl, BearerToken, TenantId, StaticLabels, MetricsBaseUrl, MetricsEndpointPath, and MetricsHeaders.
Teams already indexing log events in Loki but still wanting metric series for dashboards and alerts.
Datasource YAML, shared dashboard-provider YAML, and a Loki overview dashboard are published for download.
{
"LoadStrike": {
"ReportingSinks": {
"GrafanaLoki": {
"BaseUrl": "https://loki.example.com",
"BearerToken": "loki-token",
"MetricsBaseUrl": "https://otel-gateway.example.com",
"MetricsEndpointPath": "/v1/metrics",
"MetricsHeaders": {
"Authorization": "Bearer otlp-metrics-token"
}
}
}
}
}
Downloads and starter assets
These files cover the documented Loki-backed workflow that LoadStrike publishes publicly.
Loki datasource YAML
Grafana datasource definition for a Loki-backed LoadStrike dashboard setup.
Download fileDashboard provider YAML
Shared Grafana dashboard-provider file used by the published starter dashboards.
Download fileLoki dashboard JSON
Starter dashboard wired for the Grafana Loki sink shape documented here.
Download file