測(cè)試實(shí)戰(zhàn)指南:在 GCP 上搭建 Filebeat → Logstash → Elasticsearch 壓測(cè)環(huán)境并輸出可對(duì)比性能報(bào)告)
數(shù)據(jù)工程后端【免費(fèi)下載鏈接】logstashLogstash - transport and process your logs, events, or other data項(xiàng)目地址https://gitcode.com/gh_mirrors/lo/logstash點(diǎn)擊查看免費(fèi)下載本文圍繞 Logstash 官方倉(cāng)庫(kù).buildkite/scripts/benchmark/目錄下的基準(zhǔn)測(cè)試Benchmark方案展開(kāi)系統(tǒng)講解如何在一臺(tái) GCP 虛擬機(jī)n2-standard-16 Ubuntu上搭建一套「flog 造數(shù) → Filebeat 采集 → Logstash 處理 → Elasticsearch Cloud 存儲(chǔ)與可視化」的完整壓測(cè)鏈路并介紹其核心腳本main.sh/marathon.sh的參數(shù)體系、運(yùn)行機(jī)制與結(jié)果數(shù)據(jù)結(jié)構(gòu)。讀完本文你將掌握如何復(fù)現(xiàn) Logstash 官方 CI 使用的吞吐量EPS基準(zhǔn)測(cè)試環(huán)境如何自由切換隊(duì)列類(lèi)型內(nèi)存隊(duì)列 / 持久化隊(duì)列、worker 數(shù)量與 batch size 組合以及如何把壓測(cè)摘要寫(xiě)入benchmark_summary索引并用 Kibana 儀表盤(pán)進(jìn)行多版本橫向?qū)Ρ取;鶞?zhǔn)測(cè)試方案概覽一次壓測(cè)的完整數(shù)據(jù)鏈路基準(zhǔn)測(cè)試的物理拓?fù)涫恰窮ilebeatdocker→ Logstashdocker→ ES Cloud」即官方 CI 在 Buildkite 上自動(dòng)運(yùn)行的壓測(cè)流程見(jiàn) .buildkite/benchmark_pipeline.yml 中Benchmark Snapshot步驟。整個(gè)鏈路包含三層數(shù)據(jù)生成層使用mingrammer/flog容器生成約 2GB 的日志文件默認(rèn) 4 個(gè)文件、每個(gè) 500MB作為 Filebeat 的讀取源采集與處理層若干個(gè) Filebeat 容器默認(rèn) 4 個(gè)以log類(lèi)型 input 讀取 flog 生成的日志通過(guò)localhost:5044送入 Logstash 容器Logstash 同時(shí)運(yùn)行兩條流水線main 流水線beatsinput →elasticsearchoutput把事件寫(xiě)入數(shù)據(jù)流logs-generic-default承擔(dān)真實(shí)的壓測(cè)負(fù)載node_stats 流水線通過(guò)http_poller每 30 秒拉取一次 Logstash 自身/_node/stats指標(biāo)寫(xiě)入數(shù)據(jù)流metrics-nodestats-logstash用于監(jiān)控壓測(cè)過(guò)程中的資源占用結(jié)果匯總層腳本對(duì)每個(gè)測(cè)試組合聚合吞吐量與資源指標(biāo)生成摘要文檔寫(xiě)入benchmark_summary索引實(shí)際指向benchmark_summary_v2索引最終由 Kibana 儀表盤(pán)展示。這兩條流水線的完整定義位于 .buildkite/scripts/benchmark/config/pipelines.ymlmain 流水線直接使用beats與elasticsearch插件node_stats 流水線在mutatefilter 中為每條監(jiān)控記錄打上[benchmark][label]形如${QTYPE}_w${WORKER}b${BATCH_SIZE}從而在可視化時(shí)區(qū)分不同的測(cè)試組合。第一步創(chuàng)建并初始化 GCP 基準(zhǔn)測(cè)試實(shí)例官方 README 給出了最小化的環(huán)境準(zhǔn)備步驟以下為完整可復(fù)現(xiàn)操作創(chuàng)建虛擬機(jī)機(jī)型n2-standard-1616 vCPU鏡像Ubuntu官方 CI 實(shí)際使用platform-ingest-logstash-ubuntu-2204鏡像族磁盤(pán) 100GB、pd-ssd見(jiàn) .buildkite/benchmark_pipeline.yml安裝 Dockersudo snap install docker sudo usermod -a -G docker $USER安裝后需要重新登錄或執(zhí)行newgrp docker使 docker 組權(quán)限生效。安裝 jq壓測(cè)腳本全程依賴(lài)jq解析 Vault 返回的 JSON 憑據(jù)以及/_node/stats指標(biāo)可用sudo apt install jq或 snap安裝。安裝 Vault 并讀取憑據(jù)腳本通過(guò) HashiCorp Vault 獲取 Elasticsearch 連接憑據(jù)而非把明文寫(xiě)入配置文件sudo snap install vault vault login --method github vault kv get -format json secret/ci/elastic-logstash/benchmarkvault kv get返回的 JSON 中腳本見(jiàn) .buildkite/scripts/benchmark/core.sh 中g(shù)et_secret()會(huì)提取六項(xiàng)憑據(jù)es_host/es_user/es_pw壓測(cè)數(shù)據(jù)寫(xiě)入的目標(biāo) ElasticsearchBENCHMARK_ES_*monitor_es_host/monitor_es_user/monitor_es_pw監(jiān)控指標(biāo)寫(xiě)入的目標(biāo) ElasticsearchMONITOR_ES_*。設(shè)計(jì)上壓測(cè)數(shù)據(jù)與監(jiān)控?cái)?shù)據(jù)可以指向不同的集群這正是為了避免污染共享基準(zhǔn)集群而預(yù)留的能力。第二步初始化 Elasticsearch 索引與別名在 Elasticsearch 中執(zhí)行setup/目錄下兩個(gè)請(qǐng)求文件.buildkite/scripts/benchmark/setup/benchmark_summary_v2 與 .buildkite/scripts/benchmark/setup/alias為benchmark_summary_v2索引創(chuàng)建 mapping覆蓋腳本send_summary()寫(xiě)出的全部字段timestampdate、version、cpu、mem、workers、batch_size、queue_type、total_events_out、max_eps_1m、max_eps_5m、max_worker_utilization、max_worker_concurrency、avg_cpu_percentage、avg_heap、avg_non_heap、avg_virtual_memory、max_queue_events、max_queue_bytes_size以及tags通過(guò)POST /_aliases把別名benchmark_summary掛到benchmark_summary_v2上使腳本以benchmark_summary為索引名的 bulk 寫(xiě)入自動(dòng)落到 v2 索引。mapping 中所有數(shù)值指標(biāo)均附帶keyword子字段便于 Kibana 中做聚合與排序。第三步導(dǎo)入 Kibana 儀表盤(pán)save-objects/benchmark_objects.ndjson.buildkite/scripts/benchmark/save-objects/包含兩類(lèi)可視化資產(chǎn)儀表盤(pán)Dashboardsdaily snapshot、released versions數(shù)據(jù)視圖Data Viewsbenchmark帶有兩個(gè) runtime fieldsversions_numlong把語(yǔ)義化版本號(hào)轉(zhuǎn)換為數(shù)字用于圖表排序releasebooleanversion含 SNAPSHOT 時(shí)為false否則為true用于過(guò)濾已發(fā)布版本與快照版本。導(dǎo)入方式在 Kibana 中進(jìn)入Stack Management Saved Objects點(diǎn)擊Import選擇該 ndjson 文件即可。第四步運(yùn)行基準(zhǔn)測(cè)試腳本環(huán)境就緒后執(zhí)行主腳本# 使用默認(rèn)參數(shù)4 個(gè) Filebeat同時(shí)測(cè)試內(nèi)存隊(duì)列與持久化隊(duì)列 bash .buildkite/scripts/benchmark/main.sh # 指定參數(shù)4 個(gè) Filebeat僅測(cè)內(nèi)存隊(duì)列容器分配 4 CPU / 4GB 內(nèi)存 bash .buildkite/scripts/benchmark/main.sh 4 memory 4 4 # 后臺(tái)長(zhǎng)時(shí)間運(yùn)行并保留日志 nohup bash -x main.sh log.log 21 參數(shù)體系main.sh支持四個(gè)位置參數(shù)源碼見(jiàn) .buildkite/scripts/benchmark/main.sh位置參數(shù)含義默認(rèn)值FB_CNT并發(fā) Filebeat 容器數(shù)4QTYPE隊(duì)列類(lèi)型persisted/memory/all兩者都測(cè)allCPULogstash 容器分配的 CPU 數(shù)4MEMLogstash 容器分配的內(nèi)存GB4同時(shí)支持一批環(huán)境變量精細(xì)控制壓測(cè)矩陣在parse_args()中解析環(huán)境變量含義默認(rèn)值LS_VERSIONLogstash docker tag如8.15.0-SNAPSHOT無(wú)自動(dòng)取 main 分支最新 SNAPSHOTFB_VERSIONFilebeat docker tag8.13.4LS_JAVA_OPTSLogstash JVM 參數(shù)如-Xmx2g-Xmx$(MEM/2)g堆為內(nèi)存一半MULTIPLIERSworker 乘數(shù)列表逗號(hào)分隔實(shí)際 worker CPU × 乘數(shù)1,2,4BATCH_SIZESbatch size 列表逗號(hào)分隔500FLOG_FILE_CNT生成的日志文件數(shù)4VAULT_PATH指向自己 Elasticsearch 憑據(jù)的 Vault 路徑secret/ci/elastic-logstash/benchmarkTAGS附加到摘要文檔的標(biāo)簽逗號(hào)分隔無(wú)main()的執(zhí)行順序?yàn)閜arse_args→get_secret→generate_logs→pull_images→check_logs→create_directory→queue/worker→clean_up。數(shù)據(jù)生成與鏡像拉取日志生成generate_logs()以 detached 模式啟動(dòng) flog 容器-b指定總字節(jié)數(shù)默認(rèn) 4 × 500MB ≈ 2GB-p指定單文件大小輸出到flog/log.logcheck_logs()會(huì)每 30 秒輪詢(xún)一次最長(zhǎng)等待 300 分鐘直到文件生成完畢。鏡像拉取pull_images()若未指定LS_VERSION腳本會(huì)從https://storage.googleapis.com/artifacts-api/snapshots/main.json獲取 main 分支最新的 SNAPSHOT 版本號(hào)與 build_id下載對(duì)應(yīng)的 docker 鏡像 tar 包并docker load實(shí)現(xiàn)「每天自動(dòng)壓測(cè)最新快照」的效果Filebeat 則固定拉取docker.elastic.co/beats/filebeat:$FB_VERSION。Logstash 與 Filebeat 的啟動(dòng)方式start_logstash()會(huì)把 config/logstash.yml、pipelines.yml和uuid復(fù)制到工作目錄隨后以--nethost啟動(dòng)容器并通過(guò)--cpus$CPU、--memory${MEM}g限制資源通過(guò)環(huán)境變量把WORKER、BATCH_SIZE、QTYPE以及兩組 ES 憑據(jù)注入配置模板。logstash.yml中對(duì)應(yīng)的關(guān)鍵配置為api.http.host: 0.0.0.0 pipeline.workers: ${WORKER} pipeline.batch.size: ${BATCH_SIZE} queue.type: ${QTYPE} xpack.monitoring.allow_legacy_collection: true xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.username: ${MONITOR_ES_USER} xpack.monitoring.elasticsearch.password: ${MONITOR_ES_PW} xpack.monitoring.elasticsearch.hosts: [${MONITOR_ES_HOST}]start_filebeat()則為每個(gè)索引fb0..fbN-1啟動(dòng)一個(gè)容器掛載filebeat.yml與 flog 日志目錄。Filebeat 配置.buildkite/scripts/benchmark/config/filebeat.yml要點(diǎn)關(guān)閉自身 HTTP 監(jiān)控http.enabled: false、讀取/usr/share/filebeat/flog/*.log、輸出到localhost:5044并設(shè)置了ttl: 10ms與bulk_max_size: 2048以貼近真實(shí)高吞吐場(chǎng)景。單組合測(cè)試流程與指標(biāo)采集run_pipeline()定義一個(gè)測(cè)試組合的執(zhí)行過(guò)程啟動(dòng) Logstash 與 Filebeat 容器靜置 3 分鐘讓系統(tǒng)進(jìn)入穩(wěn)態(tài)通過(guò)docker exec -i ls curl localhost:9600/_node/statsnode_stats()采集第一份快照之后每 30 秒采集一次共 8 次每次采集后若發(fā)現(xiàn)當(dāng)前輸出吞吐為 0max -g ${CURRENT/./} 0會(huì)打印fb0與ls的 docker 日志輔助排查aggregate_stats()對(duì)同一組合的所有快照求 max/avgsend_summary()組裝摘要 JSON 并 bulk 寫(xiě)入benchmark_summary。capture_stats()采集的指標(biāo)包括flow.output_throughputcurrent / last_1_minute / last_5_minutes、worker_utilization、worker_concurrency、process.cpu.percent、jvm.mem.heap_used_in_bytes與non_heap_used_in_bytes、pipelines.main.queue.events_count與queue_size_in_bytes以及pipelines.main.events.out——這些都是理解 Logstash flow 指標(biāo)與隊(duì)列背壓狀態(tài)的關(guān)鍵字段。組合的窮舉邏輯位于queue()/worker()/batch()當(dāng)QTYPEall時(shí)先遍歷persisted、memory兩種隊(duì)列類(lèi)型對(duì)每種類(lèi)型按MULTIPLIERS計(jì)算 worker 數(shù)WORKER CPU × m對(duì)每個(gè) worker 再遍歷BATCH_SIZES。例如main.sh 4 all 4 4默認(rèn)會(huì)跑 2 隊(duì)列 × 3 worker 檔4/8/16× 1 個(gè) batch size 6 個(gè)組合每個(gè)組合約 7 分鐘。每次組合結(jié)束后stop_pipeline()會(huì)刪除容器并清理數(shù)據(jù)流logs-generic-default保證各組合起始狀態(tài)一致。第五步多版本校準(zhǔn)marathon.sh當(dāng)更換硬件或需要建立不同版本間的性能基線時(shí)使用marathon.sh.buildkite/scripts/benchmark/marathon.shnohup bash -x all.sh log.log 21 它通過(guò)環(huán)境變量STACK_VERSIONS逗號(hào)分隔版本列表默認(rèn)覆蓋8.9.0至9.0.0的多個(gè)歷史版本依次對(duì)每個(gè)版本執(zhí)行完整的queue/worker組合測(cè)試其文檔注釋明確說(shuō)明當(dāng)硬件變化時(shí)運(yùn)行 marathon 任務(wù)以建立新的基線。默認(rèn)版本列表會(huì)隨倉(cāng)庫(kù)更新實(shí)際值以腳本為準(zhǔn)。它復(fù)用了core.sh的全部邏輯因此同樣支持FB_CNT、QTYPE、CPU、MEM等參數(shù)。版本差異與注意事項(xiàng)README 明確列出三條重要的使用前提與限制僅可在相同硬件配置下橫向?qū)Ρ然鶞?zhǔn)測(cè)試結(jié)果受 CPU、內(nèi)存、磁盤(pán)類(lèi)型影響極大不同機(jī)器上的 EPS 絕對(duì)值不具備可比性基準(zhǔn)對(duì)比必須限定同一硬件環(huán)境不要把測(cè)試數(shù)據(jù)寫(xiě)入共享基準(zhǔn)集群默認(rèn)VAULT_PATHsecret/ci/elastic-logstash/benchmark指向共享的基準(zhǔn)集群。自行壓測(cè)時(shí)應(yīng)把VAULT_PATH指向自己的 Vault 路徑如secret/ci/elastic-logstash/your/path讓壓測(cè)數(shù)據(jù)與監(jiān)控指標(biāo)都發(fā)送到自有 Elasticsearch避免污染共享集群的對(duì)比數(shù)據(jù)版本 8 與舊監(jiān)控配置的兼容性logstash.yml中xpack.monitoring.allow_legacy_collection: true是 8.x 版本不認(rèn)識(shí)的配置。core.sh中的remove_v9_config()會(huì)在 Logstash 主版本小于 9 時(shí)自動(dòng)從logstash.yml中刪除該行而要在 8.x 上跑基準(zhǔn)測(cè)試應(yīng)當(dāng)使用對(duì)應(yīng)分支如8.16的腳本而不是main分支的腳本相關(guān)變更見(jiàn)倉(cāng)庫(kù) PR 記錄。結(jié)果數(shù)據(jù)的解讀與可視化每次組合的摘要文檔包含運(yùn)行環(huán)境標(biāo)識(shí)version/cpu/mem/workers/batch_size/queue_type/tags與性能指標(biāo)max_eps_1m、max_eps_5m、max_worker_utilization、max_worker_concurrency、avg_cpu_percentage、avg_heap、avg_non_heap、avg_virtual_memory、max_queue_events、max_queue_bytes_size、total_events_out。借助 Kibana 數(shù)據(jù)視圖的 runtime fieldsversions_num用于版本排序、release用于區(qū)分發(fā)布版與快照版即可在「daily snapshot」與「released versions」儀表盤(pán)上觀察各版本、各隊(duì)列類(lèi)型、各 worker/batch 組合下的吞吐與資源消耗曲線從而做出容量規(guī)劃與回歸判斷。上述完整配置與腳本均位于 .buildkite/scripts/benchmark/ 目錄包括main.sh、core.sh、marathon.sh、util.sh及config/、setup/、save-objects/子目錄可直接作為自建 Logstash 性能壓測(cè)體系的設(shè)計(jì)藍(lán)本。贊分享數(shù)據(jù)工程后端【免費(fèi)下載鏈接】logstashLogstash - transport and process your logs, events, or other data項(xiàng)目地址https://gitcode.com/gh_mirrors/lo/logstash點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Fluent Bit性能基準(zhǔn)測(cè)試與Vector、Filebeat性能對(duì)比Fluent Bit性能基準(zhǔn)測(cè)試與Vector、Filebeat性能對(duì)比 在現(xiàn)代日志處理架構(gòu)中選擇一款高性能的日志收集器對(duì)系統(tǒng)穩(wěn)定性和運(yùn)維效率至關(guān)重要。Fl可觀測(cè)性云原生實(shí)時(shí)日志監(jiān)控告警管道實(shí)踐Pathway 對(duì)接 Filebeat/Logstash、Kafka 與 ElasticSearch實(shí)時(shí)日志監(jiān)控告警管道實(shí)踐Pathway 對(duì)接 Filebeat/Logstash、Kafka 與 ElasticSearch 本文基于倉(cāng)庫(kù)中的端到端示例項(xiàng)目后端流處理實(shí)時(shí)分析數(shù)據(jù)工程人工智能RAG三步打造你的專(zhuān)業(yè)音樂(lè)播放器foobox美化方案全攻略三步打造你的專(zhuān)業(yè)音樂(lè)播放器foobox美化方案全攻略 還在為foobar2000單調(diào)的界面而煩惱嗎你是否希望音樂(lè)播放器既有專(zhuān)業(yè)音質(zhì)又有美觀界面foobox桌面應(yīng)用音視頻創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考