使用OpenSearch、自建Filebeat和Dashboards構建網絡撥測功能
更新時間 2025-05-30 16:57:56
最近更新時間: 2025-05-30 16:57:56
分享文章
本文為您介紹如何通過OpenSearch、自建Filebeat和Dashboards建設網絡撥測功能。
使用Opensearch、Filebeat和Dashboard實例搭建撥測功能與數據展示大盤,可以實時地、統一地、方便一鍵查看多個天翼云多可用區之間或地域之間的網絡平均時延。這些數據可以為用戶在搭建服務時選擇更適合的地域或可用區。
應用場景
本文以OpenSearch、Filebeat和Dashboards為例,搭建一個撥測功能及結果數據的展示大盤。使用Filebeat采集探測機器探測的網絡數據,發送到kafka進行多個探測節點的數據匯聚以后存儲到OpenSearch中,最后通過Dashboards進行數據的可視化展示。該方案可以用于以下場景:
- 客戶部署業務的服務區選擇:云下各地域訪問阿里云地域的平均時延。您可以參考性能觀測數據,在搭建服務時選擇更適合的地域或可用區。
- 客戶物理鏈路的選擇:查看跨地域連接物理鏈路的時延情況,以便您選擇更適合您業務的鏈路類型。
方案架構
OpenSearch 是一款開源的分布式搜索和分析套件,衍生自 Elasticsearch OSS 7.10.2。可提供輕松執行交互式日志分析、實時應用程序監控、和數據分析等基礎能力。
Filebeat歸屬于Beats家族,使用go語言開發,是一個輕量的日志收集器,因為輕量所以適用于部署在需要收集日志的服務器中
Dashboards為OpenSearch提供一個開源的數據分析和可視化平臺,用于對Elasticsearch中的數據進行搜索、查看和交互。
方案優勢
- 實時性:提供實時數據收集和分析能力。
- 輕量級:對系統資源的消耗非常低。它設計用于高性能和低延遲,可以一鍵部署在虛擬機環境。
- 省時省力:無需額外開發數據展示界面,簡化研發工作量。
- 可擴展:水平擴展能力強,可以處理PB級別的數據。
前提條件
- 已開通OpenSearch集群,操作步驟請參見創建OpenSearch實例。
- 已申請天翼云彈性云服務器ECS,并安裝了Filebeat環境,購買ECS請參見快速購買和使用Linux ECS。
操作步驟
- 登錄各數據采集節點的ECS,部署并配置Filebeat。
a. 下載filebeat-8.12.2-linux-x86_64。
b. 解壓壓縮包到指定路徑:
tar -xvzf /opt/filebeat/filebeat-8.12.2-linux-x86_64.tar.gz -C /opt/filebeat/
c. 配置filebeat.yml:
filebeat.inputs:
- type: filestream
id: icmp-id
enabled: true
paths:
- /opt/moose_ping/output/result/icmp_*.log
fields:
kafka_topic: "icmp-probe"
- type: filestream
id: http-id
enabled: true
paths:
- /opt/moose_ping/output/result/http_*.log
fields:
kafka_topic: "http-probe"
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
reload.period: 10s
output.kafka:
enabled: true
hosts: ["kafka機器ip:kafka端口"]
codec.format:
string: '%{[message]}'
topic: "%{[fields.kafka_topic]}"
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
logging.level: warning
d.配置systemd服務:
echo "Creating filebeat.service systemd service file..."
cat <<\EOF | sudo tee /etc/systemd/system/filebeat.service
[Unit]
Description=Filebeat is a lightweight shipper for metrics.
Documentation=//www.elastic.co/products/beats/filebeat
Wants=network-online.target
After=network-online.target
[Service]
Environment="LOG_OPTS=-e"
Environment="CONFIG_OPTS=-c /opt/filebeat/filebeat-8.12.2-linux-x86_64/filebeat.yml"
Environment="PATH_OPTS=-path.home /opt/filebeat/filebeat-8.12.2-linux-x86_64/filebeat -path.config /opt/filebeat/filebeat-8.12.2-linux-x86_64 -path.data /opt/filebeat/filebeat-8.12.2-linux-x86_64/data -path.logs /opt/filebeat/filebeat-8.12.2-linux-x86_64/logs"
ExecStart=/opt/filebeat/filebeat-8.12.2-linux-x86_64/filebeat $LOG_OPTS $CONFIG_OPTS $PATH_OPTS
Restart=always
[Install]
WantedBy=multi-user.target
EOF
echo "filebeat.service systemd service file created."
# 給予 systemd 服務文件可執行權限
sudo chmod +x /etc/systemd/system/filebeat.service
# 啟用并啟動 Filebeat 服務
echo "Enabling and starting Filebeat service..."
sudo systemctl daemon-reload
sudo systemctl enable filebeat
sudo systemctl start filebeat
echo "Filebeat service has been started."
# 輸出 Filebeat 的進程狀態
echo "Filebeat service status:"
sudo systemctl status filebeat | cat
- 登錄數據歸集節點的ECS并部署Filebeat(與步驟2部署方式相同)數據歸集節點Filebeat.yml:
filebeat.inputs:
- type: kafka
enabled: true
hosts:
- kafka機器ip:kafka端口
topics: ["icmp-probe"]
group_id: "filebeat-icmp-probe-opensearch-test"
worker: 6
fields:
type: "icmp"
- type: kafka
enables: true
hosts:
- kafka機器ip:kafka端口
topics: ["http-probe"]
group_id: "filebeat-http-probe-opensearch-test"
fields:
type: "http"
filebeat.config.modules:
enabled: false
path: /opt/filebeat/filebeat-8.12.2-linux-x86_64/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
processors:
- decode_json_fields:
fields: ["message"]
overwrite_keys: true
target: ""
- drop_fields:
when:
equals:
fields.type: "icmp"
fields: ["log","ecs","agent","host","input","kafka","Total","SourceIP","RemoteIP","JobId","message","Rtts ms"]
ignore_missing: true
- drop_fields:
when:
equals:
fields.type: "http"
fields: ["log","ecs","agent","host","input","kafka","message","JobId","SourceIP","HttpUrl"]
ignore_missing: true
output.elasticsearch:
enabled: true
hosts: ["//OpenSearch機器ip:OpenSearch端口"]
username: "OpenSearch用戶名"
password: "OpenSearch密碼"
ssl.verification_mode: none
worker: 6
indices:
- index: "icmp-index-%{+yyyy-MM-dd}"
when.contains:
fields:
type: "icmp"
- index: "http-index-%{+yyyy-MM-dd}"
when.contains:
fields:
type: "http"
logging.level: info
seccomp:
default_action: allow
syscalls:
- action: allow
names:
- rseq
- 配置OpenSearch:
a. 查看是否數據成功投遞到了OpenSearch中。
b. 創建Visualization需要用到的index-pattern。
- 配置Visualization:
a.創建Visualization:
b.配置橫縱坐標。
c.展示效果圖: