2024-05-09 15:10:24 +00:00
# vlogsgenerator
Logs generator for [VictoriaLogs ](https://docs.victoriametrics.com/victorialogs/ ).
## How to build vlogsgenerator?
Run `make vlogsgenerator` from the repository root. This builds `bin/vlogsgenerator` binary.
2024-05-09 15:19:03 +00:00
## How run vlogsgenerator?
2024-05-09 15:10:24 +00:00
`vlogsgenerator` generates logs in [JSON line format ](https://jsonlines.org/ ) suitable for the ingestion
via [`/insert/jsonline` endpoint at VictoriaLogs ](https://docs.victoriametrics.com/victorialogs/data-ingestion/#json-stream-api ).
By default it writes the generated logs into `stdout` . For example, the following command writes generated logs to `stdout` :
```
bin/vlogsgenerator
```
It is possible to redirect the generated logs to file. For example, the following command writes the generated logs to `logs.json` file:
```
bin/vlogsgenerator > logs.json
```
The generated logs at `logs.json` file can be inspected with the following command:
```
head logs.json | jq .
```
Below is an example output:
```json
{
"_time": "2024-05-08T14:34:00.854Z",
"_msg": "message for the stream 8 and worker 0; ip=185.69.136.129; uuid=b4fe8f1a-c93c-dea3-ba11-5b9f0509291e; u64=8996587920687045253",
"host": "host_8",
"worker_id": "0",
2024-05-10 21:30:18 +00:00
"run_id": "f9b3deee-e6b6-7f56-5deb-1586e4e81725",
2024-05-09 15:10:24 +00:00
"const_0": "some value 0 8",
"const_1": "some value 1 8",
"const_2": "some value 2 8",
"var_0": "some value 0 12752539384823438260",
"dict_0": "warn",
"dict_1": "info",
"u8_0": "6",
"u16_0": "35202",
"u32_0": "1964973739",
"u64_0": "4810489083243239145",
"float_0": "1.868",
"ip_0": "250.34.75.125",
2024-05-20 00:50:19 +00:00
"timestamp_0": "1799-03-16T01:34:18.311Z",
"json_0": "{\"foo\":\"bar_3\",\"baz\":{\"a\":[\"x\",\"y\"]},\"f3\":NaN,\"f4\":32}"
2024-05-09 15:10:24 +00:00
}
{
"_time": "2024-05-08T14:34:00.854Z",
"_msg": "message for the stream 9 and worker 0; ip=164.244.254.194; uuid=7e8373b1-ce0d-1ce7-8e96-4bcab8955598; u64=13949903463741076522",
"host": "host_9",
"worker_id": "0",
2024-05-10 21:30:18 +00:00
"run_id": "f9b3deee-e6b6-7f56-5deb-1586e4e81725",
2024-05-09 15:10:24 +00:00
"const_0": "some value 0 9",
"const_1": "some value 1 9",
"const_2": "some value 2 9",
"var_0": "some value 0 5371555382075206134",
"dict_0": "INFO",
"dict_1": "FATAL",
"u8_0": "219",
"u16_0": "31459",
"u32_0": "3918836777",
"u64_0": "6593354256620219850",
"float_0": "1.085",
"ip_0": "253.151.88.158",
2024-05-20 00:50:19 +00:00
"timestamp_0": "2042-10-05T16:42:57.082Z",
"json_0": "{\"foo\":\"bar_5\",\"baz\":{\"a\":[\"x\",\"y\"]},\"f3\":NaN,\"f4\":27}"
2024-05-09 15:10:24 +00:00
}
```
2024-05-10 21:30:18 +00:00
The `run_id` field uniquely identifies every `vlogsgenerator` invocation.
2024-05-09 15:19:03 +00:00
### How to write logs to VictoriaLogs?
2024-05-09 15:10:24 +00:00
The generated logs can be written directly to VictoriaLogs by passing the address of [`/insert/jsonline` endpoint ](https://docs.victoriametrics.com/victorialogs/data-ingestion/#json-stream-api )
to `-addr` command-line flag. For example, the following command writes the generated logs to VictoriaLogs running at `localhost` :
```
bin/vlogsgenerator -addr=http://localhost:9428/insert/jsonline
```
2024-05-09 15:19:03 +00:00
### Configuration
2024-05-09 15:10:24 +00:00
`vlogsgenerator` accepts various command-line flags, which can be used for configuring the number and the shape of the generated logs.
These flags can be inspected by running `vlogsgenerator -help` . Below are the most interesting flags:
* `-start` - starting timestamp for generating logs. Logs are evenly generated on the [`-start` ... `-end` ] interval.
* `-end` - ending timestamp for generating logs. Logs are evenly generated on the [`-start` ... `-end` ] interval.
2024-05-24 17:04:24 +00:00
* `-activeStreams` - the number of active [log streams ](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields ) to generate.
2024-05-09 15:10:24 +00:00
* `-logsPerStream` - the number of log entries to generate per each log stream. Log entries are evenly distributed on the [`-start` ... `-end` ] interval.
The total number of generated logs can be calculated as `-activeStreams` * `-logsPerStream` .
For example, the following command generates `1_000_000` log entries on the time range `[2024-01-01 - 2024-02-01]` across `100`
2024-05-24 17:04:24 +00:00
[log streams ](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields ), where every logs stream contains `10_000` log entries,
2024-05-09 15:10:24 +00:00
and writes them to `http://localhost:9428/insert/jsonline` :
```
bin/vlogsgenerator \
-start=2024-01-01 -end=2024-02-01 \
-activeStreams=100 \
-logsPerStream=10_000 \
-addr=http://localhost:9428/insert/jsonline
```
2024-05-09 15:19:03 +00:00
### Churn rate
2024-05-24 17:04:24 +00:00
It is possible to generate churn rate for active [log streams ](https://docs.victoriametrics.com/victorialogs/keyconcepts/#stream-fields )
2024-05-09 15:19:03 +00:00
by specifying `-totalStreams` command-line flag bigger than `-activeStreams` . For example, the following command generates
logs for `1000` total streams, while the number of active streams equals to `100` . This means that at every time there are logs for `100` streams,
but these streams change over the given [`-start` ... `-end` ] time range, so the total number of streams on the given time range becomes `1000` :
```
bin/vlogsgenerator \
-start=2024-01-01 -end=2024-02-01 \
-activeStreams=100 \
-totalStreams=1_000 \
-logsPerStream=10_000 \
-addr=http://localhost:9428/insert/jsonline
```
In this case the total number of generated logs equals to `-totalStreams` * `-logsPerStream` = `10_000_000` .
### Benchmark tuning
2024-05-09 15:10:24 +00:00
By default `vlogsgenerator` generates and writes logs by a single worker. This may limit the maximum data ingestion rate during benchmarks.
The number of workers can be changed via `-workers` command-line flag. For example, the following command generates and writes logs with `16` workers:
```
bin/vlogsgenerator \
-start=2024-01-01 -end=2024-02-01 \
-activeStreams=100 \
-logsPerStream=10_000 \
-addr=http://localhost:9428/insert/jsonline \
-workers=16
```
2024-05-09 15:19:03 +00:00
### Output statistics
2024-05-09 15:10:24 +00:00
Every 10 seconds `vlogsgenerator` writes statistics about the generated logs into `stderr` . The frequency of the generated statistics can be adjusted via `-statInterval` command-line flag.
For example, the following command writes statistics every 2 seconds:
```
bin/vlogsgenerator \
-start=2024-01-01 -end=2024-02-01 \
-activeStreams=100 \
-logsPerStream=10_000 \
-addr=http://localhost:9428/insert/jsonline \
-statInterval=2s
```