文档首页/ 云搜索服务 CSS/ 用户指南/ OpenSearch/ 数据导入/ 使用自建Logstash导入数据
更新时间:2026-04-24 GMT+08:00
分享

使用自建Logstash导入数据

企业用户通常拥有大量的业务日志(如JSON、CSV等格式)分散存储在本地服务器或其他云平台,为了方便管理,需要将这些数据汇聚到CSS服务的OpenSearch集群中进行集中检索与分析。然而,出于安全考虑,CSS集群通常部署在私有网络(VPC)内,导致外部数据源无法直接写入。本文提供基于开源Logstash的数据导入方案,针对同VPC内网环境和外部公网环境,帮助用户打破网络隔离,安全高效地完成数据导入。

方案介绍

Logstash是开源的服务器端数据处理管道,能够同时从多个来源采集数据,进行转换处理,然后发送到CSS集群。Logstash的详细介绍请参见官方文档Getting started with Logstash

根据Logstash服务器部署位置的不同,分为以下两种网络架构:

  • 网络架构一:内网直连(推荐)

    Logstash部署在与CSS集群同一VPC的弹性云服务器(ECS)上。

    特点:速度快,配置简单,安全性高。

    图1 Logstash部署在内网的架构图
  • 网络架构二:公网通过SSH隧道访问

    Logstash部署在本地数据中心或外网服务器,无法直接访问VPC内的CSS集群。需要通过一台绑定了公网IP的ECS作为跳转主机。需要利用SSH的端口转发功能,将本地Logstash的流量转发到云上集群。

    特点:适合本地数据上云,需配置端口转发。
    图2 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部署内网时导入数据

  1. 准备网络。确保ECS与CSS集群在同一VPC,且安全组放通9200端口。

    在部署Logstash的ECS上ping CSS集群的内网地址,能正常访问则表示网络连通。

  2. 在ECS上安装Logstash。下面提供了Linux Red Hat操作系统的安装指导,其他方案请参见官方文档Installing Logstash
    1. 使用yum安装JDK。由于Logstash依赖Java,需要先安装JDK。
      yum install java  //替换为实际JDK版本名称
    2. 将下载的Logstash上传至ECS。
    3. 使用yum安装Logstash。
      yum install logstash-oss-7.10.0-x86_64.rpm

      其中“logstash-oss-7.10.0-x86_64.rpm”替换成实际Logstash安装包名称。

    1. 修改Logstash的jvm配置,提升集群数据的迁移效率。

      Logstash默认的堆内存是1G,建议修改为集群节点内存的一半。

      vim /etc/logstash/jvm.options
      -Xms4g
      -Xmx4g
  3. (可选)准备证书。当数据导入的CSS集群开启了安全模式和HTTPS协议,则需要将安全证书上传到ECS。
    1. 获取安全证书
    2. 将下载的安全证书上传到ECS。
  4. 在Logstash的安装目录下新建配置文件。
    1. 新建配置文件,如“logstash-simple.conf”
      cd /logstash-x.x/ # 进入Logstash的安装目录
      vi logstash-simple.conf	 # 新建配置文件
    2. 输入配置文件内容定义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         # 禁用模板管理
          }
      }
    3. 配置完成后,输入“:wq”保存配置文件。
  5. 执行配置文件,导入数据到CSS集群。
    ./bin/logstash -f logstash-simple.conf	 # 替换为配置文件名称

    当返回类似“Successfully started Logstash API endpoint”且无报错信息时,表示任务正在运行。

  6. 数据导入后,验证数据完整性。
    1. 登录云搜索服务管理控制台
    2. 在左侧导航栏,选择“集群管理 > OpenSearch”
    3. 在集群列表,选择目标集群,单击操作列的“Dashboards”,登录OpenSearch Dashboards。
    4. 在OpenSearch Dashboards左侧导航栏选择“Dev Tools”,进入操作页面。

      控制台左侧是命令输入框,其右侧的三角形图标为执行按钮,右侧区域则显示执行结果。

    5. 执行如下命令,搜索导入的索引数据。
      GET my_import_index/_count         # 查看数据量
      GET my_import_index/_search        # 查看数据内容

      如果返回的数据内容与源文件一致,则表示导入成功。

场景二:Logstash部署在外网时导入数据

  1. 准备跳转主机。在CSS集群所在VPC下,准备一台绑定了EIP的Linux ECS,并开放本地端口(如9100)。
  2. 建立SSH隧道。
    1. 在跳转主机上建立端口映射,将发往跳转主机对外开放端口的请求转发到待导入数据的集群中。
      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官方文档

    2. 验证连通性。
      curl http://<跳转主机公网IP>:<跳转主机本地端口>

      如果返回OpenSearch版本信息,说明隧道建立成功。后续配置Logstash配置文件时,hosts地址填写<跳转主机公网IP>:<跳转主机本地端口>。

  3. (可选)在外网服务器安装Logstash。下面提供了Linux Red Hat操作系统的安装指导。
    1. 使用yum安装JDK。由于Logstash依赖Java,需要先安装JDK。
      yum install java //替换为实际JDK版本名称
    2. 将下载的Logstash上传至ECS。
    3. 使用yum安装Logstash。
      yum install logstash-oss-7.10.0-x86_64.rpm

      其中“logstash-oss-7.10.0-x86_64.rpm”替换成实际Logstash安装包名称。

    1. 修改Logstash的jvm配置,提升集群数据的迁移效率。

      Logstash默认的堆内存是1G,建议修改为集群节点内存的一半。

      vim /etc/logstash/jvm.options
      -Xms4g
      -Xmx4g
  4. (可选)准备证书。当数据导入的CSS集群开启了安全模式和HTTPS协议,则需要将安全证书上传到ECS。
    1. 获取安全证书
    2. 将下载的安全证书上传到ECS。
  5. 在Logstash的安装目录下新建配置文件。
    1. 新建配置文件,如“logstash-simple.conf”
      cd /logstash-x.x/ # 进入Logstash的安装目录
      vi logstash-simple.conf	 # 新建配置文件
    2. 输入配置文件内容定义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         # 禁用模板管理
          }
      }
    3. 配置完成后,输入“:wq”保存配置文件。
  6. 执行配置文件,导入数据到CSS集群。
    ./bin/logstash -f logstash-simple.conf	 # 替换为配置文件名称

    当返回类似“Successfully started Logstash API endpoint”且无报错信息时,表示任务正在运行。

  7. 数据导入后,验证数据完整性。
    1. 登录云搜索服务管理控制台
    2. 在左侧导航栏,选择“集群管理 > OpenSearch”
    3. 在集群列表,选择目标集群,单击操作列的“Dashboards”,登录OpenSearch Dashboards。
    4. 在OpenSearch Dashboards左侧导航栏选择“Dev Tools”,进入操作页面。

      控制台左侧是命令输入框,其右侧的三角形图标为执行按钮,右侧区域则显示执行结果。

    5. 执行如下命令,搜索导入的索引数据。
      GET my_import_index/_count         # 查看数据量
      GET my_import_index/_search        # 查看数据内容

      如果返回的数据内容与源文件一致,则表示导入成功。

获取安全证书

当接入安全模式+HTTPS协议的OpenSearch集群时,如需加载安全证书,则可以参考如下步骤获取安全证书(CloudSearchService.cer)。

  1. 登录云搜索服务管理控制台
  2. 在左侧导航栏,选择“集群管理 > OpenSearch”
  3. 在集群列表,单击目标集群名称,进入集群详情页。
  4. 选择“概览”页签,在“网络信息”下方,单击“HTTPS访问”“下载证书”获取安全证书。
    图3 下载安全证书

相关文档