Node.js Grafana API SDK (Loki, Datasources ..)
- Node.js version 20 or higher
- A reverse-proxy to safely expose Loki to internet (if required).
This package is available in the Node Package Repository and can be easily installed with npm or yarn
$ npm i @myunisoft/loki
# or
$ yarn add @myunisoft/loki
import { GrafanaApi } from "@myunisoft/loki";
import { LogQL, StreamSelector } from "@sigyn/logql";
const api = new GrafanaApi({
authentication: {
type: "bearer",
token: process.env.GRAFANA_API_TOKEN!
},
remoteApiURL: "https://name.loki.com"
});
const ql = new LogQL(
new StreamSelector({ app: "serviceName", env: "production" })
);
const logs = await api.Loki.queryRange(
ql, // or string `{app="serviceName", env="production"}`
{
start: "1d",
limit: 200
}
);
console.log(logs);
You can also provide a Loki pattern to automatically parse logs (and infer the right type with TypeScript)
const logs = await api.Loki.queryRange(
`{app="serviceName", env="production"}`
{
pattern: "<verb> <_> <endpoint>"
}
);
for (const { verb, endpoint } of logs) {
console.log({verb, endpoint });
}
interface GrafanaApiOptions {
/**
* If omitted then no authorization is dispatched to requests
*/
authentication?: ApiCredentialAuthorizationOptions;
/**
* User-agent HTTP header to forward to Grafana/Loki API
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agents
*/
userAgent?: string;
/**
* Remote Grafana root API URL
*/
remoteApiURL: string | URL;
}
type ApiCredentialAuthorizationOptions = {
type: "bearer";
token: string;
} | {
type: "classic";
username: string;
password: string;
} | {
type: "custom";
authorization: string;
};
Thanks goes to these wonderful people (emoji key):
Thomas.G 💻 🛡️ 📖 |
PierreDemailly 💻 |
MIT