
# 使用CSS Logstash迁移Elasticsearch/OpenSearch的配置文件样例
本文以源端和目的端都是CSS服务的Elasticsearch/OpenSearch集群为例，介绍使用CSS服务的Logstash进行集群迁移的配置文件样例。
#### 查看集群类型
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> Elasticsearch"。
3. 在集群列表，选择源端或目的端Elasticsearch集群，单击集群名称，进入详情页面。
4. 选择"概览"页签，在"网络信息"查看集群是否开启安全模式、是否开启HTTPS访问。如[图1]所示，表示该Elasticsearch集群是使用HTTPS访问的安全集群。
   图1查看集群安全模式   
   ![](https://support.huaweicloud.com/css_faq/figure/zh-cn_image_0000002514975577.png "点击放大")
   表1不同集群类型之间进行数据迁移的Logstash配置文件样例 
   | 迁移场景                   | Logstash配置文件样例                                                                                                      |
   |:---|:---|
   | 非安全集群之间进行数据迁移          | [非安全集群的Logstash配置文件样例]            |
   | 使用HTTP访问的安全集群之间进行数据迁移  | [安全集群（使用HTTP访问）的Logstash配置文件样例]  |
   | 使用HTTPS访问的安全集群之间进行数据迁移 | [安全集群（使用HTTPS访问）的Logstash配置文件样例] |
      
   当源端和目的端集群的安全模式不同时，可以参考本文样例中的input和output模块自由组合出合适的配置文件。
   
 
 #### 非安全集群的Logstash配置文件样例
当源端和目的端的Elasticsearch/OpenSearch集群都是非安全模式时，Logstash配置文件示例：
```
input {
    elasticsearch {
        # 源端集群的节点访问地址，无需添加协议
        hosts => ["xxx.xxx.xxx.xxx:9200", "xxx.xxx.xxx.xxx:9200"]
        # 待迁移的源索引名称
        index => "xxx,xxx"
        docinfo => true
    }
}
filter {
    # 移除一些Logstash事件添加的元数据字段
    mutate {
        remove_field => ["@timestamp", "@version"]
    }
}
output {
    elasticsearch {
        # 目的端集群的节点访问地址，无需添加协议
        hosts => ["xxx.xxx.xxx.xxx:9200", "xxx.xxx.xxx.xxx:9200"]
        # 事件写入的索引配置，以下配置表示保留源数据的索引名称、文档类型和文档id
        index => "%{[@metadata][_index]}"
        document_type => "%{[@metadata][_type]}"
        document_id => "%{[@metadata][_id]}"
    }
}
```
 #### 安全集群（使用HTTP访问）的Logstash配置文件样例
当源端和目的端的Elasticsearch/OpenSearch集群都是安全模式且未启用HTTPS访问时，Logstash配置文件示例：
```
input {
    elasticsearch {
        # 源端集群的节点访问地址，无需添加协议
        hosts => ["xxx.xxx.xxx.xxx:9200", "xxx.xxx.xxx.xxx:9200"]
        # 待迁移的源索引名称
        index => "xxx,xxx"
        docinfo => true
        user => "xxx"           # 访问集群的用户名
        password => "xxx"       # 用户名对应的密码
    }
}
filter {
    # 移除一些Logstash事件添加的元数据字段
    mutate {
        remove_field => ["@timestamp", "@version"]
    }
}
output {
    elasticsearch {
        # 目的端集群的节点访问地址，无需添加协议
        hosts => ["xxx.xxx.xxx.xxx:9200", "xxx.xxx.xxx.xxx:9200"]
        # 事件写入的索引配置，以下配置表示保留源数据的索引名称、文档类型和文档id
        index => "%{[@metadata][_index]}"
        document_type => "%{[@metadata][_type]}"
        document_id => "%{[@metadata][_id]}"
        user => "xxx"           # 访问集群的用户名
        password => "xxx"       # 用户名对应的密码
    }
}
```
 #### 安全集群（使用HTTPS访问）的Logstash配置文件样例
当源端和目的端的Elasticsearch/OpenSearch集群都是安全模式且开启了HTTPS访问时，Logstash配置文件示例：
```
input {
    elasticsearch {
        # 源端集群的节点访问地址，无需添加协议
        hosts => ["xxx.xxx.xxx.xxx:9200", "xxx.xxx.xxx.xxx:9200"]
        # 待迁移的源索引名称
        index => "xxx,xxx"
        docinfo => true
        user => "xxx"           # 访问集群的用户名
        password => "xxx"       # 用户名对应的密码
        ssl => true             # 启用SSL连接
        ca_file => "/opt/logstash/extend/certs"     # 用于认证源端集群的CA证书文件路径
    }
}
filter {
    # 移除一些Logstash事件添加的元数据字段
    mutate {
        remove_field => ["@timestamp", "@version"]
    }
}
output {
    elasticsearch {
        # 目的端集群的节点访问地址，无需添加协议
        hosts => ["xxx.xxx.xxx.xxx:9200", "xxx.xxx.xxx.xxx:9200"]
        # 事件写入的索引配置，以下配置表示保留源数据的索引名称、文档类型和文档id
        index => "%{[@metadata][_index]}"
        document_type => "%{[@metadata][_type]}"
        document_id => "%{[@metadata][_id]}"
        user => "xxx"           # 访问集群的用户名
        password => "xxx"       # 用户名对应的密码
        ssl => true             # 启用SSL连接
        cacert => "/opt/logstash/extend/certs"       # 用于认证目的端集群的CA证书文件路径
        ssl_certificate_verification => false        # 目的端集群是否启用安全证书认证
    }
}
```
