使用自建Logstash导入数据
企业用户通常拥有大量的业务日志(如JSON、CSV等格式)分散存储在本地服务器或其他云平台,为了方便管理,需要将这些数据汇聚到CSS服务的OpenSearch集群中进行集中检索与分析。然而,出于安全考虑,CSS集群通常部署在私有网络(VPC)内,导致外部数据源无法直接写入。本文提供基于开源Logstash的数据导入方案,针对同VPC内网环境和外部公网环境,帮助用户打破网络隔离,安全高效地完成数据导入。
方案介绍
Logstash是开源的服务器端数据处理管道,能够同时从多个来源采集数据,进行转换处理,然后发送到CSS集群。Logstash的详细介绍请参见官方文档Getting started with Logstash。
根据Logstash服务器部署位置的不同,分为以下两种网络架构:
前提条件
- 环境依赖:确认服务器已安装JDK 1.8或以上版本。推荐使用Linux操作系统的服务器。
- 下载Logstash:确认Logstash使用的是OSS版本(纯开源版),推荐使用Logstash OSS 7.10.2。
Logstash OSS下载地址:https://www.elastic.co/downloads/past-releases?product=logstash-oss
- 已准备好数据源和目的端集群的连接信息,包括IP地址、端口号、账号密码等。
- 准备待导入的数据。 例如在部署Logstash服务器的“/tmp/access_log/”路径下存储了需要导入的数据文件“access_20181029.log”。数据示例如下:
| All | Heap used for segments | | 18.6403 | MB | | All | Heap used for doc values | | 0.119289 | MB | | All | Heap used for terms | | 17.4095 | MB | | All | Heap used for norms | | 0.0767822 | MB | | All | Heap used for points | | 0.225246 | MB | | All | Heap used for stored fields | | 0.809448 | MB | | All | Segment count | | 101 | | | All | Min Throughput | index-append | 66232.6 | docs/s | | All | Median Throughput | index-append | 66735.3 | docs/s | | All | Max Throughput | index-append | 67745.6 | docs/s | | All | 50th percentile latency | index-append | 510.261 | ms |
场景一:Logstash部署内网时导入数据
- 准备网络。确保ECS与CSS集群在同一VPC,且安全组放通9200端口。
- 在ECS上安装Logstash。下面提供了Linux Red Hat操作系统的安装指导,其他方案请参见官方文档Installing Logstash。
- 使用yum安装JDK。由于Logstash依赖Java,需要先安装JDK。
yum install java //替换为实际JDK版本名称
- 将下载的Logstash上传至ECS。
- 使用yum安装Logstash。
yum install logstash-oss-7.10.0-x86_64.rpm
其中“logstash-oss-7.10.0-x86_64.rpm”替换成实际Logstash安装包名称。
- 使用yum安装JDK。由于Logstash依赖Java,需要先安装JDK。
- (可选)准备证书。当数据导入的CSS集群开启了安全模式和HTTPS协议,则需要将安全证书上传到ECS。
- 获取安全证书。
- 将下载的安全证书上传到ECS。
- 在Logstash的安装目录下新建配置文件。
- 新建配置文件,如“logstash-simple.conf”。
cd /logstash-x.x/ # 进入Logstash的安装目录 vi logstash-simple.conf # 新建配置文件
- 输入配置文件内容定义Input、Filter、Output逻辑。
input { # 读取本地数据文件 file { path => "/tmp/access_log/*.log" # 数据文件路径 start_position => "beginning" # 读取起始位置 } } filter { # 在此添加数据过滤逻辑,如 grok, mutate等 } output { elasticsearch { # 填写集群内网地址,多节点集群建议填多个节点实现负载均衡 hosts => ["192.168.xxx.xxx:9200", "192.168.xxx.xxx:9200"] # 事件写入的索引名称 index => "my_import_index" # 安全模式配置 (非安全模式请删除以下配置) # user => "username" # CSS集群账号 # password => "password" # CSS集群密码 # ssl => true # 是否启用SSL连接 # ssl_certificate_verification => false # 是否启用证书认证 # cacert => "/logstash/config/CloudSearchService.cer" # 安全证书绝对路径 # 避免兼容性问题的常用参数 ilm_enabled => false # 禁用索引生命周期管理(避免权限报错) manage_template => false # 禁用模板管理 } } - 配置完成后,输入“:wq”保存配置文件。
- 新建配置文件,如“logstash-simple.conf”。
- 执行配置文件,导入数据到CSS集群。
./bin/logstash -f logstash-simple.conf # 替换为配置文件名称
当返回类似“Successfully started Logstash API endpoint”且无报错信息时,表示任务正在运行。
- 数据导入后,验证数据完整性。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > OpenSearch”。
- 在集群列表,选择目标集群,单击操作列的“Dashboards”,登录OpenSearch Dashboards。
- 在OpenSearch Dashboards左侧导航栏选择“Dev Tools”,进入操作页面。
控制台左侧是命令输入框,其右侧的三角形图标为执行按钮,右侧区域则显示执行结果。
- 执行如下命令,搜索导入的索引数据。
GET my_import_index/_count # 查看数据量 GET my_import_index/_search # 查看数据内容
如果返回的数据内容与源文件一致,则表示导入成功。
场景二:Logstash部署在外网时导入数据
- 准备跳转主机。在CSS集群所在VPC下,准备一台绑定了EIP的Linux ECS,并开放本地端口(如9100)。
- 建立SSH隧道。
- 在跳转主机上建立端口映射,将发往跳转主机对外开放端口的请求转发到待导入数据的集群中。
ssh -g -L <跳转主机本地端口>:<CSS节点内网IP>:9200 -N -f root@<跳转主机私网IP>
例如,跳转主机对外开放的本地端口为9100,CSS节点内网IP为192.168.0.81,跳转主机私网IP为192.168.0.227,则端口映射命令如下:
ssh -g -L 9100:192.168.0.81:9200 -N -f root@192.168.0.227
当CSS内网访问节点出现故障时,会导致命令执行失败,如果集群包含多个节点,可以将<CSS节点内网IP>替换为另一个节点的IP地址,如果集群只有一个节点,则需要等待节点修复之后再进行端口映射。
关于SSH隧道的详细配置说明请参见SSH官方文档。
- 验证连通性。
curl http://<跳转主机公网IP>:<跳转主机本地端口>
如果返回OpenSearch版本信息,说明隧道建立成功。后续配置Logstash配置文件时,hosts地址填写<跳转主机公网IP>:<跳转主机本地端口>。
- 在跳转主机上建立端口映射,将发往跳转主机对外开放端口的请求转发到待导入数据的集群中。
- (可选)在外网服务器安装Logstash。下面提供了Linux Red Hat操作系统的安装指导。
- 使用yum安装JDK。由于Logstash依赖Java,需要先安装JDK。
yum install java //替换为实际JDK版本名称
- 将下载的Logstash上传至ECS。
- 使用yum安装Logstash。
yum install logstash-oss-7.10.0-x86_64.rpm
其中“logstash-oss-7.10.0-x86_64.rpm”替换成实际Logstash安装包名称。
- 使用yum安装JDK。由于Logstash依赖Java,需要先安装JDK。
- (可选)准备证书。当数据导入的CSS集群开启了安全模式和HTTPS协议,则需要将安全证书上传到ECS。
- 获取安全证书。
- 将下载的安全证书上传到ECS。
- 在Logstash的安装目录下新建配置文件。
- 新建配置文件,如“logstash-simple.conf”。
cd /logstash-x.x/ # 进入Logstash的安装目录 vi logstash-simple.conf # 新建配置文件
- 输入配置文件内容定义Input、Filter、Output逻辑。
input { # 读取本地数据文件 file { path => "/tmp/access_log/*.log" # 数据文件路径 start_position => "beginning" # 读取起始位置 } } filter { # 在此添加数据过滤逻辑,如 grok, mutate等 } output { elasticsearch { # 填写建立隧道的本地地址 hosts => ["<跳转主机公网IP>:<跳转主机本地端口>"] # 事件写入的索引名称 index => "my_import_index" # 安全模式配置 (非安全模式请删除以下配置) # user => "username" # CSS集群账号 # password => "password" # CSS集群密码 # ssl => true # 是否启用SSL连接 # ssl_certificate_verification => false # 是否启用证书认证 # cacert => "/logstash/config/CloudSearchService.cer" # 安全证书绝对路径 # 避免兼容性问题的常用参数 ilm_enabled => false # 禁用索引生命周期管理(避免权限报错) manage_template => false # 禁用模板管理 } } - 配置完成后,输入“:wq”保存配置文件。
- 新建配置文件,如“logstash-simple.conf”。
- 执行配置文件,导入数据到CSS集群。
./bin/logstash -f logstash-simple.conf # 替换为配置文件名称
当返回类似“Successfully started Logstash API endpoint”且无报错信息时,表示任务正在运行。
- 数据导入后,验证数据完整性。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > OpenSearch”。
- 在集群列表,选择目标集群,单击操作列的“Dashboards”,登录OpenSearch Dashboards。
- 在OpenSearch Dashboards左侧导航栏选择“Dev Tools”,进入操作页面。
控制台左侧是命令输入框,其右侧的三角形图标为执行按钮,右侧区域则显示执行结果。
- 执行如下命令,搜索导入的索引数据。
GET my_import_index/_count # 查看数据量 GET my_import_index/_search # 查看数据内容
如果返回的数据内容与源文件一致,则表示导入成功。
获取安全证书
当接入安全模式+HTTPS协议的OpenSearch集群时,如需加载安全证书,则可以参考如下步骤获取安全证书(CloudSearchService.cer)。
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > OpenSearch”。
- 在集群列表,单击目标集群名称,进入集群详情页。
- 选择“概览”页签,在“网络信息”下方,单击“HTTPS访问”的“下载证书”获取安全证书。 图3 下载安全证书

