CSV&日志导入到ES

CSV&日志导入到ES

一、下载数据

须先得到数据。可以到网址 kaggle.com 进行下载。该网站含有大量的数据可以供下载。

二、Index CSV 文件到 Elasticsearch

logstash_cars.config 文件的内容如下:

input {
    file {
        path => "/Users/liuxg/data/cars.csv"
        start_position => "beginning"
        sincedb_path => "/dev/null"
    }
}
 
filter {
    csv {
        skip_header => true
        separator => ","
 
        columns => [ "maker", "model", "mileage", "manufacture_year", "engine_displacement",
        "engine_power", "body_type", "color_slug", "stk_year", "transmission", "door_count",
        "seat_count", "fuel_type", "date_created", "date_last_seen", "price_eur" ]
    }
 
    mutate { convert => ["mileage", "integer"] }
    mutate { convert => ["price_eur", "float"] }
    mutate { convert => ["engine_power", "integer"] }
    mutate { convert => ["door_count", "integer"] }
    mutate { convert => ["seat_count", "integer"] }
}
 
output {
    elasticsearch {
        hosts => "localhost:9200"
        index => "cars"
        document_type => "sold_cars"
    }
 
    stdout {}
}

这里有几点需要说明的:

  • 由于第一行有一个 header,所以,我们可以设置 skip_header 为 true 来跳过。
    在 input 中,我们定义了一个文件,它的 path 指向我们的 csv 文件的位置。start_position 指向 beginning。如果对于- 一个实时的数据源来说,它通常是 ending,这样表示它每次都是从最后拿到那个数据。sincedb_path 通常指向一个文件。这个文件保存上次操作的位置。针对我们的情况,我们设置为 /dev/null,表明,我们不存储这个数据。
  • 在 filter 中,CSV filter 是非常直接的,不太需要很多的解释。这里的 column 都来自于我们的 csv 表格。通常 Logstash 会把每个数据都当做是字符串。针对我们的情况,我们可看到 mileage 是一个整型数,price_eur 是一个浮点数。这些我们都需要进行调整。这个调整我们可以通过 mutate 来完成。
  • 在 output 之中,我们制定本地的 Elasticsearch 为我们的数据库,它的 index 是 cars,同时 document_type 为_doc。我们也同时使用 stdout,这样我们可以在 terminal 屏幕中看出数据在处理之中。

三、装载数据到 Elasticsearch

首先进入到 Logstash 的安装目录,然后打入如下的命令:

sudo ./bin/logstash -f ~/data/logstash_cars.config

提示:在运行 Logstash 时使用 -r 标志可让你在更改和保存配置后自动重新加载配置。 在测试新配置时,这将很有用,因为你可以对其进行修改,这样就不必在每次更改配置时都手动启动 Logstash。
然后,可以在屏幕上看到如下的输出:

同时如果这在 Kibana 上可以看到正在 index 的 cars index 数量(count)是一直变化的。

经过一段时间的运行,可以看到屏幕上不再滚动了,表明 Logstash 已经完成了数据的传输。可以在 Kibana 上打入如下的命令:

GET cars/_stats

以看到的 cars Index 的统计数据:

可以看到共有 3,167,984 条数据,并且它的大小有 2.466G 这么大的数据。
可以打入如下的命令:

GET cars

可以看到 Elasticsearch 已经为我们创建好了 mapping,并且它们的数据类型也可以看到:

{
  "cars" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "@timestamp" : {
          "type" : "date"
        },
     ...
        "color_slug" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "door_count" : {
          "type" : "long"
        },
        "engine_power" : {
          "type" : "long"
        },
        "fuel_type" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "host" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
    ...
    },
    "settings" : {
      "index" : {
        "creation_date" : "1567949013407",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "tYT-XWpFTGiqwn_rMX4S3A",
        "version" : {
          "created" : "7030099"
        },
        "provided_name" : "cars"
      }
    }
  }
}

可以看到 door_count 及 engine_power 都已经修改为 long 数据类型了。在默认的情况下已经为我们创建了一个 replica。

四、在 Kibana 上显示数据


五、下载 Apache 例子日志

方法一:
可以到地址 examples/apache_logs at master · elastic/examples · GitHub进行下载。然后存于自己的一个本地目录当中。

方法二:
在本地的目录使用如下的方法:
debian:

wget https://raw.githubusercontent.com/elastic/examples/master/Common%20Data%20Formats/apache_logs/apache_logs

Mac:

curl -L -O  https://raw.githubusercontent.com/elastic/examples/master/Common%20Data%20Formats/apache_logs/apache_logs

Log 的每条记录有如下的格式:

83.149.9.216 - - [17/May/2015:10:05:03 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - [17/May/2015:10:05:43 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1" 200 171717 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"

为了能够使得应用正确运行,必须下载一个叫做 apache_template.json 的 tempate 文件,并把这个文件置于和 log 文件同一个目录中。这个文件在如下的 Logstash 的配置中将会被用到。

六、安装 Filebeat

需要使用 Filebeat 来把我们的 log 信息进行读取,并传入到 Elastcsearch 之中。
deb:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-amd64.deb
sudo dpkg -i filebeat-7.3.1-amd64.deb

rpm:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpm
sudo rpm -vi filebeat-7.3.1-x86_64.rpm

mac:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-darwin-x86_64.tar.gz
tar xzvf filebeat-7.3.1-darwin-x86_64.tar.gz

brew:

brew tap elastic/tap
brew install elastic/tap/filebeat-full

linux:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-linux-x86_64.tar.gz
tar xzvf filebeat-7.3.1-linux-x86_64.tar.gz

这样 Filebeat 就安装好了。请注意:由于 ELK 迭代比较快,可以把上面的版本 7.3.1 替换成需要的版本即可。先不要运行 Filebeat。

在 Filebeat 的安装目录下,可以创建一个这样的 filebeat_apache.yml 文件,它的内容如下:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /Users/liuxg/data/apache_logs
 
output.logstash:
  hosts: ["localhost:5044"]

七、配置 Logstash


最后看到的信息:

{
          "input" => {
        "type" => "log"
    },
       "clientip" => "199.16.156.124",
        "message" => "199.16.156.124 - - [18/May/2015:14:05:13 +0000] \"GET /files/lumberjack/lumberjack-0.3.0.exe HTTP/1.1\" 200 4378624 \"-\" \"Twitterbot/1.0\"",
           "verb" => "GET",
            "ecs" => {
        "version" => "1.0.1"
    },
    "httpversion" => "1.1",
       "response" => 200,
      "timestamp" => "18/May/2015:14:05:13 +0000",
       "referrer" => "\"-\"",
     "@timestamp" => 2015-05-18T14:05:13.000Z,
            "log" => {
        "offset" => 780262,
          "file" => {
            "path" => "/Users/liuxg/data/apache_logs"
        }
    },
       "@version" => "1",
          "geoip" => {
              "timezone" => "America/Chicago",
         "country_code2" => "US",
                    "ip" => "199.16.156.124",
         "country_code3" => "US",
             "longitude" => -97.822,
          "country_name" => "United States",
              "latitude" => 37.751,
        "continent_code" => "NA",
              "location" => {
            "lon" => -97.822,
            "lat" => 37.751
        }
    },
          "ident" => "-",
           "tags" => [
        [0] "beats_input_codec_plain_applied"
    ],
          "bytes" => 4378624,
           "host" => {
        "name" => "localhost"
    },
          "agent" => {
            "hostname" => "localhost",
                  "id" => "c88813ba-fdea-4a98-a0be-468fb53566f3",
        "ephemeral_id" => "e146fbc1-8073-404e-bc6f-d692cf9303d2",
                "type" => "filebeat",
             "version" => "7.3.0"
    },
        "request" => "/files/lumberjack/lumberjack-0.3.0.exe",
           "auth" => "-"
}

八、运行 Logstash 及 Filebeat

可以通过如下的方式来运行 Logstash:

./bin/logstash -f ~/data/apache_logstash.conf

这里的 -f 选项用来指定我们的定义的 Logstash 的配置文件。
进入到 Filebeat 的安装目录,并通过如下的命令来执行 Filebeat 的数据采集,并传入到 Logstash 之中:

./filebeat -c filebeat_apache.yml

这里用 -c 选项来指定我们的 Filebeat 的配置文件。
如果想重新运行 filebeat 并重新让 Logstash 处理一遍数据,可以删除 registry 目录:
Filebeat 的 registry 文件存储 Filebeat 用于跟踪上次读取位置的状态和位置信息。

  • data/registry 针对 .tar.gz and .tgz 归档文件安装
  • /var/lib/filebeat/registry 针对 DEB 及 RPM 安装包
  • c:\ProgramData\filebeat\registry 针对 Windows zip 文件

如果想重新运行数据一遍,可以直接到相应的目录下删除那个叫做 registry 的目录即可。针对 .tar.gz 的安装包来说,我们可以直接删除这个文件:

localhost:data liuxg$ pwd
/Users/liuxg/elastic/filebeat-7.3.0-darwin-x86_64/data
localhost:data liuxg$ rm -rf registry/

等删除完这个 regsitry 目录后,再重新运行 filebeat 命令。

output

直接在屏幕上输出点表示进度。同时输出内容到 Elasticsearch。

九、在 Kibana 里查看索引

apache_logs 的数据成功导入到 Elasticsearch 之中。根据我们上面的配置文件,这个索引的名字叫做 apache_elastic_example。我们可以在 Kibana 中查看:

可以建立一个 Index Pattern,并对数据进行分析:

参考资料:

https://blog.csdn.net/UbuntuTouch/article/details/100606857

评论

暂无

添加新评论