為防止Logtail消耗過多伺服器資源,影響其他服務運行,Log Service對Logtail採集效能做了限制。當您需要提升Logtail採集效能時,可修改Logtail啟動參數。
設定情境
遇到以下情境時,可修改Logtail啟動參數。
需要採集的記錄檔數目大(同時採集的檔案數超過100個或所監控的目錄下的檔案數超過5000個),佔用大量記憶體。
日誌資料流量大(例如極簡模式下超過2 MB/s,正則模式下超過1 MB/s),導致CPU佔用率高。
Logtail發送資料到Log Service的速率超過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及以上版本,則推薦通過Container Service管理主控台修改,即在組件管理頁面,修改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,表示Log Service將儘可能限制Logtail的CPU使用為CPU單核的40%,超出後Logtail自動重啟。
一般情況下,通過極簡模式採集日誌時,單核處理能力約100 MB/s;通過完整正則模式採集日誌時,單核處理能力約20 MB/s 。
說明如果Logtail部署在阿里雲Kubernetes叢集中,且為Logtail-ds 1.7.3及以上版本,則推薦通過Container Service管理主控台設定CPU使用閾值,即在組件管理頁面,修改logtail-ds組件中的LogtailDSLimitCPU參數。具體操作,請參見管理組件。
"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限制說明。
說明如果Logtail部署在阿里雲Kubernetes叢集中,且為Logtail-ds 1.7.3及以上版本,則推薦通過Container Service管理主控台設定記憶體使用量閾值,即在組件管理頁面,修改logtail-ds組件中的LogtailDSLimitMemory參數。具體操作,請參見管理組件。
"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。
說明如果Logtail部署在阿里雲Kubernetes叢集中,且為Logtail-ds 1.7.3及以上版本,則推薦通過Container Service管理主控台設定流量限制,即在組件管理頁面,修改logtail-ds組件中的LogtailDSMaxBytePerSec參數。具體操作,請參見管理組件。
"max_bytes_per_sec" : 2097152
process_thread_count
int
Logtail處理資料的線程數。 取值如下:
取值範圍:1~64
預設值:1
一般情況下,可以處理極簡模式下24 MB/s的資料寫入或完整正則模式12 MB/s的資料寫入。預設情況下無需調整該參數取值。
說明如果Logtail部署在阿里雲Kubernetes叢集中,且為Logtail-ds 1.7.3及以上版本,則推薦通過Container Service管理主控台設定線程路,即在組件管理頁面,修改logtail-ds組件中的LogtailDSProcessThreadCount參數。具體操作,請參見管理組件。
"process_thread_count" : 1
send_request_concurrency
int
非同步並發的個數。取值如下:
取值範圍:1~50
預設值:20
如果寫入TPS很高,可以設定更高的非同步並發個數。可以按照一個並發支援0.5 MB/s~1 MB/s網路吞吐來計算,實際根據網路延時而定。
說明設定非同步並發個數過高容易導致網路連接埠佔用過多,需調整TCP相關參數。
如果Logtail部署在阿里雲Kubernetes叢集中,且為Logtail-ds 1.7.3及以上版本,則推薦通過Container Service管理主控台設定非同步並發個數,即在組件管理頁面,修改logtail-ds組件中的LogtailDSSendRequestConcurrency參數。具體操作,請參見管理組件。
"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協議傳輸資料到Log Service。
僅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後,日誌時間可自適應伺服器本地時間。
出於資料安全考慮,Log Service會對請求(包括Logtail發起的請求)所攜帶的時間進行校正,拒絕與Log Service端時間相差超過15分鐘的請求。Logtail發起請求時所攜帶的時間為伺服器本地時間,當伺服器本地時間被修改後(例如某些測試情境下需要調整本地時間為未來時間),Logtail請求將被拒絕,導致寫入資料失敗。您可以使用該參數實現日誌時間自適應伺服器本地時間。
僅Linux Logtail 1.0.19及以上版本或Windows Logtail 1.0.19.0及以上版本支援該參數。
重要開啟該功能後,日誌時間將被加上Log Service端的時間與伺服器本地時間的位移量。由於位移量只在請求被Log Service端拒絕時更新,因此可能出現Log Service端所查詢到的日誌的時間和日誌實際的寫入時間不一致的情況。
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對Log Service訪問網域名稱的切換策略。可選值如下:
說明您可以在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啟動參數,以環境變數為準。 |
|