为防止Logtail消耗过多服务器资源,影响其他服务运行,日志服务对Logtail采集性能做了限制。当您需要提升Logtail采集性能时,可修改Logtail启动参数。
设置场景
遇到以下场景时,可修改Logtail启动参数。
需要采集的日志文件数目大(同时采集的文件数超过100个或所监控的目录下的文件数超过5000个),占用大量内存。
日志数据流量大(例如极简模式下超过2 MB/s,正则模式下超过1 MB/s),导致CPU占用率高。
Logtail发送数据到日志服务的速率超过10 MB/s。
推荐参数值
根据实际经验推荐如下参数配置,适用于普通JSON文件的采集场景。完整正则模式和分隔符模式的性能与JSON模式相近,极简模式性能为JSON模式的5倍。由于数据、规则的复杂度、采集目录和文件的数量都会对CPU和MEM消耗带来影响,请参照下述表格并结合实际情况按需调整。
主机环境
参数
默认的采集速率
采集速率大于10 MB/s
采集速率大于20 MB/s
采集速率大于40 MB/s
cpu_usage_limit
0.4
1
2
4
mem_usage_limit
384
1024
2048
4096
max_bytes_per_sec
20971520
209715200
209715200
209715200
process_thread_count
1
2
4
8
send_request_concurrency
4
20
40
80
容器或Kubernetes环境
环境变量
默认的采集速率
采集速率大于10 MB/s
采集速率大于20 MB/s
采集速率大于40 MB/s
cpu_usage_limit
2
3
5
9
mem_usage_limit
2048
2048
2048
4096
max_bytes_per_sec
209715200
209715200
209715200
209715200
process_thread_count
1
2
4
8
send_request_concurrency
20
20
40
80
resources.limits.cpu
500M
1000M
2000M
4000M
resources.limits.memory
2 Gi
2 Gi
3 Gi
5 Gi
容器或Kubernetes环境中的Logtail启动参数修改说明如下:
如果Logtail部署在阿里云Kubernetes集群中,且为Logtail-ds 1.7.3及以上版本,则推荐通过容器服务管理控制台修改,即在组件管理页面,修改logtail-ds组件中对应的各个参数。
如果Logtail部署在自建容器或Kubernetes环境中,且为Logtail-ds 1.7.3及以上版本,则需要通过修改daemonset环境变量来修改Logtail启动参数。部分环境引用configmap,configmap路径为
。如果Logtail为Logtail-ds 1.7.3之前版本,则需要通过修改daemonset环境变量来修改Logtail启动参数。部分环境引用configmap,configmap路径为resources.limits.cpu和resources.limits.memory,避免Container资源超限。
。同时还需调整 中的
按照上述表格中的采集速率大于40 MB/s列配置Logtail启动参数时,Logtail的采集性能接近极限,继续增加线程对性能提升效果不显著。采集端的性能极限说明如下表所示。
因测试环境与生产环境不同,实际采集性能可能存在差异。
采集模式 | 性能极限 |
极简模式 | 440 MB/s |
完整正则模式 | 70 MB/s |
分隔符模式 | 75 MB/s |
JSON模式 | 75 MB/s |
设置启动参数
在安装Logtail的服务器上,打开/usr/local/ilogtail/ilogtail_config.json文件。
此步骤适用于主机环境。
在容器或Kubernetes环境下,您需要通过修改daemonset环境变量来修改Logtail启动参数。部分环境引用configmap,configmap路径为
根据需求设置启动参数。
启动参数示例如下:
{ ... "cpu_usage_limit" : 0.4, "mem_usage_limit" : 384, "max_bytes_per_sec" : 20971520, "process_thread_count" : 1, "send_request_concurrency" : 4, "buffer_file_num" : 25, "buffer_file_size" : 20971520, "buffer_file_path" : "", ... }
说明下表中只列出您需要关注的常用启动参数,未列出的启动参数,保持默认配置即可。
您可以根据需要新增或修改指定启动参数。
表 1. Logtail启动参数 参数
类型
说明
示例
cpu_usage_limit
double
CPU使用阈值,以单核计算。取值如下:
取值范围:0.1~当前机器的CPU核心数
默认值:0.4
警告cpu_usage_limit为软限制,实际Logtail占用的CPU可能超过限制值,超限5分钟后将触发熔断保护,Logtail自动重启。
例如设置为0.4,表示日志服务将尽可能限制Logtail的CPU使用为CPU单核的40%,超出后Logtail自动重启。
一般情况下,通过极简模式采集日志时,单核处理能力约100 MB/s;通过完整正则模式采集日志时,单核处理能力约20 MB/s 。
"cpu_usage_limit" : 0.4
mem_usage_limit
int
内存使用阈值。取值如下:
取值范围:128 MB ~ 8192 MB
默认值:384 MB(主机),2048 MB(ACK组件)
警告mem_usage_limit为软限制,实际Logtail占用的内存可能超过限制值,超限5分钟后将触发熔断保护,Logtail自动重启。
采集速率、监控目录和文件数量、发送阻塞程度与mem_usage_limit参数有关。更多信息,请参见Logtail限制说明。
"mem_usage_limit" : 384
max_bytes_per_sec
int
每秒钟Logtail发送原始数据的流量限制。取值如下:
取值范围:1024 Byte/s ~ 52428800 Byte/s
默认值:20971520 Byte/s
重要设置的值超过20971520 Byte/s(20MB/s),表示不限速。
例如设置为2097152,表示Logtail发送数据的速率为2 MB/s。
"max_bytes_per_sec" : 2097152
process_thread_count
int
Logtail处理数据的线程数。 取值如下:
取值范围:1~64
默认值:1
一般情况下,可以处理极简模式下24 MB/s的数据写入或完整正则模式12 MB/s的数据写入。默认情况下无需调整该参数取值。
"process_thread_count" : 1
send_request_concurrency
int
异步并发的个数。取值如下:
取值范围:1~50
默认值:20
如果写入TPS很高,可以设置更高的异步并发个数。可以按照一个并发支持0.5 MB/s~1 MB/s网络吞吐来计算,实际根据网络延时而定。
"send_request_concurrency" : 4
buffer_file_num
int
限制缓存文件的最大数目。取值如下:
取值范围:1~100
默认值:25
遇到网络异常、写入配额超限等情况时,Logtail将实时解析后的日志写入本地文件(安装目录下)缓存起来,等待恢复后尝试重新发送。
"buffer_file_num" : 25
buffer_file_size
int
单个缓存文件允许的最大字节数。取值如下:
取值范围:1048576 Byte ~ 104857600 Byte
默认值:20971520 Byte
buffer_file_size*buffer_file_num是缓存文件可以实际使用的最大磁盘空间。
"buffer_file_size" : 20971520
buffer_file_path
String
缓存文件存放目录。 默认值为空,即缓存文件存放于logtail安装目录/usr/local/ilogtail下。
当您设置此参数后,需手动将原目录下名为logtail\_buffer\_file_*的文件移动到此目录,以保证Logtail可以读取到该缓存文件并在发送后进行删除。
"buffer_file_path" : ""
bind_interface
String
本机绑定的网卡名。默认值为空,自动绑定可用的网卡。
如果设置为指定的网卡(例如eth1),则表示Logtail将强制使用该网卡上传日志。
只支持Linux版本。
"bind_interface" : ""
check_point_filename
String
Logtail的checkpoint文件的保存路径, 默认值:/tmp/logtail_check_point。
"check_point_filename" : /tmp/logtail_check_point
check_point_dump_interval
int
Logtail更新Checkpoint文件的周期,默认值:900,单位:秒。即默认情况下每15分钟更新一次Checkpoint文件。
仅Linux Logtail 1.0.19及以上版本或Windows Logtail 1.0.19.0及以上版本支持该参数。
"check_point_dump_interval" : 900
user_config_file_path
String
Logtail配置文件的保存路径,默认为进程binary所在目录,文件名为user_log_config.json。
"user_config_file_path" : user_log_config.json
docker_file_cache_path
String
该文件记录了容器文件到宿主机文件的路径映射,默认为/usr/local/ilogtail/docker_path_config.json。
仅Linux Logtail 0.16.54及以上版本或Windows Logtail 0.16.54.0及以上版本支持该参数。
"docker_file_cache_path": /usr/local/ilogtail/docker_path_config.json
discard_old_data
Boolean
是否丢弃历史日志。默认值:true,表示丢弃距离当前时间超过12小时的日志。
"discard_old_data" : true
ilogtail_discard_interval
int
丢弃历史日志距离当前时间的阈值。默认值:43200(12小时),单位:秒。
"ilogtail_discard_interval": 43200
working_ip
String
Logtail上报本服务器的IP地址。默认值为空,表示自动从本服务器获取IP地址。
"working_ip" : ""
working_hostname
String
Logtail上报的本服务器的主机名。默认值为空,表示自动从本服务器获取主机名。
"working_hostname" : ""
max_read_buffer_size
long
每条日志读取的最大值。默认值:524288(512 KB),最大值:8388608(8 MB)。单位:Byte。
如果您的单条日志超过524288 Byte,可修改此参数。
"max_read_buffer_size" : 524288
oas_connect_timeout
long
Logtail发起获取Logtail配置、访问密钥等请求时,连接阶段的超时时间。默认值:5,单位:秒。
网络条件较差,建立连接时间过长时可修改此参数。
"oas_connect_timeout" : 5
oas_request_timeout
long
Logtail发起获取Logtail配置、访问密钥等请求时,整个请求阶段的超时时间。默认值:10,单位:秒。
网络条件较差,建立连接时间过长时可修改此参数。
"" : 10
data_server_port
long
设置data_server_port为443后,Logtail将通过HTTPS协议传输数据到日志服务。
仅Linux Logtail 1.0.10及以上版本或Windows Logtail 1.0.10.0及以上版本支持该参数。
"data_server_port": 443
enable_log_time_auto_adjust
Boolean
设置enable_log_time_auto_adjust为true后,日志时间可自适应服务器本地时间。
出于数据安全考虑,日志服务会对请求(包括Logtail发起的请求)所携带的时间进行校验,拒绝与日志服务端时间相差超过15分钟的请求。Logtail发起请求时所携带的时间为服务器本地时间,当服务器本地时间被修改后(例如某些测试场景下需要调整本地时间为未来时间),Logtail请求将被拒绝,导致写入数据失败。您可以使用该参数实现日志时间自适应服务器本地时间。
仅Linux Logtail 1.0.19及以上版本或Windows Logtail 1.0.19.0及以上版本支持该参数。
重要开启该功能后,日志时间将被加上日志服务端的时间与服务器本地时间的偏移量。由于偏移量只在请求被日志服务端拒绝时更新,因此可能出现日志服务端所查询到的日志的时间和日志实际的写入时间不一致的情况。
Logtail的部分逻辑依赖于系统时间的递增,建议在每次机器时间调整后重启Logtail。
"enable_log_time_auto_adjust": true
accept_multi_config
Boolean
是否允许多个Logtail配置采集同一个文件。默认值:false,表示不允许。
默认情况下,一个文件只能被一个Logtail配置采集,您可以通过该参数消除限制。每个Logtail配置的处理过程是独立的,当允许多个Logtail配置采集同一个文件时,需要消耗多倍的CPU、内存开销。
仅Linux Logtail 0.16.26及以上版本或Windows Logtail 0.16.26.0及以上版本支持该参数。
"accept_multi_config": true
enable_checkpoint_sync_write
Boolean
是否开启sync写功能。默认值:false,表示不开启。
sync写功能主要用于搭配ExactlyOnce写入功能。开启ExactlyOnce写入功能后,Logtail会在本地磁盘记录细粒度的Checkpoint信息(文件级别)。但出于性能考虑,默认写入Checkpoint时不会调用sync落盘,所以如果机器重启导致buffer数据来不及写入磁盘时,可能导致Checkpoint丢失。此时,您可以设置enable_checkpoint_sync_write为true,开启sync写功能。更多信息,请参见Logtail配置。
仅Linux Logtail 1.0.20及以上版本或Windows Logtail 1.0.20.0及以上版本支持该参数。
"enable_checkpoint_sync_write": false
enable_env_ref_in_config
Boolean
是否启用采集配置环境变量替换功能。默认值:false。
开启该功能后,您可以在控制台的Logtail采集配置中使用
${xxx}
作为环境变量xxx
的占位符。例如设置采集路径为/${xxx}/logs
,环境变量为xxx=user
,则生效的采集路径为/user/logs
。如果配置中需要使用
${
、}
,则您可以使用$${
、$}
进行转义。仅Linux Logtail 1.0.31及以上版本或Windows Logtail 1.0.31.0及以上版本支持该参数。
"enable_env_ref_in_config": false
docker_config_update_interval
int
容器路径更新的最小时间间隔。
与max_docker_config_update_times配合使用,任意一个参数达到阈值则不再更新容器路径。
如果是Linux Logtail 1.0.32及以上版本或Windows Logtail 1.0.32.0及以上版本,默认值:3,单位:秒。
如果是Linux Logtail 1.0.32之前版本或Windows Logtail 1.0.32.0之前版本,默认值:10,单位:秒。
"docker_config_update_interval": 3
max_docker_config_update_times
int
3分钟内更新容器路径最大次数。默认情况下,3分钟内容器路径更新次数超过3次则不再更新容器路径。
如果是Linux Logtail 1.0.32及以上版本或Windows Logtail 1.0.32.0及以上版本,默认值:10。
如果是Linux Logtail 1.0.32之前版本或Windows Logtail 1.0.32.0之前版本,默认值:3。
"max_docker_config_update_times": 10
DOCKER_HOST
String
与Docker通信的Socket地址,需通过环境变量进行配置。
默认值:空,表示使用默认地址unix:///var/run/docker.sock。
DOCKER_HOST=unix:///var/run/docker.sock
CONTAINERD_SOCK_PATH
String
与Containerd通信的Socket地址,需通过环境变量进行配置。
默认值:空,表示使用默认地址unix:///run/containerd/containerd.sock。如果是K3s集群,可按照示例修改。
CONTAINERD_SOCK_PATH=/run/k3s/containerd/containerd.sock
logreader_max_rotate_queue_size
Int
轮转队列最大长度。默认值:20。当日志采集发生阻塞或延时时,待采集的文件会持有文件句柄在队列中等待。
当采集延时时,如果需要控制磁盘最大用量,可考虑减小该值。
警告当延时的文件数超过该值时,Logtail将直接跳过新文件的采集。
"logreader_max_rotate_queue_size" : 10
force_release_deleted_file_fd_timeout
Int
容器退出或者文件删除将在一定时间内释放句柄,您可以指定对应的时间。默认值:-1,表示关闭功能。值为0时,表示立刻释放。单位:秒。
如果您要控制containerd容器的最大销毁延时,可考虑将值设置该参数。
警告当采集发生延时时,延时超过配置的数据会丢失。
"force_release_deleted_file_fd_timeout" : 0
data_endpoint_policy
string
Logtail对日志服务访问域名的切换策略。可选值如下:
说明您可以在ilogtail_config.json文件的data_server_list参数中,查看是否已配置默认域名。更多信息,请参见启动参数配置文件(ilogtail_config.json)。
designated_first(默认)
如果已指定某个地域的默认域名且默认域名可用,则系统优先使用默认域名。
如果已指定某个地域的默认域名但默认域名不可用,则系统会自动选择一个可用域名。
如果未指定某个地域的默认域名,则系统会自动选择一个可用域名。
designated_locked
如果已指定某个地域的默认域名,不管其是否可用,系统都将只使用默认域名。
如果未指定某个地域的默认域名,系统会自动选择一个可用域名。
仅Linux Logtail 1.5.0及以上版本或Windows Logtail 1.5.0.0及以上版本支持该参数。
"data_endpoint_policy" : "designated_first"
inotify_black_list
Array<String>
inotify监听黑名单,黑名单为完全匹配,此列表中的目录不会启用inotify监听。
"inotify_black_list": ["/tmp"]
host_path_blacklist
String
全局主机路径黑名单,黑名单为子串匹配。
Linux系统下多个子串以半角冒号(:)分隔。
Windows系统下多个子串以半角分号(;)分隔。
例如
"host_path_blacklist" : "/volumes/kubernetes.io~csi/nas-"
表示禁止采集NAS挂载数据。仅Linux Logtail 1.8.0及以上版本或Windows Logtail 1.8.0.0及以上版本支持该参数。
"host_path_blacklist" : "/volumes/kubernetes.io~csi/nas-"
LOGTAIL_LOG_LEVEL
String
日志打印级别,需通过环境变量进行配置。默认值:空,表示info,可选值trace、debug、info、warning、error和fatal。
仅Linux Logtail 1.8.0及以上版本或Windows Logtail 1.8.0.0及以上版本支持该参数。
LOGTAIL_LOG_LEVEL=info
重启Logtail使配置生效。
/etc/init.d/ilogtaild stop && /etc/init.d/ilogtaild start
重启后,您可以执行
/etc/init.d/ilogtaild status
命令检查Logtail状态。
附录:环境变量说明
环境变量与Logtail启动参数的对应关系如下。
参数 | 环境变量 | 优先级 | 支持版本 |
cpu_usage_limit | cpu_usage_limit | 如果您通过环境变量和配置文件修改了Logtail启动参数,以环境变量为准。 |
|
mem_usage_limit | mem_usage_limit | 如果您通过环境变量和配置文件修改了Logtail启动参数,以环境变量为准。 |
|
max_bytes_per_sec | max_bytes_per_sec | 如果您通过环境变量和配置文件修改了Logtail启动参数,以环境变量为准。 |
|
process_thread_count | process_thread_count | 如果您通过环境变量和配置文件修改了Logtail启动参数,以环境变量为准。 |
|
send_request_concurrency | send_request_concurrency | 如果您通过环境变量和配置文件修改了Logtail启动参数,以环境变量为准。 |
|
check_point_filename | check_point_filename或ALIYUN_LOGTAIL_CHECK_POINT_PATH | 如果您通过环境变量和配置文件修改了Logtail启动参数,以环境变量为准。 |
|
docker_file_cache_path | docker_file_cache_path | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
user_config_file_path | user_config_file_path | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
discard_old_data | discard_old_data | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
working_ip | working_ip或ALIYUN_LOGTAIL_WORKING_IP | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
working_hostname | working_hostname或ALIYUN_LOGTAIL_WORKING_HOSTNAME | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
max_read_buffer_size | max_read_buffer_size | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
oas_connect_timeout | oas_connect_timeout | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
oas_request_timeout | oas_request_timeout | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
data_server_port | data_server_port | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
accept_multi_config | accept_multi_config | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
enable_log_time_auto_adjust | enable_log_time_auto_adjust | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
check_point_dump_interval | check_point_dump_interval | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
enable_checkpoint_sync_write | enable_checkpoint_sync_write | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
docker_config_update_interval | docker_config_update_interval或ALIYUN_LOGTAIL_DOCKER_CONFIG_UPDATE_INTERVAL | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
max_docker_config_update_times | max_docker_config_update_times或ALIYUN_LOGTAIL_MAX_DOCKER_CONFIG_UPDATE_TIMES | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
logreader_max_rotate_queue_size | logreader_max_rotate_queue_size | 如果您通过环境变量和配置文件修改了Logtail启动参数,以配置文件为准。 |
|
force_release_deleted_file_fd_timeout | force_release_deleted_file_fd_timeout | 如果您通过环境变量和配置文件修改了Logtail启动参数,以环境变量为准。 |
|
host_path_blacklist | host_path_blacklist | 如果您通过环境变量和配置文件修改了Logtail启动参数,以环境变量为准。 |
|