使用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=https://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: ["https://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.展示效果图: