本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
為防止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。
建議Docker/Kubernetes用戶參見iLogtail容器重啟數據可靠性探討進行配置,避免Logtail容器重啟時丟失checkpoint信息等而造成采集重復或丟失。
"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。
建議Docker/Kubernetes用戶參見iLogtail容器重啟數據可靠性探討進行配置,避免Logtail容器重啟導致采集重復或丟失。
"user_config_file_path" : user_log_config.json
docker_file_cache_path
String
該文件記錄了容器文件到宿主機文件的路徑映射,默認為/usr/local/ilogtail/docker_path_config.json。
建議Docker/Kubernetes用戶參見iLogtail容器重啟數據可靠性探討進行配置,避免Logtail容器重啟導致采集重復或丟失。
僅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啟動參數,以環境變量為準。 |
|