loki: devenv: improved fake data generator (#63237)

pull/63091/head
Gábor Farkas 2 years ago committed by GitHub
parent eedcd7d5b1
commit 117bff6459
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      devenv/docker/blocks/loki/data/Dockerfile
  2. 44
      devenv/docker/blocks/loki/data/data.js

@ -1,3 +1,3 @@
FROM node:16-alpine
FROM node:18-alpine
COPY data.js /home/node/data.js

@ -113,21 +113,41 @@ function logFmtLine(item) {
return parts.join(' ');
}
const SLEEP_ANGLE_STEP = Math.PI / 200;
let sleepAngle = 0;
function getNextSineWaveSleepDuration() {
sleepAngle += SLEEP_ANGLE_STEP;
return Math.trunc(1000 * Math.abs(Math.sin(sleepAngle)));
const DAYS = 7;
const POINTS_PER_DAY = 1000;
// it's important to have good "delays" between
// log-line-timestamps, because the "density" of log-lines
// is what gives the loki metric queries shape.
function calculateDelays(pointsCount) {
const delays = [];
for(let i=0;i<pointsCount; i+=1) {
const delay = Math.random();
delays.push(delay);
}
// now, i want to normalize the delays-array, so that the sum of
// all it's items adds up to `1`.
const allDelays = delays.reduce((acc, current) => acc + current, 0);
async function main() {
for (let step = 0; step < 300; step++) {
await sleep(getNextSineWaveSleepDuration());
const timestampMs = new Date().getTime();
const item = getRandomLogItem(step + 1)
lokiSendLogLine(timestampMs, JSON.stringify(item), {place:'moon', source: 'data', instance: 'server\\1', job: '"grafana/data"'});
lokiSendLogLine(timestampMs, logFmtLine(item), {place:'luna', source: 'data', instance: 'server\\2', job: '"grafana/data"'});
for(let i=0;i<delays.length; i++) {
delays[i] = delays[i] / allDelays
}
return delays;
}
async function main() {
const delays = calculateDelays(DAYS * POINTS_PER_DAY);
const timeRange = DAYS * 24 * 60 * 60 * 1000;
let timestampMs = new Date().getTime() - timeRange;
for(let i =0; i < delays.length; i++ ) { // i cannot do a forEach because of the `await` inside
const delay = delays[i];
timestampMs += Math.trunc(delay * timeRange);
const item = getRandomLogItem(i + 1)
await lokiSendLogLine(timestampMs, JSON.stringify(item), {place:'moon', source: 'data', instance: 'server\\1', job: '"grafana/data"'});
await lokiSendLogLine(timestampMs, logFmtLine(item), {place:'luna', source: 'data', instance: 'server\\2', job: '"grafana/data"'});
};
}
// when running in docker, we catch the needed stop-signal, to shutdown fast

Loading…
Cancel
Save