通过 Elasticsearch 发布 MinIO 事件

简介

Minio 服务器支持与 Amazon S3 兼容的存储桶事件通知,目标包括 AMQPElasticsearchRedisnats.ioPostgreSQLApache Kafka。本博文系列的第二部分介绍如何使用 Elasticsearch 服务器发送存储桶通知。

配置 Elasticsearch 的步骤

我使用 Ubuntu Linux 16.04、最新的 Minio 服务器二进制文件和 Elasticsearch 2.4.0 在我的笔记本电脑上进行了此设置。

注意:Elasticsearch 至少需要 Java 7。建议您使用 Oracle JDK

安装 Elasticsearch

$ curl -L -O https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.0/elasticsearch-2.4.0.tar.gz
$ tar -xvf elasticsearch-2.4.0.tar.gz
$ cd elasticsearch-2.4.0/bin
$ ./elasticsearch
[2016-09-09 16:17:24,733][INFO ][node                     ] [Kirigi] version[2.4.0], pid[4422], build[ce9f0c7/2016-08-29T09:14:17Z]
[2016-09-09 16:17:24,734][INFO ][node                     ] [Kirigi] initializing ...
[2016-09-09 16:17:25,632][INFO ][plugins                  ] [Kirigi] modules [reindex, lang-expression, lang-groovy], plugins [], sites []
[2016-09-09 16:17:25,679][INFO ][env                      ] [Kirigi] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [3.5gb], net total_space [7gb], spins? [possibly], types [ext4]
...
...
注意:确保您已安装 curl 包。

配置 Minio 的步骤

最新的 Minio 服务器二进制文件可以从 https://minio.io/downloads/ 下载

$ wget https://dl.minio.io/server/minio/release/linux-amd64/minio
$ chmod +x minio
In this case “myphotos” is used as my data directory for Minio server.
$ ./minio server myphotos
Endpoint: http://10.1.10.150:9000 http://127.0.0.1:9000
AccessKey: 7I6R5G576YI641GS9J9F
SecretKey: SuycBIe+O/s5zXxU9w+N4wkXHpBCKa2H6Ptlrc8c
Region: us-east-1
...
...

Minio 服务器配置文件的默认位置是 ~/.minio/config.json。按如下方式更新 ‘config.json’ 中的 Elasticsearch 配置块。

重新启动 Minio 服务器以反映上述配置更改。“bucketevents” 是本例中 Elasticsearch 使用的索引。

使用 Minio 客户端启用存储桶通知

步骤 1:下载并安装 Minio 客户端

$ wget https://dl.minio.io/client/mc/release/linux-amd64/mc
$ chmod 755 mc

步骤 2:添加 Minio 服务器主机别名信息

使用指向 Minio 服务器的访问密钥和密钥配置 Minio 客户端。

$ ./mc config host add myminio https://:9000 7I6R5G576YI641GS9J9F SuycBIe+O/s5zXxU9w+N4wkXHpBCKa2H6Ptlrc8c

步骤 3:启用存储桶通知

在本例中,我们仅在将 JPEG 图像上传或从 ‘images’ 存储桶(在 ‘myminio’ 服务器上)删除时启用存储桶事件。此处的 ARN 值为 arn:minio:sqs:us-east-1:1:elasticsearch. 要了解有关 ARN 的更多信息,请参阅 AWS ARN 文档

$ ./mc mb myminio/images
$ ./mc events add  myminio/images arn:minio:sqs:us-east-1:1:elasticsearch --suffix .jpg
$ ./mc events list myminio/images
arn:minio:sqs:us-east-1:1:elasticsearch s3:ObjectCreated:*,s3:ObjectRemoved:* Filter: suffix=”.jpg”

步骤 4:在 Elasticsearch 上进行测试

打开另一个终端,并将 JPEG 图像上传到“images”存储桶。

$ ./mc cp myphoto.jpg myminio/images

您应该会看到 Elasticsearch 已创建了一个新的 索引。

$ curl -XGET '127.0.0.1:9200/_cat/indices?v'

health status index pri rep docs.count docs.deleted store.size 
pri.store.size

yellow open   bucketevents  5   1          1            0      7.8kb          7.8kb

使用 curl 查看 “bucketevents” 索引的内容

$ curl -XGET '127.0.0.1:9200/bucketevents/_search?pretty=1'
{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "bucketevents",
      "_type" : "event",
      "_id" : "AVcRVOlwe-uNB1tfj6bx",
      "_score" : 1.0,
      "_source" : {
        "Records" : [ {
          "eventVersion" : "2.0",
          "eventSource" : "aws:s3",
          "awsRegion" : "us-east-1",
          "eventTime" : "2016-09-09T23:42:39.977Z",
          "eventName" : "s3:ObjectCreated:Put",
          "userIdentity" : {
            "principalId" : "minio"
          },
          "requestParameters" : {
            "sourceIPAddress" : "10.1.10.150:52140"
          },
          "responseElements" : { },
          "s3" : {
            "s3SchemaVersion" : "1.0",
            "configurationId" : "Config",
            "bucket" : {
              "name" : "images",
              "ownerIdentity" : {
                "principalId" : "minio"
              },
              "arn" : "arn:aws:s3:::images"
            },
            "object" : {
              "key" : "myphoto.jpg",
              "size" : 200436,
              "sequencer" : "1472CC35E6971AF3"
            }
          }
        } ]
      }
    } ]
  }
}
view rawelasticsearch hosted with ❤ by Git

上面的 curl 输出表明已成功创建包含通知内容的 Elasticsearch 索引

如有任何问题或意见,请加入我们的 Slack 聊天室:https://slack.minio.io