ahfuzhang

https://github.com/ahfuzhang

导航

【小技巧】压测过程中,直接把日志打到 VictoriaLogs 中

作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!


我在压测过程中发现了很多程序错误,然而日志又滚太快了;输出到文件也很难分析。于是我用如下方法,把程序输出的 json 日志导入到 VictoriaLogs,便于事后做分析。

我的测试运行在一台安装了 docker 的 linux 机器上。

启动 VictoriaLogs

mkdir -p /home/ahfu/VictoriaLogsData/

docker run -d --rm --name victorialogs \
  --network="host" \
  --cpuset-cpus="4,5,6,7" \
  -m 2048m \
  -v /home/ahfu/VictoriaLogsData/:/data/ \
  -e GOMAXPROCS=4 \
  victoriametrics/victoria-logs:latest \
  -storageDataPath=/data/ \
  -inmemoryDataFlushInterval=30s \
  -memory.allowedPercent=80 \
  -retentionPeriod=3d

配置 vector 日志采集器

准备 vector 对应的配置文件: vector.toml

# vector.toml

# 1) Source: 从标准输入读取(你把别的进程 stdout pipe 进来)
#    例: your_app 2>&1 | vector -c vector.toml
[sources.stdin]
type = "stdin"

# 可选:指定编码/行分隔等(一般不需要)
# encoding.charset = "utf-8"

# 2) Transform: 把整行内容放到 .message(可选,但很常用)
[transforms.parse]
type = "remap"
inputs = ["stdin"]
source = '''
log_json,err = parse_json(.message)
if err != null {
	abort
}
. = log_json

if !exists(.Message) {
    .Message = " "
}
'''

[sinks.jsonline_http]
type = "http"
inputs = ["parse"]
uri = "http://127.0.0.1:9428/insert/jsonline?_time_field=Timestamp&_msg_field=Properties.Message&_stream_fields=Level&ignore_fields=&decolorize_fields=&AccountID=0&ProjectID=0&debug=false&extra_fields="
method = "post"
encoding.codec = "json"
request.retry_attempts = 0
request.compression = "zstd"
framing.method = "newline_delimited"

测试一下:

echo '{"Timestamp":"2024-05-28T10:00:00Z","Level":"INFO","Message":"This is a test log message."}' | docker run --rm -i \
		--network="host" \
		--cpuset-cpus="3" \
		-m 512m \
		-v "./vector.toml:/etc/vector/vector.toml:ro" \
		-e VECTOR_LOG=debug \
		timberio/vector:latest-alpine \
		-c /etc/vector/vector.toml

浏览器进入:http://192.168.0.xxx:9428/select/vmui/, 桌面上连接到 linux 机器的对应端口,就可以通过 vmui 来查询日志了。

启动业务进程

run-with-log:
	dotnet run --project MyAPI/My.API.csproj 2>&1 | \
	docker run --rm -i \
		--network="host" \
		--cpuset-cpus="3" \
		-m 512m \
		-v "./test/log/vector.toml:/etc/vector/vector.toml:ro" \
		timberio/vector:latest-alpine \
		-c /etc/vector/vector.toml

执行 make run-with-log 即可启动推送日志的方式来运行测试程序。

Have Fun. 😃

posted on 2026-02-13 10:06  ahfuzhang  阅读(18)  评论(0)    收藏  举报