Logstash是一个开源的数据收集引擎,具有实时传输数据的能力。它可以统一过滤来自不同源的数据,并按照您制定的规范将过滤的数据输出到目标源中。本文档为您介绍在ECS上部署Logstash的方法,并通过一个简单的示例为您演示Logstash迁移数据到阿里云Elasticsearch(简称ES)中的方法。

准备工作

在部署并使用Logstash前,您需要创建并配置阿里云Elasticsearch和阿里云ECS实例。

创建并配置阿里云Elasticsearch
  1. 创建阿里云Elasticsearch实例

    本文以6.7.0版本为例,配置如下。

    ES配置
  2. 在阿里云Elasticsearch控制台中,开启自动创建索引功能
  3. 在阿里云Elasticsearch实例的Kibana控制台中,添加具有logstash-*读写权限的角色。
    1. 登录Kibana控制台
    2. 单击Management > Roles > Create role
      Create Role页面
    3. Create role页面,输入相关参数配置。
      Create role参数
      参数 说明
      Role name 角色名称,自定义输入。
      Indices 选择对应的索引文件。需要输入logstash-*
      Privileges 为角色分配索引权限。需要添加read、write、creat、delete以及create_index权限。
      Granted fields 授权的字段。可选,本文使用*
    4. 单击Create role,完成创建。
创建并配置阿里云ECS
  1. 创建ECS实例,要求该ECS能够同时访问自建集群和阿里云Elasticsearch(已符合条件的ECS不需要重复购买)。

    本文使用的ECS配置如下。

    ECS配置
    说明 建议您购买与阿里云Elasticsearch在同一可用区、同一VPC下的ECS实例。您也可以购买经典网络的ECS实例,前提是该ECS实例能够通过经典网络访问VPC内的阿里云Elasticsearch(简称ES)服务。
  2. 在ECS实例中安装JDK,要求JDK版本为1.8及以上版本。

    安装方式请参见安装JDK

安装Logstash

  1. 下载6.7.0版本的Logstash。
    Elastic官网中,下载与您购买的阿里云ES版本一致的Logstash(建议下载6.7.0版本)。
    wget https://artifacts.elastic.co/downloads/logstash/logstash-6.7.0.tar.gz
  2. 对下载的Logstash压缩包进行解压缩。
    tar -xzvf logstash-6.7.0.tar.gz

使用Logstash同步增量数据

  1. 连接ECS实例,切换到Logstash目录。
    cd logstash-6.7.0
  2. 创建conf文件。
    touch test.conf
  3. 配置test.conf文件,示例如下。
    input {
        file {
            path => "/your/file/path/xxx"
            }
    }
    filter {
    }
    output {
      elasticsearch {
        hosts => ["http://instanceId.elasticsearch.aliyuncs.com:9200"]
        user => "user-name"
        password => "logstash-password"
      }
    }
    参数 说明
    path 日志文件的路径。本文以/var/log/meaasges为例。
    hosts 阿里云ES实例的访问地址。instanceId为实例ID,可在实例的基本信息页面获取。例如:http://es-cn-45xxxxxxxxxxxxju.elasticsearch.aliyuncs.com:9200
    user 访问阿里云ES实例的账号,默认为elastic。如果需使用自建用户,需要给予自建用户分配相应的角色和权限,详情请参见创建用户创建角色
    注意 用户名需要使用英文引号,防止在启动Logstash时,因为特殊字符报错。
    password 访问阿里云ES实例的密码,在创建实例时设定,您也可以修改密码。
    注意 密码需要使用英文引号,防止在启动Logstash时,因为特殊字符报错。

    Logstash提供了丰富的input、filter、output插件,只需要简单的配置就可是实现数据的流转,详情请参见官方配置文件结构文档。

  4. 执行logstash命令。
    按照上一步中配置的conf文件,执行logstash命令。
    bin/logstash -f test.conf

    命令执行成功后,系统会自动通过Logstash获取日志文件的变化,并提交到Elasticsearch集群。只要监控的日志文件有新增内容,Logstash就会自动索引到Elasticsearch集群中。

  5. 结果验证。

    在进行结果验证前,您需要首先创建一个角色,该角色需要拥有操作logstash-*索引的权限,包括read、write、creat、delete以及create_index。详情请参见创建角色

    1. 登录Elasticsearch实例的Kibana控制台
    2. 单击左侧导航栏的Dev Tools
    3. Dev Tools页面的Console中,执行以下命令。
      GET /logstash-*/_search

      运行成功后,结果如下。

      验证成功结果

监控Logstash节点

您可以通过以下步骤监控Logstash节点,并收集监控日志。
  1. 进入Logstash安装目录的config文件中。
    cd /logstash-6.7.0/config
  2. 配置logstash.yml文件。

    打开logstash.yml文件。

    vim logstash.yml

    在logstash.yml文件中,去掉以下几个参数的注释,并配置参数值。

    配置xpack监控
    参数 说明
    xpack.monitoring.enable 默认为false,需要设置为true
    xpack.monitoring.elasticsearch.username 您创建的Logstash监控用户,详情请参见创建用户
    注意 您也可以使用elastic用户,但实际业务中不建议您使用elastic用户,这样会降低系统安全性。
    xpack.monitoring.elasticsearch.password Logstash监控用户的密码。
    xpack.monitoring.elasticsearch.hosts 阿里云Elasticsearch实例的连接。例如:http://es-cn-45xxxxxxxxxxxxju.elasticsearch.aliyuncs.com:9200
  3. 返回Logstash安装目录,启动Logstash服务。
    cd ../
    bin/logstash -f test.conf

    启动成功后,结果如下。

    Logstash服务启动成功
  4. 在阿里云ES的Kibana控制台中,单击Monitoring,查看Logstash监控信息。
    查看Logstash监控信息

创建用户

本章节以创建监控Logstash服务的用户为例,分别为您介绍通过命令和通过Kibana控制台两种方式,创建用户的方法。
注意 阿里云Elasticsearch集群默认会禁掉logstash_system用户,因此您需要创建一个角色为logstash_system的用户名(用户名不可以配置为logstash_system)。

通过命令行方式添加用户

连接ECS实例,通过以下命令添加用户。
curl -u elastic:es-password -XPOST http://instanceId.elasticsearch.aliyuncs.com:9200/_xpack/security/user/logstash_system_monitor -d '{"password" : "logstash-monitor-password","roles" : ["logstash_system"],"full_name" : "your full name"}'
参数 说明
es-password 阿里云Elasticsearch实例的密码,即您登录Kibana控制台的密码。
instanceId 阿里云Elasticsearch实例的ID,可在实例的基本信息页面获取。
logstash-monitor-password 您创建的logstash_system_monitor用户的密码。
your full name 当前用户名的全名描述。

添加成功后,结果如下。

添加用户成功

通过Kibana控制台添加用户

  1. 登录Kibana控制台
  2. 单击Management > Users > Create new user
    创建用户
  3. New user页面,输入用户信息。
    New user
    参数 说明
    Username 用户名,可以自定义。本章节以创建Logstash监控用户为例,设置用户名为logstash_system_monitor
    Password 用户的密码。
    Confirm password 确认密码。
    Full name 当前用户名的全名描述,可选。
    Email address 用户的邮箱地址,可选。
    Roles 用户的角色,需要选择logstash_system角色。
  4. 单击Create user,完成创建。

常见问题

  • Q:为什么Logstash上传数据前,需要开启阿里云Elasticsearch集群的自动创建索引配置?

    A:阿里云Elasticsearch为了保证用户操作数据的安全性,默认把自动创建索引的配置设置为不允许。

    Logstash在上传数据的时候,使用的是提交数据的方式创建索引,而不是使用Create index API的方式。所以在使用Logstash上传数据之前,需要首先把集群的自动创建索引设置为允许。允许自动创建索引
    注意 修改配置并确认后,阿里云Elasticsearch会自动重启,为保证您的业务不受影响,请谨慎操作。
  • Q:创建索引时提示没有权限,如何操作?

    创建索引时提示没有权限

    A:请检查您创建的接入数据的用户拥有的角色,是否具有writedelete以及create_index权限。

  • Q:系统提示内存不足,如何处理?

    提示内存不足

    A:Logstash默认配置的是1GB的内存,如果您申请的ECS内存不足,可以修改config/jvm.options中的内存配置,适当调小Logstash内存的使用。

  • Q:执行logstash命令时,提示如下ERROR信息,如何处理?

    ERROR信息

    A:检查您配置文件(上文提到的test.conf文件)中的用户名和密码是否存在特殊字符,如果存在,需要使用引号括起来。